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>