Warum werden in Magento 1.9 Bestell-E-Mails über die Warteschlange gesendet, während Rechnungs-E-Mails direkt gesendet werden?

8

Warum werden in Magento 1.9 Bestell-E-Mails über die Warteschlange gesendet, während Rechnungs-E-Mails direkt gesendet werden? Ich habe den Code für Bestellung und Rechnung überprüft und order-sendNewOrderEmaildie Warteschlange verwendet, während invoice->sendEmail()ich sie vollständig überspringe. Die Bestell-E-Mail wird nach der Rechnungs-E-Mail anstatt zuvor gesendet, falls die Bestellung automatisch genehmigt wird!

Klopfen
quelle

Antworten:

11

E-Mails mit Bestellungen werden aus verschiedenen Gründen über die Warteschlange gesendet:

  • Vermeiden Sie eine Verlangsamung des Frontends beim Versenden der E-Mail
  • Bei Fehler erneut senden
  • Vermeiden Sie Fehler beim Auschecken / Nachauschecken

Lösung 1 (E-Mail der Bestellung sofort senden):

Wenn Sie eine Mage_Sales_Model_Order::queueNewOrderEmail()Bestell- E-Mail sofort senden möchten, können Sie die Methode überschreiben , indem Sie die folgenden Zeilen ändern:

/** @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();

zu:

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
    $mailer->send();

Lösung 2 (Rechnungen über Warteschlange senden):

Die entgegengesetzte Lösung besteht darin, Rechnungen die Warteschlange verwenden zu lassen:

Sie müssen das Mage_Sales_Model_Order_Invoice::sendEmailÄndern überschreiben :

// 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();

Zu:

// 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
quelle
Vielen Dank für den Vorschlag! Ich habe tatsächlich das Gleiche getan, aber umgekehrt. Ich habe stattdessen die Rechnung zur Warteschlange hinzugefügt. Es hat funktioniert, aber ich frage mich, ob es auch richtig ist?
Pat
1
Ja sicher. Ich werde meinen Beitrag für andere Benutzer hinzufügen.
Phoenix128_RiccardoT
1
Scheint eine gute Lösung zu sein. Werde es versuchen
Jai
1
Ich habe Lösung 1 verwendet und es hat bei mir funktioniert. Danke
Jai