Trong Magento 1.9, tại sao email đặt hàng được gửi qua hàng đợi, trong khi email Hóa đơn được gửi trực tiếp?


8

Trong Magento 1.9, tại sao email đặt hàng được gửi qua hàng đợi, trong khi email Hóa đơn được gửi trực tiếp? Tôi đã kiểm tra mã cho Đơn hàng và Hóa đơn, và order-sendNewOrderEmailsử dụng hàng đợi, trong khi invoice->sendEmail()bỏ qua hoàn toàn. Đó là làm cho email đơn đặt hàng được gửi sau email hóa đơn thay vì trước đó trong trường hợp đơn hàng được phê duyệt tự động!

Câu trả lời:


11

Email đơn đặt hàng được gửi bằng cách sử dụng hàng đợi vì những lý do khác nhau:

  • Tránh làm chậm giao diện trong khi gửi email
  • Gửi lại thất bại
  • Tránh sai sót khi thanh toán / hậu thanh toán

Giải pháp 1 (gửi email của đơn hàng ngay lập tức):

Nếu bạn muốn gửi email đặt hàng ngay lập tức, bạn có thể xem xét ghi đè Mage_Sales_Model_Order::queueNewOrderEmail()phương thức bằng cách trộn các dòng sau:

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

đến:

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

Giải pháp 2 (gửi hóa đơn bằng cách sử dụng hàng đợi):

Giải pháp ngược lại là để hóa đơn sử dụng hàng đợi:

Bạn phải ghi đè Mage_Sales_Model_Order_Invoice::sendEmailthay đổi:

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

Đến:

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

Cảm ơn bạn rất nhiều vì sự gợi ý! Tôi thực sự đã làm như vậy, nhưng cách khác xung quanh. Tôi đã thêm hóa đơn vào hàng đợi thay thế. Nó đã làm việc, nhưng tôi tự hỏi nếu nó cũng đúng để làm gì?
Pat

1
Vâng, chắc chắn rồi. Tôi sẽ thêm vào bài viết của mình cho những người dùng khác.
Phoenix128_RiccardoT

1
Có vẻ là giải pháp tốt. Sẽ thử một lần
Jai

1
Tôi đã sử dụng giải pháp 1 và nó làm việc với tôi. Cảm ơn
Jai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.