Magento custom emails
14 Comments 8th JUN 2009 | Posted by Branko Ajzele in Magento

Ever wanted to “just send the email” using the built in email features in Magento? Ever hit the wall trying to do something with Magento? OK, I know the answer to the other one, just had to ask
. Anyhow, sending the emails with Magento turned out to be a process of “just” a few hours of tracing Magento code.
I cant wait for smart comments like, “few hours, huh its so easy…”. Yea, thats the beauty of Magento… few hours of bashing your head against the wall while you are sipping the 4th cup of coffee until the solution hits you. Interesting do, just when you get the hang of it, Magento gets you this “have you tried this” attitude
.
What am I talking about? Scenario: I want to create email template named activecodeline_custom_email1.html, I want to pass few variables to it during runtime, I want to send emails programmaticaly. I dont want to create 56 lines of xml file just to call one template.
Here is how.
...
/*
* Loads the html file named 'custom_email_template1.html' from
* app/locale/en_US/template/email/activecodeline_custom_email1.html
*/
$emailTemplate = Mage::getModel('core/email_template')
->loadDefault('custom_email_template1');
//Create an array of variables to assign to template
$emailTemplateVariables = array();
$emailTemplateVariables['myvar1'] = 'Branko';
$emailTemplateVariables['myvar2'] = 'Ajzele';
$emailTemplateVariables['myvar3'] = 'ActiveCodeline';
/**
* The best part
* Opens the activecodeline_custom_email1.html, throws in the variable array
* and returns the 'parsed' content that you can use as body of email
*/
$processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables);
/*
* Or you can send the email directly,
* note getProcessedTemplate is called inside send()
*/
$emailTemplate->send('john@someemail.com','John Doe', $emailTemplateVariables);
...
And here we go again, nothing without xml files
-In order for above piece of code to work, you need to add an entry to your config.xml file like shown below.
... <global> <template> <email> <custom_email_template1 module="SampleModule1"> <label>ActiveCodeline custom email module</label> <file>activecodeline_custom_email1.html</file> <type>html</type> </custom_email_template1> </email> </template> </global> ...
And lets not forget the email template itself, app/locale/en_US/template/email/activecodeline_custom_email1.html.
<!--@subject ActiveCodeline custom email module @-->
<div>
<h1>ActiveCodeline custom email example by Branko Ajzele</h1>
<p>Hi there {{var myvar1}} {{var myvar2}} from {{var myvar3}}. This is just some example template to test custom email module.</p>
</div>
Hope this was helpful. Cheers.


















June 11th, 2009 at 6:15
Thank you for this tuto, but don’t you miss a
$emailTemplate->setSenderName(‘my name’);
$emailTemplate->setSenderEmail(‘my@email.com’);
before to send?
June 18th, 2009 at 14:16
François Gueguen is right, it does need the send name and sender email.
I would like to know though if there is a way to get those details from magento
July 2nd, 2009 at 10:26
Hi, thanks very much for your trick.
I want to send an email from Order View Page in admin panel. I tried to use your trick, but it did not work. I am confused that which config.xml I should change. Please help me.
July 3rd, 2009 at 15:09
the config.xml of your module from the etc. folder
July 9th, 2009 at 9:00
Thanks for the tip. Just what I was looking for! Cheers
August 4th, 2009 at 4:05
…
ActiveCodeline custom email module
activecodeline_custom_email1.html
html
…
xml?????
August 4th, 2009 at 4:30
$emailTemplate->send(‘john@someemail.com’,'John Doe’, $emailTemplateVariables);
send() config?
August 28th, 2009 at 15:42
where does the custom_email_template1.html file goes?
November 3rd, 2009 at 22:39
How do you make a new field required?
December 23rd, 2009 at 17:04
Nice article, thank you!
How do you pass the locale information with this technique?
January 15th, 2010 at 12:40
Thanks Branko!
January 29th, 2010 at 8:05
i am using default template but the problem is i get mail but comments are not showing in that mail,
how can i resolve the issue
all details are mailing to me but comments are not in that mail
hope u understood the problem i am having with mailing
February 2nd, 2010 at 11:27
Nice tutorial, thank you!
Can we use it as usual in Magento, I mean can we rewrite it from the administration panel for the different languages?
February 16th, 2010 at 14:40
As François Gueguen said before, you must use :
$emailTemplate->setSenderName(‘NAME’);
$emailTemplate->setSenderEmail(‘EMAIL@DOMAIN.com’);
$emailTemplate->setTemplateSubject(‘STATUS CHANGED’);
Because the function isValidForSend is called when executing the send() function.