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.


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.


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.


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 .


Oi, Já estamos usando o script cron.php para o trabalho Magento cron, mas estou recebendo e-mails duas vezes.
— Abi Sharma
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.