Send Transactional Email Programmatically in Magento 1

emailmagento-1transactional-mail

This is my code:

 $emailTemplate  = Mage::getModel('core/email_template')->loadDefault('newsletter_subscription_confirm_email_template');
            $emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email', $storeId));
            $emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name', $storeId));
            try {
                $emailTemplate->send($email, $order->getData('customer_firstname')." ".$order->getData('customer_lastname'), array());
                Mage::getSingleton('core/session')->addSuccess(Mage::helper('customer')->__('An email was sent with a confirmation url'));
                $this->redirectSubscribeSuccess();
            } catch (Exception $e) {
                throw new Exception($e->getMessage());
            }

I received the the email with the content of the transactional email, except that the

{{var subscriber.getConfirmationLink()}}
is empty . Do you know why ?

Thanks.!

[UPDATE]

 $emailTemplate  = Mage::getModel('core/email_template')->loadDefault('newsletter_subscription_confirm_email_template');
            $emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email', Mage::app()->getStore()->getId()));
            $emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name', Mage::app()->getStore()->getId()));
            $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
            if (!$subscriber->getId()
                || $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED
                || $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE) {
                $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED);
                $subscriber->setSubscriberEmail($email);
                $subscriber->setSubscriberConfirmCode($subscriber->RandomSequence());
                $subscriber->setStoreId(Mage::app()->getStore()->getId());
                $subscriber->setCustomerId($order->getData('customer_id'));
            }
            try {
                $emailTemplate->send($email, $order->getData('customer_firstname')." ".$order->getData('customer_lastname'), array('subscriber' => $subscriber));
                Mage::getSingleton('core/session')->addSuccess(Mage::helper('customer')->__('An email was sent with a confirmation url'));
                $this->redirectSubscribeSuccess();
            } catch (Exception $e) {
                throw new Exception($e->getMessage());
            }

Best Answer

If you look at default Magento confirmation email send function Mage_Newsletter_Model_Subscriber::sendConfirmationRequestEmail You will see that they have used $this, object of newsletter/subscriber model to pass as subscriber in it.

$email->sendTransactional(
    Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_TEMPLATE),
    Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_IDENTITY),
    $this->getEmail(),
    $this->getName(),
    array('subscriber'=>$this)
);

You need to pass object of newsletter/subscriber to your custom email send function to make {{var subscriber.getConfirmationLink()}} work. In your code you have passed blank array() You can simply use

$newsletterObject = Mage::getModel('newsletter/subscriber');
$emailTemplate->send($email, $order->getData('customer_firstname')." ".$order->getData('customer_lastname'), array('subscriber'=>$newsletterObject));

You may need to load current subscriber in $newsletterObject.

Related Topic