A confirmação do novo e-mail do pedido não está sendo enviada

100

Atualizei meu site para 1.9.1 e agora meus clientes não estão recebendo o e-mail de confirmação do pedido.

Tentei enviar através do painel de administração, mas nada acontece, também nenhum email de atualização está sendo recebido.

user16826
fonte

Respostas:

96
  1. A partir do Magento 1.9.1, os emails não estão sendo enviados diretamente durante o checkout, mas estão sendo colocados na fila.
  2. A fila está sendo processada por meio do seu cronograma do Magento - verifique se isso foi configurado e está funcionando corretamente.
  3. A extensão AOE_Scheduler pode ajudá-lo a confirmar que o cronjob do Magento foi configurado corretamente e está em execução.
Kristof na Fooman
fonte
6
Verifique se cron.shestá funcionando! Acabamos de passar um dia inteiro depurando isso apenas para descobrir que o cron estava configurado incorretamente.
Forsvunnet
2
como saber se o cron.php está funcionando ou não?
Teja Bhagavan Kollepara
2
Você pode rastrear os logs dentro de / var / log / cron
Beto Castillo
Tenho um problema com o e-mail do pedido no Magento 2. O Cron também está sendo executado, mas o e-mail não está sendo enviado. A maioria das tarefas cron são perdidas na tabela do banco de dados. Como posso resolver isso?
Magecode 11/07
@ Magecode Eu sugiro procurar primeiro perguntas específicas do Magento 2. Se não houver, sinta-se à vontade para adicionar sua própria pergunta com detalhes sobre o que você encontrou / descartou até agora.
Kristof em Fooman
29

Existem 2 métodos para enviar e-mails da nossa loja Magento 1.

  1. Usando cron
  2. Evitando cron

Se você deseja evitar o cron:

Abra seu arquivo order.php em

app / code / core / Mage / Sales / Model / Order.php

Linha # 1356,1450,

mudança

//$mailer->setQueue($emailQueue)->send(); 

para:

$mailer-> send();

Em app/design/frontend/base/default/template/checkout/success.phtml: adicione a seguinte linha Página de sucesso principal para o envio de email direto

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending
Teja Bhagavan Kollepara
fonte
funcionando perfeitamente, é que necessário adicionar código em success.phtml becoz sem que ele parece funcionar bem
Suneth Kalhara
3
Olá Feliz em ouvir isso. Não é necessário adicionar nenhum código, porque o correio transacional chegará ao e-mail imediatamente.
Teja Bhagavan Kollepara
1
Nunca altere (ou substitua, nesse caso) o código do fornecedor - o que acontece quando você atualiza?
Bachi
20

removi o seguinte código da fila de e-mails do Template.php e comecei a receber e-mails quando o pedido é feito pelo cliente ou quando clico em enviar e-mail na guia "Vendas / pedidos" do painel de administração.

O Magento havia configurado o e-mail do pedido para ser enviado pelo trabalho de agendamento em vez do e-mail instantâneo ... provavelmente por motivo de desempenho? (Não sei por que, sou muito novo no magento) ... no entanto, vou colocar esse código de volta o Template.php e encontre uma maneira de definir e executar o trabalho de agendamento a ser executado a cada 5 minutos ...

Template.php está localizado em => /app/code/core/Mage/Core/Model/Email/Template.php

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }
Helmey Hussain
fonte
Este método resolveu o problema, mas a inscrição no boletim não está funcionando. Voltando ao template.php antigo, resolvemos o problema de assinatura do boletim de notícias.
balajisoundar
14

Há duas soluções da seguinte maneira:

Solução 01: Usando cron

Sistema> Configuração> Avançado> Sistema> Cron

As configurações padrão são:

Antes de tudo, o Magento 1.9+ depende completamente de tarefas cron para enviar e-mails transacionais. Se você não tinha tarefas cron configuradas corretamente antes, precisará fazê-lo agora.

Antes de tudo, verifique se você configurou tarefas cron no administrador do Magento em

Sistema> Configuração> Avançado> Sistema> Cron

As configurações padrão são:

Gere agendamentos a cada 15 agendamentos antecipados para 20 ausentes, se não executados em 15 dias.

Existem pessoas sugerindo que essas configurações devem ser alteradas, mas como elas parecem não concordar com a melhor combinação, prefiro deixá-las como estão.

Você precisará acessar o painel de controle da hospedagem e configurar os trabalhos cron. No cPanel, está em Avançado> Trabalhos Cron. Configure-os para serem executados a cada cinco minutos e use este comando:

php -f /home/username/public_html/cron.php

Verifique se o caminho acima está correto e se o arquivo cron.php está realmente lá na raiz da sua instalação do Magento (se você acabou de atualizar, deve estar). Mude o nome de usuário para a conta correta.

Agora, inicialmente cometi o erro de seguir o conselho dos desenvolvedores do xtento.com que dizem usar uma sequência de comandos wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. php

Solução 02: Evite cron

Os emails transacionais serão enviados instantaneamente.

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending
matinict
fonte
10

Com o Magento 1.9, todos os emails serão colocados na fila e posteriormente enviados pelo Cron.

Nota de versão do Magento 1.9

