Di Magento 1.9, mengapa email pesanan dikirim melalui antrian, sedangkan email Faktur dikirim langsung?

8

Di Magento 1.9, mengapa email pesanan dikirim melalui antrian, sedangkan email Faktur dikirim langsung? Saya memeriksa kode untuk Pesanan dan Faktur, dan order-sendNewOrderEmailmenggunakan antrian, sambil invoice->sendEmail()melompati semuanya. Ini membuat email pesanan dikirim setelah email faktur alih-alih sebelumnya jika pesanan disetujui secara otomatis!

Menepuk
sumber

Jawaban:

11

Email pesanan dikirim menggunakan antrian karena berbagai alasan:

  • Hindari perlambatan frontend saat mengirim email
  • Kirim ulang pada kegagalan
  • Hindari kesalahan pada checkout / post-checkout

Solusi 1 (kirim email pesanan segera):

Jika Anda ingin segera mengirim email pesanan, Anda dapat mempertimbangkan untuk mengganti Mage_Sales_Model_Order::queueNewOrderEmail()metode dengan mengganti baris berikut:

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

untuk:

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

Solusi 2 (mengirim faktur menggunakan antrian):

Solusi sebaliknya adalah membiarkan faktur menggunakan antrian:

Anda harus mengganti Mage_Sales_Model_Order_Invoice::sendEmailperubahan:

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

Untuk:

// 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
sumber
Terima kasih banyak atas sarannya! Saya sebenarnya melakukan hal yang sama, tetapi sebaliknya. Saya menambahkan faktur ke antrian. Itu berhasil, tetapi saya bertanya-tanya apakah itu juga benar untuk dilakukan?
Pat
1
Ya tentu. Saya akan menambahkan ke posting saya untuk pengguna lain.
Phoenix128_RiccardoT
1
Tampaknya solusi yang bagus. Akan mencoba
Jai
1
Saya menggunakan solusi 1 dan berhasil dari saya. Terima kasih
Jai