In Magento 1.9, perché le email degli ordini vengono inviate tramite la coda, mentre le email delle fatture vengono inviate direttamente?


8

In Magento 1.9, perché le email degli ordini vengono inviate tramite la coda, mentre le email delle fatture vengono inviate direttamente? Ho controllato il codice per Order and Invoice, e order-sendNewOrderEmailusa la coda, mentre lo invoice->sendEmail()salta completamente. Sta facendo inviare l'e-mail dell'ordine dopo l'e-mail della fattura anziché prima nel caso in cui l'ordine venga approvato automaticamente!

Risposte:


11

Le e-mail degli ordini vengono inviate utilizzando la coda per diversi motivi:

  • Evita il rallentamento del frontend durante l'invio dell'email
  • Rinvia in caso di errore
  • Evita errori al checkout / post-checkout

Soluzione 1 (inviare immediatamente l'e-mail dell'ordine):

Se desideri inviare immediatamente e-mail di ordine, puoi considerare Mage_Sales_Model_Order::queueNewOrderEmail()di ignorare il metodo eseguendo il chaing delle seguenti righe:

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

per:

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

Soluzione 2 (inviare fatture utilizzando la coda):

La soluzione opposta è consentire alle fatture di utilizzare la coda:

È necessario ignorare la Mage_Sales_Model_Order_Invoice::sendEmailmodifica:

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

Per:

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

Grazie mille per il suggerimento! In realtà ho fatto lo stesso, ma viceversa. Ho invece aggiunto la fattura alla coda. Ha funzionato, ma mi chiedo se sia anche giusto fare?
Pat

1
Si certo. Aggiungerò al mio post per altri utenti.
Phoenix128_RiccardoT

1
Sembra una buona soluzione. Proverò
Jai

1
Ho usato la soluzione 1 e ha funzionato da me. Grazie
Jai
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.