在Magento1.9中,为什么订单电子邮件通过队列发送,而发票电子邮件直接发送?我检查了订单和发票的代码, order-sendNewOrderEmail 使用队列,而 invoice->sendEmail() 完全跳过它。它使订单电子邮件发送后,发票电子邮件,而不是之前,以防订单被自动批准!

有帮助吗?

解决方案

由于不同的原因,使用队列发送订单电子邮件:

  • 在发送电子邮件时避免前端减速
  • 失败时重新发送
  • 避免结账/结账后出错

解决方案1(立即发送订单的电子邮件):

如果您想立即发送订单电子邮件,您可以考虑复盖 Mage_Sales_Model_Order::queueNewOrderEmail() 通过chainging以下行的方法:

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

解决方案2(使用队列发送发票):

相反的解决方案是让发票使用队列:

你必须复盖 Mage_Sales_Model_Order_Invoice::sendEmail 改变:

// 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();
许可以下: CC-BY-SA归因
scroll top