Se você deseja que seus e-mails de transação sejam enviados pelo Cron, defina o cron em Sistema > Configuração > Sistema, na guia Cron OU crie o cron no Cpanel, direcione-o para o seu cron.sh ou cron.php localizado no diretório raiz do Magento.

Ajay Bisht
fonte
10

Basta instalar a extensão "SMTP Pro Email": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

Preencha com seus detalhes SMTP personalizados e pronto.


Levei dois dias inteiros para descobrir. Não são necessários trabalhos Cron, embora se você deseja que os trabalhos cron funcionem e não faça o acima, você pode fazer o seguinte:

Edite cron.php no diretório raiz do Magento

Depois de:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

adicione esta linha de código:

$isShellDisabled = true;

Configurar Trabalho Cron

No painel C, abra a seção Tarefas Cron
Crie uma tarefa cron que execute o seguinte comando a cada 15 minutos:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Jagoman
fonte
Importante notar que, com o SMTP Pro, essa configuração deve ser feita para o Magento 1.9.1 e superior: Sistema -> Configuração -> SMTP Pro -> Configuração da fila -> Uso da fila alterar de Padrão para Nunca.
Shrenik
8

No Magento 1.9.1.0, o Magento adicionou um novo recurso: Eles armazenam o email do pedido na core_email_queuetabela para enviar o email dos pedidos. Temos que definir o cron.phpservidor

O cron.phparquivo define a core_email_queue_send_alltabela de agendamento no cron. Quando o crone executa o método "send" chamado from Mage_Core_Model_Email_Queue. Eles enviam o correio para o cliente.

Portanto, a correção acima está funcionando sem nenhuma alteração no arquivo principal.

Ankita Pancholi
fonte
6

Basta fazer a configuração do cron no seu servidor, conforme o comando abaixo, e você começará a receber e-mails de vendas.

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

Use configurações comuns como "*****"

Precisa substituir YOUR_USER_NAME e Path_to_cron.php pelos seus.

Akhil Gupta
fonte
6

Usando o n98-magerun, executei o seguinte:

n98-magerun sys:cron:run core_email_queue_send_all

Ou cronometrar, se você não quiser executá-lo o tempo todo:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

Isso envia todos os emails na fila a cada 10 segundos.

Timon de Groot
fonte
6

para o servidor godaddy, use o seguinte código ao configurar o cronjob:

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

Isso será executado a cada minuto.insira a descrição da imagem aqui

alok
fonte
5

se SOMENTE o email do pedido não estiver sendo enviado, é porque o Magento enfileira apenas os emails do pedido e os salva para enviá-los em lotes. Se você não tiver a configuração do Heartbeat Cron, eles nunca sairão da fila do Magento.

Você está vendo outros e-mails do Magento saírem porque são enviados diretamente do Magento para o seu daemon de mala direta. As filas do Magento (como o e-mail do pedido) nem são entregues ao daemon do mailer até que o Hearbeat Cron seja executado.

Para forçá-los a sair ... navegue até http://yourmagentodomain.com/cron.php e continue atualizando a página a cada cinco minutos e você verá os e-mails de pedidos em fila começarem a sair. O Heartbeat Cron deve fazer isso por você. Ah, e quando você navega para esse arquivo cron.php, a página deve estar em branco, portanto não se assuste ... ela funcionará.

Aidan
fonte
5

Eu tive o mesmo problema e descobri que estava relacionado a uma extensão. Os anexos de email da Fooman agora foram atualizados para a v0.10.4. As versões abaixo da v0.10.3 não funcionam com o Magento 1.9.

Loeffel
fonte
5

Eu segui a base de conhecimento para fazê-lo funcionar: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

Na parte "Localizando e-mails transacionais", depois de seguir as instruções anteriores, copiar para / en_UK finalmente levou os e-mails (incluindo os que não foram enviados anteriormente), também tivemos um problema com a página de confirmação do pedido não sendo exibida para os clientes em conclusão. Isso foi corrigido também.

Por exemplo, para a localidade en_GB, você precisará copiar os arquivos localizados em:

app / locale / pt_BR / template / email

para o local:

app / locale / pt_BR / modelo / email

Uncle_Paul
fonte
2
Bem-vindo ao Magento SE! Você pode elaborar ainda mais sua resposta (oferecendo exemplos de código etc.)?
benmarks
3

Se o seu sistema de email (smtp, zend_mail) funciona bem; desabilitar o mailQueue pode resolver seu problema.

/app/code/core/Mage/Core/Model/Email/Template.php

Alterar linha 407

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

para

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
user20329
fonte
5
isso quebra a funcionalidade do formulário de contato.
Zoya
9
Não edite o núcleo
Kevin Schroeder
1
Não forneça soluções que exijam alterações no CORE. As classes principais nunca devem ser alteradas.
Ahsan Horani 14/09
2

Se você possui a extensão SMTPpro, tente desabilitá-la. E verifique novamente. Todos os emails funcionam bem e você só precisa configurar corretamente.

Desenvolvedor Webile
fonte
0

A melhor maneira é fazer uma cópia do seu aplicativo / código / core / Mage / Core / Model / Email / Template / Mailer.php

Para a sua pasta local app / code / local / Mage / Core / Model / Email / Template / Mailer.php

Então comente esta linha na linha 76

->setQueue($this->getQueue())

Então você está pronto. Não há necessidade de modificar o modelo success.phtml. : D

jehzlau
fonte