Novo e-mail de pedido sendo enviado duas vezes

25

Estou usando o Magento 1.9.1 e, ao criar um novo pedido, seja do front-end ou do administrador, o sistema está enviando 2 e-mails - ambos iguais!

Eu olhei na net e encontrei um bug que era antigo e não consegui encontrar o código mencionado para comentar, também parecia que isso estava relacionado aos pedidos do Paypal e esse não é o caso.

Desativei TODAS as extensões e tentei e ainda tinha o mesmo problema, por isso estou confiante de que não é um problema de extensão.

Christopher Thrower
fonte
11
Você resolveu esse problema? De tempos em tempos, recebia a mesma estranha confirmação de pedidos duplos e também usava cco para e-mails de confirmação. Não sei se um cliente também recebe dois e-mails, mas não espero.
Fox
Para quem o email é endereçado? Você está verificando com um dos seus e-mails de administrador?
SR_Magento 22/10/2015
Estou recebendo o mesmo problema (o usuário está recebendo dois e-mails após fazer um novo pedido). Não tenho certeza para a resposta abaixo e minhas tabelas "core_email_queue" e "core_email_queue_recipients" estão vazias, portanto, acho que esse não deve ser o meu caso. Por favor me ajude nisso.
Abi Sharma
Abi Sharma, ainda tenho o mesmo problema, recebo e-mails duplicados ... você resolveu o problema? por favor me avise
Lior Loria

Respostas:

48

Esse problema deve estar relacionado ao novo sistema Magento Email Queue, que deixa registros órfãos na tabela Destinatários. Se este for o seu problema, eu lhe envio uma correção.

O novo sistema Magento Email Queue gerencia essas duas tabelas: core_email_queue e core_email_queue_recipients . O primeiro lida com as Mensagens de e-mail e o último, os Destinatários dessas mensagens.

A tabela core_email_queue é limpa à medida que os emails na Fila de email do Magento são enviados. Essa limpeza é realizada por um trabalho da guia cron chamado core_email_queue_clean_up , definido dentro do arquivo de configuração app / code / core / Mage / Core / etc / config.xm l. O código que executa a limpeza é definido na função removeSentMessages na classe Mage_Core_Model_Resource_Email_Queue :

/**
 * Remove already sent messages
 *
 * @return Mage_Core_Model_Resource_Email_Queue
 */
public function removeSentMessages()
{
    $this->_getWriteAdapter()->delete($this->getMainTable(), 'processed_at IS NOT NULL');
    return $this;
}

O código acima é executado uma vez por dia pela tarefa cron.

Mas acontece que a tabela core_email_queue_recipients (aquela que contém destinatários de email e que está vinculada à tabela core_email_queue pelo campo message_id ) não é limpa junto com a tabela core_email_queue (aquela que contém as mensagens de email), deixando registros órfãos dentro tabela Destinatários quando a tabela Mensagem for limpa.

O problema descrito aqui surge quando a tabela core_email_queue (Messages) é redefinida e o campo autoincrement message_id nesta tabela é reiniciado para 1.

Como a tabela core_email_queue_recipients (Destinatários) não foi limpa adequadamente, quando novos emails são adicionados à Fila de E-mail Magento, novos registros são criados na tabela core_email_queue (com message_id iniciando novamente em 1) e, ao mesmo tempo, novos registros são criados na tabela core_email_queue_recipients com esses mesmos IDs (começando novamente em 1).

O problema é que esses IDs podem já existir na tabela Destinatários como registros órfãos (devido a mensagens de email anteriores). Esses novos IDs de mensagens são repetidos dentro da tabela core_email_queue_recipients . No final, diferentes mensagens de email são vinculadas aos seus destinatários correspondentes pelo message_id , mas também são incorretamente vinculadas aos destinatários anteriores aos quais foi atribuído o mesmo message_id dos emails anteriores.

