Magento custom emails

Featured Image

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.

Interested in hiring us?

Have a chat with us. You would be surprised how small changes can make your business even more successful.


51 comments

  1. try this code it works..

    $emailTemplate = Mage::getModel(‘core/email_template’)->loadDefault(‘custom_email_template1′);

    //Getting the Store E-Mail Sender Name.
    $senderName = ‘billa';

    //Getting the Store General E-Mail.
    $senderEmail = ‘billa@gmail.com';

    //Variables for Confirmation Mail.
    $emailTemplateVariables = array();
    $emailTemplateVariables[‘myvar1′] = ‘Branko';
    $emailTemplateVariables[‘myvar2′] = ‘Ajzele';
    $emailTemplateVariables[‘myvar3′] = ‘ActiveCodeline';

    //Appending the Custom Variables to Template.
    $processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables);

    //Sending E-Mail to Customers.
    $mail = Mage::getModel(‘core/email’)
    ->setToName(‘bilaa’)
    ->setToEmail(‘billa@gmail.com’)
    ->setBody($processedTemplate)
    ->setSubject(‘Subject :’)
    ->setFromEmail(‘billa@gmail.com’)
    ->setFromName(‘bilaa’)
    ->setType(‘html’);
    try{
    //Confimation E-Mail Send
    $mail->send();
    }
    catch(Exception $error)
    {
    Mage::getSingleton(‘core/session’)->addError($error->getMessage());
    return false;
    }

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <blockquote cite=""> <code> <del datetime=""> <em> <s> <strike> <strong>. You may use following syntax for source code: <pre><code>$current = "Inchoo";</code></pre>.