Dans Magento 1.9, pourquoi les e-mails de commande sont-ils envoyés via la file d'attente, alors que les e-mails de facture sont envoyés directement ?
-
29-09-2020 - |
Question
Dans Magento 1.9, pourquoi les e-mails de commande sont-ils envoyés via la file d'attente, alors que les e-mails de facture sont envoyés directement ?J'ai vérifié le code de la commande et de la facture, et le order-sendNewOrderEmail
utilise la file d'attente, tandis que invoice->sendEmail()
l'ignore complètement.Cela fait que l'e-mail de commande soit envoyé après l'e-mail de facture au lieu d'avant au cas où la commande serait approuvée automatiquement !
La solution
Les emails de commandes sont envoyés via la file d'attente pour différentes raisons :
- Évitez le ralentissement du frontend lors de l’envoi de l’e-mail
- Renvoyer en cas d'échec
- Évitez les erreurs lors du paiement/après le paiement
Solution 1 (envoyer immédiatement l'e-mail de commande) :
Si vous souhaitez envoyer un e-mail de commande immédiatement, vous pouvez envisager de remplacer le Mage_Sales_Model_Order::queueNewOrderEmail()
méthode en chaînant les lignes suivantes :
/** @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();
Solution 2 (envoyer les factures en utilisant la file d'attente) :
La solution inverse consiste à laisser les factures utiliser la file d'attente :
Vous devez remplacer Mage_Sales_Model_Order_Invoice::sendEmail
en changeant:
// 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();