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?

8

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 commande et de facture, et order-sendNewOrderEmailutilise la file d'attente, tout en le invoice->sendEmail()sautant complètement. Cela signifie que l'e-mail de commande sera envoyé après l'e-mail de facturation au lieu d'avant au cas où la commande serait approuvée automatiquement!

Tapoter
la source

Réponses:

11

Les e-mails de commandes sont envoyés à l'aide de la file d'attente pour différentes raisons:

  • Évitez le ralentissement frontal lors de l'envoi de l'e-mail
  • Renvoyer en cas d'échec
  • Évitez les erreurs lors du paiement / post-paiement

Solution 1 (envoyer immédiatement l'e-mail de la commande):

Si vous souhaitez envoyer immédiatement un e-mail de commande, vous pouvez envisager Mage_Sales_Model_Order::queueNewOrderEmail()de remplacer la 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 des factures à l'aide de la file d'attente):

La solution inverse consiste à laisser les factures utiliser la file d'attente:

Vous devez remplacer la Mage_Sales_Model_Order_Invoice::sendEmailmodification:

// 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();
Phoenix128_RiccardoT
la source
Merci beaucoup pour la suggestion! J'ai fait la même chose, mais dans l'autre sens. J'ai plutôt ajouté la facture à la file d'attente. Cela a fonctionné, mais je me demande si c'est également le cas?
Pat
1
Oui bien sûr. Je vais ajouter à mon message pour les autres utilisateurs.
Phoenix128_RiccardoT
1
Semble une bonne solution. Donnera un essai
Jai
1
J'ai utilisé la solution 1 et cela a fonctionné de moi. Merci
Jai