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!

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.