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 Factura se envían directamente?

8

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 Factura se envían directamente? Verifiqué el código de Pedido y Factura, y order-sendNewOrderEmailusa la cola, mientras lo invoice->sendEmail()omite por completo. ¡Hace 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!

Palmadita
fuente

Respuestas:

11

Los pedidos por correo electrónico se envían usando la cola por diferentes razones:

  • Evite la ralentización de la interfaz mientras envía el correo electrónico
  • Reenviar en caso de falla
  • Evite errores al finalizar / finalizar la compra

Solución 1 (envíe el correo electrónico del pedido de inmediato):

Si desea enviar un correo electrónico de pedido de inmediato, puede considerar anular el Mage_Sales_Model_Order::queueNewOrderEmail()método siguiendo 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 la cola):

La solución opuesta es dejar que las facturas usen la cola:

Debe anular el Mage_Sales_Model_Order_Invoice::sendEmailcambio:

// 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();
Phoenix128_RiccardoT
fuente
Muchas gracias por la sugerencia! Realmente hice lo mismo, pero al revés. En su lugar, agregué la factura a la cola. Funcionó, pero me pregunto si también es correcto hacerlo.
Pat
1
Si seguro. Agregaré a mi publicación para otros usuarios.
Phoenix128_RiccardoT
1
Parece una buena solución. Dará una oportunidad
Jai
1
Usé la solución 1 y funcionó conmigo. Gracias
Jai