Magento 1.9では、注文メールはキューを介して送信され、請求書メールは直接送信されるのはなぜですか?


8

Magento 1.9では、注文メールはキューを介して送信され、請求書メールは直接送信されるのはなぜですか?OrderとInvoiceのコードを確認し、order-sendNewOrderEmailはキューを使用しましたが、invoice->sendEmail()完全にスキップしました。注文が自動的に承認された場合に備えて、注文メールが請求メールの前ではなく後に送信されるようにしています。

回答:


11

注文メールは、さまざまな理由でキューを使用して送信されます。

  • メールの送信中にフロントエンドの速度低下を回避する
  • 失敗時に再送信
  • チェックアウト/チェックアウト後のエラーを回避する

解決策1(注文のメールをすぐに送信):

注文メールをすぐに送信する場合はMage_Sales_Model_Order::queueNewOrderEmail()、次の行をチェーンしてメソッドをオーバーライドすることを検討できます。

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

提案ありがとうございました!私は実際には同じことをしましたが、その逆です。代わりに請求書をキューに追加しました。うまくいきましたが、それも正しいのでしょうか?
2016

1
はい、そうです。他のユーザーの投稿に追加します。
Phoenix128_RiccardoT 2016

1
良い解決策のようです。試してみる
Jai

1
私は解決策1を使用し、それは私からうまくいきました。ありがとう
Jai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.