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.