在Magento1.9中,为什么订单电子邮件通过队列发送,而发票电子邮件直接发送?
-
29-09-2020 - |
题
在Magento1.9中,为什么订单电子邮件通过队列发送,而发票电子邮件直接发送?我检查了订单和发票的代码, order-sendNewOrderEmail
使用队列,而 invoice->sendEmail()
完全跳过它。它使订单电子邮件发送后,发票电子邮件,而不是之前,以防订单被自动批准!
解决方案
由于不同的原因,使用队列发送订单电子邮件:
- 在发送电子邮件时避免前端减速
- 失败时重新发送
- 避免结账/结账后出错
解决方案1(立即发送订单的电子邮件):
如果您想立即发送订单电子邮件,您可以考虑复盖 Mage_Sales_Model_Order::queueNewOrderEmail()
通过chainging以下行的方法:
/** @var $emailQueue Mage_Core_Model_Email_Queue */
$emailQueue = Mage::getModel('core/email_queue');
$emailQueue->setEntityId($this->getId())
->setEntityType(self::ENTITY)
->setEventType(self::EMAIL_EVENT_NAME_NEW_ORDER)
->setIsForceCheck(!$forceMode);
$mailer->setQueue($emailQueue)->send();
到:
/** @var $emailQueue Mage_Core_Model_Email_Queue */
$mailer->send();
解决方案2(使用队列发送发票):
相反的解决方案是让发票使用队列:
你必须复盖 Mage_Sales_Model_Order_Invoice::sendEmail
改变:
// Set all required params and send emails
$mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
$mailer->setStoreId($storeId);
$mailer->setTemplateId($templateId);
$mailer->setTemplateParams(array(
'order' => $order,
'invoice' => $this,
'comment' => $comment,
'billing' => $order->getBillingAddress(),
'payment_html' => $paymentBlockHtml
)
);
$mailer->send();
到:
// Set all required params and send emails
$mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
$mailer->setStoreId($storeId);
$mailer->setTemplateId($templateId);
$mailer->setTemplateParams(array(
'order' => $order,
'invoice' => $this,
'comment' => $comment,
'billing' => $order->getBillingAddress(),
'payment_html' => $paymentBlockHtml
)
);
$emailQueue = Mage::getModel('core/email_queue');
$emailQueue->setEntityId($this->getId())
->setEntityType('order_invoice')
->setEventType('new_invoice');
$mailer->setQueue($emailQueue)->send();