No Magento 1.9, por que os e-mails de pedidos são enviados pela fila, enquanto os e-mails de fatura são enviados diretamente?
-
29-09-2020 - |
Pergunta
No Magento 1.9, por que os e-mails de pedidos são enviados pela fila, enquanto os e-mails de fatura são enviados diretamente?Verifiquei o código do pedido e da fatura, e o order-sendNewOrderEmail
usa a fila, enquanto invoice->sendEmail()
ignora completamente.É fazer com que o e-mail do pedido seja enviado depois do e-mail da fatura, e não antes, caso o pedido seja aprovado automaticamente!
Solução
Os e-mails de pedidos são enviados usando a fila por diferentes motivos:
- Evite lentidão no frontend ao enviar o e-mail
- Reenviar em caso de falha
- Evite erros no checkout/pós-checkout
Solução 1 (enviar email do pedido imediatamente):
Se você deseja enviar o e-mail do pedido imediatamente, considere substituir o Mage_Sales_Model_Order::queueNewOrderEmail()
método encadeando as seguintes linhas:
/** @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();
para:
/** @var $emailQueue Mage_Core_Model_Email_Queue */
$mailer->send();
Solução 2 (enviar faturas via fila):
A solução oposta é permitir que as faturas usem a fila:
Você deve substituir Mage_Sales_Model_Order_Invoice::sendEmail
mudando:
// 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();
Para:
// 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();