Assim, quando os destinatários são procurados para enviar uma determinada mensagem, além do destinatário apropriado, outros destinatários errados podem surgir.

Felizmente, a correção para esse problema é fácil de executar.

Tudo o que é necessário é limpar todos os IDs de mensagens repetidas na tabela core_email_queue_recipients e garantir que, quando uma mensagem for excluída na tabela core_email_queue , ao mesmo tempo, seus destinatários correspondentes sejam excluídos na tabela core_email_queue_recipients .

A melhor maneira de conseguir isso é criar uma chave estrangeira que vincule esses registros e os exclua em cascata (mas é necessário fazer uma limpeza antes de fazer isso).

Este é o procedimento para corrigir o problema:

1) Execute as duas consultas SQL a seguir para limpar a tabela core_email_queue_recipients dos registros órfãos e dos IDs de mensagens repetidas:

DELETE FROM core_email_queue_recipients WHERE message_id NOT IN (SELECT message_id FROM core_email_queue);
DELETE FROM core_email_queue_recipients WHERE recipient_id < (SELECT recipient_id FROM (SELECT recipient_id FROM core_email_queue_recipients ORDER BY message_id ASC, recipient_id DESC LIMIT 1) AS r);

A primeira consulta exclui registros órfãos e a segunda exclui registros antigos que não são mais válidos.

2) Crie uma chave estrangeira na tabela core_email_queue_recipients para excluir os registros de destinatários em cascata. A consulta SQL para criar essa chave estrangeira é:

ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;

Ao usar essa nova chave estrangeira, nenhum registro órfão será deixado na tabela core_email_queue_recipients ao limpar a tabela core_email_queue , e nenhuma mensagem duplicada para destinatários errados será enviada no futuro.

César Revert-Gomar
fonte
2
Ótima pesquisa e correção de trabalho fornecida César. Essa é uma grande supervisão da equipe Magento, pois isso potencialmente enviará o nome e o endereço do cliente para outros clientes. Alguém sabe se isso foi resolvido em um (qual) patch / release desde que esse problema foi descoberto?
Zigojacko 31/03
Ainda enfrentando o problema do mesmo e-mail de pedido enviado várias vezes para o mesmo endereço de e-mail após a implementação da solução acima.
precisa saber é o seguinte
Estou verificando minhas duas tabelas já estão vazias, então eu tenho que executar essas duas etapas (consultas) ??
Abi Sharma
De qualquer maneira como eu executei essas consultas, mas não ajuda .. Ainda recebendo o e-mail do pedido duas vezes
Abi Sharma
5

Eu tive o mesmo problema. Para cada pedido, eu recebia o email do cliente e um email separado no endereço da minha loja - ambos na caixa de correio da minha conta de email da loja.

No Magento Admin: Sistema> Configuração> E-mails de Vendas> Pedido

Eu configurei o email "Método de cópia de email para pedido de envio" de "Email separado" para "Cco", e ele funciona agora. Agora estou recebendo apenas um e-mail por pedido.

roubar
fonte
3
Eu já estou usando o método Cco, então isso não é o problema para mim, infelizmente :(
Christopher Thrower
Também estou usando essa configuração, mas o usuário está recebendo 2 e-mails após fazer um novo pedido.
Abi Sharma
1

Eu tive o mesmo problema. No meu caso, o problema foi causado pelo código fonte do script cron.sh.

Meu provedor de hospedagem usou suas próprias versões dos scripts cron.sh e cron.php para o Magento cron-job.

Quando mudei do script cron.sh para o script cron.php para iniciar o Magento-Cron-Job, o novo e-mail de ordem foi enviado apenas uma vez, meu problema foi resolvido.

Talvez seu problema tenha algo a ver com o código do script cron.sh ou cron.php .

Dupla verificação
fonte
Oi, Já estamos usando o script cron.php para o trabalho Magento cron, mas estou recebendo e-mails duas vezes.
Abi Sharma