En Magento 1.9, ¿por qué los correos electrónicos de pedidos se envían a través de la cola, mientras que los correos electrónicos de facturas se envían directamente?

magento.stackexchange https://magento.stackexchange.com/questions/103208

Pregunta

En Magento 1.9, ¿por qué los correos electrónicos de pedidos se envían a través de la cola, mientras que los correos electrónicos de facturas se envían directamente?Revisé el código de Pedido y Factura, y el order-sendNewOrderEmail usa la cola, mientras invoice->sendEmail() lo salta por completo.¡Está haciendo que el correo electrónico del pedido se envíe después del correo electrónico de la factura en lugar de antes en caso de que el pedido se apruebe automáticamente!

¿Fue útil?

Solución

Los correos electrónicos de pedidos se envían utilizando la cola por diferentes motivos:

  • Evite la desaceleración de la interfaz al enviar el correo electrónico
  • Reenviar en caso de error
  • Evite errores al finalizar la compra/post-compra

Solución 1 (enviar el correo electrónico del pedido inmediatamente):

Si desea enviar el correo electrónico del pedido inmediatamente, puede considerar anular el Mage_Sales_Model_Order::queueNewOrderEmail() método encadenando las siguientes líneas:

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

a:

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

Solución 2 (enviar facturas usando cola):

La solución opuesta es permitir que las facturas utilicen la cola:

Debes anular Mage_Sales_Model_Order_Invoice::sendEmail cambiando:

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

A:

// 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top