En Magento 1.9, ¿por qué los correos electrónicos de pedidos se envían a través de la cola, mientras que los correos electrónicos de facturas se envían directamente?
-
29-09-2020 - |
Pregunta
En Magento 1.9, ¿por qué los correos electrónicos de pedidos se envían a través de la cola, mientras que los correos electrónicos de facturas se envían directamente?Revisé el código de Pedido y Factura, y el order-sendNewOrderEmail
usa la cola, mientras invoice->sendEmail()
lo salta por completo.¡Está haciendo que el correo electrónico del pedido se envíe después del correo electrónico de la factura en lugar de antes en caso de que el pedido se apruebe automáticamente!
Solución
Los correos electrónicos de pedidos se envían utilizando la cola por diferentes motivos:
- Evite la desaceleración de la interfaz al enviar el correo electrónico
- Reenviar en caso de error
- Evite errores al finalizar la compra/post-compra
Solución 1 (enviar el correo electrónico del pedido inmediatamente):
Si desea enviar el correo electrónico del pedido inmediatamente, puede considerar anular el Mage_Sales_Model_Order::queueNewOrderEmail()
método encadenando las siguientes líneas:
/** @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();
a:
/** @var $emailQueue Mage_Core_Model_Email_Queue */
$mailer->send();
Solución 2 (enviar facturas usando cola):
La solución opuesta es permitir que las facturas utilicen la cola:
Debes anular Mage_Sales_Model_Order_Invoice::sendEmail
cambiando:
// 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();
A:
// 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();