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.


Thank you for this tuto, but don’t you miss a
$emailTemplate->setSenderName(‘my name’);
$emailTemplate->setSenderEmail(‘my@email.com’);
before to send?
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
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.
the config.xml of your module from the etc. folder
Thanks for the tip. Just what I was looking for! Cheers
…
ActiveCodeline custom email module
activecodeline_custom_email1.html
html
…
xml?????
$emailTemplate->send(‘john@someemail.com’,'John Doe’, $emailTemplateVariables);
send() config?
where does the custom_email_template1.html file goes?
How do you make a new field required?
Nice article, thank you!
How do you pass the locale information with this technique?
Thanks Branko!
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
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?
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.
Great work Buddy.
But I want to attach one pdf with this mail.:)
How to do that ?
Please help.
Hi Atoz,
Maybe you can try something like
?
You should have a look there :
http://www.magentocommerce.com/boards/viewthread/10762/P45/
That’s a bit old, but that’s exactly your problem.
It is silly to wait for “smart comments like, “few hours, huh its so easy…””
In the modern times we use internet and if we do not know something just ask Google
This introduction is great clounade
Haii haltabush,
Thanks a lot for your support. It worked great . Thanks Buddy…….
H,
I’ve tried to add a new Email Template file (activecodeline_custom_email1.html) to the folder “/app/locale/en_US/template/email” and use it according to the instructions here, but after I did that the New Email Template page in the admin area stoped working… It looks like the page start to load the templates to the
Load default template- Template dropdown and have an error while doing that so the page stop there (I’m adding a print screen).
Iv’e tried to delete the “activecodeline_custom_email1.html” file from “/app/locale/en_US/template/email” and clean the cache but it didn’t fixed the problem.
How can I fix this?
Buy the way – I’m using Magento ver. 1.4.0.1
I’ll really appreciate some help
Sorry. Newbie question here.
Where are the php and xml files located at?
Thanks
Joe
Wow! It’s the great tip I want!
In the magento document is not good as this 1!
before I spend 2 days to do sending email in magento and it’s not working!
After I found this, I just spend 1 hour to do!
Cheer,
Rithy
It´s works for me!!
BUUUUUUUUUUUUUUUUUT its required that u clear the cache even don´t use it via admin.
execute “rm -fr var/cache/*”
I worked 2 days in this problem! =/
ps. Im sorry by my English.
Hi,
I followed this tuto, but still can’t get it work even if I add these lines
$emailTemplate->setSenderName(‘Test’);
$emailTemplate->setSenderEmail(‘somemail@domain.com’);
$emailTemplate->setTemplateSubject(‘STATUS CHANGED’);
How can I check if the operation is successful?
hi to all,
i created a custom module in front end. any user can post what they thinking in mind about website.
i used ur script the mail is not going…the final result will false.soo please help me…
In that nothing is their just a using a mail function..no need to interact with the database..just a simple script..
Awesome
Thank you
thnx a lot
If you want to just change Email Subject as posted from subject field–
- Go to System> Transactional Emails
- Click your template to Edit
- delete your static Email subject and replace with
{{var data.subject}}
Here, You should have field with name “subject”
Great tutorial, but no emails are sent and no errors are generated.
Any help would be appreciated. I’ve literally copied the code as is, no customization what so ever, just to check this solution works. I can provide code if need be.
To point out, I’ve placed this within my own controller – e.g. email/enquiry/hello
Thanks for the awesome post! Do you know how I would add the Customer’s Company Name (from Billing Address) in an email template’s subject line?
Thank you very much
I’m very happy
[quote]
H,
I’ve tried to add a new Email Template file (activecodeline_custom_email1.html) to the folder “/app/locale/en_US/template/email” and use it according to the instructions here, but after I did that the New Email Template page in the admin area stoped working… It looks like the page start to load the templates to the
Load default template- Template dropdown and have an error while doing that so the page stop there (I’m adding a print screen).
Iv’e tried to delete the “activecodeline_custom_email1.html” file from “/app/locale/en_US/template/email” and clean the cache but it didn’t fixed the problem.
How can I fix this?
Buy the way – I’m using Magento ver. 1.4.0.1
[/quote]
True.
Generates error_log
[18-Aug-2011 07:14:01] PHP Fatal error: Class ‘Mage_SampleModule1_Helper_Data’ not found in /home/public_html/app/Mage.php on line 523
Thanks a Lot….
Awesome peace of Code
Thanks for the code. I’ve got one problem though. The email works and sends fine but now when I log into the backend and go to System > Transactional Emails > and click ‘Add new template’ the page seems to crash. The template dropdown gets rendered but with no options and everything after that fails to load.
Just wondering if anyone else has had that problem?
I think it could be down to my xml. I’m not sure what I have in the module=”" is correct. My module is in Local > Optimise > Requestcallback
<global> <template> <email> <optimise_orderform module="Orderform"> <label>Optimise Orderform</label> <file>optimise_orderform.html</file> <type>html</type> </optimise_orderform> </email> </template> </global>Oops pasted from wrong confix.xml:
<global> <template> <email> <Optimise_Requestcallback module="optimise_requestcallback"> <label>Optimise RequestCallback</label> <file>optimise_requestcallback.html</file> <type>html</type> </Optimise_Requestcallback> </email> </template> </global>Here is a detailed blog written magento transactional emails
http://www.excellencemagentoblog.com/magento-advanced-transactional-email-templates
The admin Transactional Email-s don’t work anymore definitly. Does anyone have solution for this?
Thanks for the great article though, it works great, but this is the problem now.
If you are having trouble with the Transactional Emails in Admin try removing the module attrubute in your config.xml. For example, if you’re using the sample code change line 5 from this:
to this:
This solved the issue for me.