Почему в Magento 1.9 электронные письма с заказами отправляются через очередь, а электронные письма со счетами отправляются напрямую?
-
29-09-2020 - |
Вопрос
Почему в Magento 1.9 электронные письма с заказами отправляются через очередь, а электронные письма со счетами отправляются напрямую?Я проверил код заказа и счета-фактуры, а также order-sendNewOrderEmail
использует очередь, в то время как invoice->sendEmail()
пропускает его полностью.В случае, если заказ будет одобрен автоматически, электронное письмо с заказом будет отправлено после электронного письма со счетом, а не до него!
Решение
Электронные письма с заказами отправляются с использованием очереди по разным причинам:
- Избегайте замедления работы интерфейса при отправке электронной почты
- Повторно отправить в случае неудачи
- Избегайте ошибок при оформлении/после оформления заказа
Решение 1 (немедленно отправить электронное письмо с заказом):
Если вы хотите немедленно отправить электронное письмо с заказом, вы можете рассмотреть возможность отмены Mage_Sales_Model_Order::queueNewOrderEmail()
метод, соединив следующие строки:
/** @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();