No Magento 1.9, por que os emails de pedidos são enviados através da fila, enquanto os emails de Fatura são enviados diretamente?

8

No Magento 1.9, por que os emails de pedidos são enviados através da fila, enquanto os emails de Fatura são enviados diretamente? Eu verifiquei o código para Pedido e Fatura, e ele order-sendNewOrderEmailusa a fila, enquanto o invoice->sendEmail()ignora completamente. Ele está fazendo com que o email do pedido seja enviado após o email da fatura em vez de antes, caso o pedido seja aprovado automaticamente!

Pat
fonte

Respostas:

11

O email de pedidos é enviado usando a fila por diferentes motivos:

  • Evite a desaceleração do front-end ao enviar o email
  • Reenviar em caso de falha
  • Evite erros no checkout / pós-checkout

Solução 1 (envie o e-mail do pedido imediatamente):

Se você deseja enviar um e-mail para o pedido imediatamente, considere substituir o Mage_Sales_Model_Order::queueNewOrderEmail()método seguindo as seguintes linhas:

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

para:

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

Solução 2 (enviar faturas usando a fila):

A solução oposta é permitir que as faturas usem a fila:

Você deve substituir a Mage_Sales_Model_Order_Invoice::sendEmailalteração:

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

Para:

// 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
fonte
Muito obrigado pela sugestão! Na verdade, fiz o mesmo, mas o contrário. Eu adicionei a fatura à fila. Funcionou, mas eu me pergunto se isso também é certo.
Pat
11
Sim claro. Vou adicionar à minha postagem para outros usuários.
Phoenix128_RiccardoT
11
Parece uma boa solução. Vai dar uma chance
Jai
11
Usei a solução 1 e funcionou para mim. Graças
Jai