Search code examples
magentoeventscheckoutobservers

Magento Observer for Multi Shipping emails


I have a some difficulties with Magento send email after place order. I need to send custom email to custom address. I've create Observer for sales_order_place_after and it works perfect but when I use checkout for multiple address I have error. This is my Observer:

public function sendMail($observer)
{
    /* Get Order ID by Observer */
    $_orderID = $observer->getOrder()->getID();

    /* Load $order by Order ID */
    $_order = Mage::getModel('sales/order')->load($_orderID);

    try {
        /* Load Email Template by template name */
        $emailTemplate = Mage::getModel('core/email_template');
        $emailTemplate->loadDefault('send_mail');
        $emailTemplate->setTemplateSubject('SITE.COM: You Have New Order');

        $salesData['email'] = '[email protected]';
        $salesData['name'] = Mage::getStoreConfig('trans_email/ident_general/name');

        /* Set Sender name and email by General email */
        $emailTemplate->setSenderName($salesData['name']);
        $emailTemplate->setSenderEmail($salesData['email']);

        /* Create email template by Order data */
        $emailTemplateVariables['username'] = $_order->getCustomerName();
        $emailTemplateVariables['shipping_address'] = $_order->getShippingAddress()->format('html');
        $emailTemplateVariables['shipping_description'] = $_order->getShippingDescription();
        $emailTemplateVariables['order_id'] = $_order->getIncrementId();
        $emailTemplateVariables['creating_time'] = $_order->getCreatedAtFormated('long');
        $emailTemplateVariables['is_not_virtual'] = $_order->getIsNotVirtual();
        $emailTemplateVariables['store_name'] = $_order->getStoreName();
        $emailTemplateVariables['store_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
        $emailTemplateVariables['order'] = $_order;

        /* Send email, when order was placed */
        $emailTemplate->setType('html');
        $emailTemplate->send($salesData['email'], $_order->getStoreName(), $emailTemplateVariables);

        /* Add  Success Message to system.log if email was sent */
        Mage::log('Success! Email was sent.');

    } catch (Exception $e) {
        /* Add error message to system.log if email wasn't sent */
        Mage::logException($e);
    }
    return $this;
}

and config.xml:

<events>
        <sales_order_place_after>
            <observers>
                <sendmail>
                    <type>singleton</type>
                    <class>Custom_SendMail_Model_Order_Observer</class>
                    <method>sendMail</method>
                </sendmail>
            </observers>
        </sales_order_place_after>
    </events>
    <template>
        <email>
            <send_mail translate="label">
                <label>New Order for Dropshippers</label>
                <file>sales/order_dropship.html</file>
                <type>html</type>
            </send_mail>
        </email>
    </template>

Thank you!


Solution

  • I found solution for this issue. Need to use checkout_submit_all_after event instead sales_order_place_after