Send a transactional email in Magento
Posted on December 22, 2012 by Nimrod Techn There have been 0 comments
Sometimes we would like to send a customized transactional email right after a transaction has been made.
How would we do it? Simple. Create an Observer and hook it up with Magento's checkout -success event (checkout_onepage_controller_success_action).
Let's create and extension dir (Transemail) with 2 files in it:
1. app/code/local/Engineering/Transemail/Model/Observer.php: <?php class Engineering_Transemail_Model_Observer extends Mage_Core_Model_Abstract {
public function sendMail($observer) { $event = $observer->getEvent(); if(!$order = $event->getOrder()) { $order_Id = Mage::getSingleton('checkout/type_onepage')->getCheckout() ->getLastOrderId(); $order = Mage::getModel('sales/order')->load($order_Id); } $payment = $order->getPayment()->getMethod(); $loginfos = false; //shows informations on the progress data $addhistoryactive = false; //history and statuschange is saved in orders // Transactional Email Template's ID $templateId = 1; //choise template // Set sender information $senderName = Mage::getStoreConfig('trans_email/ident_support/name'); $senderEmail = Mage::getStoreConfig('trans_email/ident_support/email'); $sender = array('name' => $senderName,'email' => $senderEmail); // Get Store ID $storeid = Mage::app()->getStore()->getId(); $billing_details = $order->getBillingAddress(); $payment_data = $order->getData(); $gender = $payment_data['customer_gender'];//$billing_details->getGender(); $customer_name = $billing_details->getLastname(); if($addhistoryactive) { //add history comment $comment = 'blabla'; $order->addStatusHistoryComment($comment); $order->save(); } if($gender==1) { //1-male, Magento standard $gender_html = "Mr. ".$customer_name; } else { //0-female, Magento standard $gender_html = "Mrs. ".$customer_name; } // Set recepient information $recepientEmail = $billing_details->getEmail(); $recepientName = $billing_details->getFirstname()." " .$billing_details->getLastname(); $payment = $order->getPayment(); $method = $payment->getMethodInstance(); $addinfo = $order->getPayment()->getAdditionalInformation(); $grandtotal = $order->getGrandTotal(); $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment()) ->setIsSecureMode(true); $paymentBlock->getMethod()->setStore($storeId); $paymentBlockHtml = $paymentBlock->toHtml(); // Set variables that can be used in email template $vars = array('customerName' => 'test', 'customerEmail' => $recepientEmail, 'gender_html' => $gender_html, 'order' => $order, ); // Send Transactional Email $mailTemplate = Mage::getModel('core/email_template'); $mailTemplate->setTemplateSubject('subject'); $mailTemplate->setDesignConfig(array('area' => 'frontend')); $mailTemplate->sendTransactional($templateId, $sender, $recepientEmail, $recepientName, $vars, $storeId); return true; }
}
2. app/code/local/Engineering/Transemail/etc/config.xml:<?xml version="1.0"?>
<config>
<modules>
<Engineering_Transemail>
<version>0.1.0</version>
</Engineering_Transemail>
</modules>
<frontend>
<events>
<checkout_onepage_controller_success_action>
<observers>
<transemail_observer>
<type>singleton</type>
<class>Engineering_Transemail_Model_Observer</class>
<method>sendMail</method>
</transemail_observer>
</observers>
</checkout_onepage_controller_success_action>
</events>
</frontend>
</config>
Now - Don't forget to create the app/etc/modules/Engineering_Transemail.xml file:
<?xml version="1.0"?> <config> <modules> <Engineering_Transemail> <active>true</active> <codePool>local</codePool> </Engineering_Transemail> </modules> </config>
This post was posted in Writing a Magento Extension