Nouvel e-mail de commande envoyé deux fois


25

J'utilise Magento 1.9.1 et lors de la création d'une nouvelle commande, que ce soit depuis le frontend ou l'administrateur, le système envoie 2 e-mails - les mêmes!

J'ai regardé sur le net et trouvé un bug qui était ancien et je n'ai pas pu trouver le code mentionné pour commenter, il semblait aussi que cela concernait les commandes Paypal et ce n'est pas le cas.

J'ai désactivé TOUTES les extensions et essayé et toujours eu le même problème, donc je suis convaincu que ce n'est pas un problème d'extension.


1
Avez-vous résolu ce problème? J'ai de temps en temps la même étrange confirmation de commande double et j'utilise aussi bcc pour les courriers de confirmation. Je ne sais pas si un client reçoit également deux mails, mais je ne l'espère pas.
Fox

A qui s'adresse l'e-mail? Vérifiez-vous avec l'un de vos e-mails d'administrateur?
SR_Magento

Je reçois le même problème (l'utilisateur reçoit deux e-mails après avoir passé une nouvelle commande). Je ne suis pas sûr de la réponse ci-dessous et mes deux tables "core_email_queue" et "core_email_queue_recipients" sont vides, donc je pense que cela ne devrait pas être mon cas. Veuillez m'aider à ce sujet.
Abi Sharma

Abi Sharma, j'ai toujours le même problème, je reçois des e-mails en double ... avez-vous résolu le problème? s'il vous plaît laissez-moi savoir
Lior Loria

Réponses:


48

Ce problème doit être lié au nouveau système Magento Email Queue, qui laisse des enregistrements orphelins sur la table Destinataires. Si c'est votre problème, je vous envoie un correctif.

Le nouveau système Magento Email Queue gère ces deux tables: core_email_queue et core_email_queue_recipients . Le premier gère les messages électroniques et le dernier, les destinataires de ces messages.

La table core_email_queue est nettoyée lors de l'envoi d'e-mails sur la file d'attente d'e-mails de Magento. Ce nettoyage est effectué par un travail de l'onglet cron appelé core_email_queue_clean_up , qui est défini dans le fichier de configuration app / code / core / Mage / Core / etc / config.xm l. Le code qui effectue le nettoyage est défini sur la fonction removeSentMessages dans la 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;
}

Le code ci-dessus est exécuté une fois par jour par la tâche cron.

Mais il arrive que la table core_email_queue_recipients (celle qui contient les destinataires des e-mails, et qui est liée à la table core_email_queue par le champ message_id ), ne soit pas nettoyée avec la table core_email_queue (celle qui contient les messages électroniques), laissant des enregistrements orphelins à l'intérieur cette table des destinataires lorsque la table des messages est nettoyée.

Le problème décrit ici se pose lorsque la table core_email_queue (Messages) est réinitialisée et que le champ autoincrement message_id de cette table est réinitialisé à 1.

Étant donné que la table core_email_queue_recipients (Recipients) n'a pas été nettoyée en conséquence, lorsque de nouveaux e-mails sont ajoutés à la file d'attente de messagerie Magento, de nouveaux enregistrements sont créés sur la table core_email_queue (avec message_id recommençant à partir de 1), et en même temps de nouveaux enregistrements sont créés sur la table core_email_queue_recipients avec ces mêmes identifiants (en recommençant à partir de 1).

Le problème est que ces identifiants peuvent déjà exister sur la table Destinataires en tant qu'enregistrements orphelins (en raison des messages électroniques précédents). Ces nouveaux identifiants de messages sont ensuite répétés dans la table core_email_queue_recipients . En fin de compte, différents messages électroniques sont liés à leurs destinataires correspondants par le message_id , mais ils sont également liés à tort aux destinataires précédents auxquels le même message_id a été attribué à partir des courriers électroniques précédents.

Ainsi, lorsque des destinataires sont recherchés pour envoyer un message donné, outre le destinataire approprié, d'autres destinataires incorrects peuvent apparaître.

Heureusement, le correctif de ce problème est facile à effectuer.

Tout ce qui est nécessaire est de nettoyer tous les ID de messages répétés sur la table core_email_queue_recipients et de s'assurer que lorsqu'un message est supprimé sur la table core_email_queue , en même temps ses destinataires correspondants sont supprimés sur la table core_email_queue_recipients .

La meilleure façon d'y parvenir est de créer une clé étrangère qui relie ces enregistrements et les supprime en cascade (mais vous devez effectuer un nettoyage avant de pouvoir le faire).

Voici la procédure pour résoudre le problème:

1) Exécutez les deux requêtes SQL suivantes pour nettoyer la table core_email_queue_recipients des enregistrements orphelins et des ID de messages répétés:

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

La première requête supprime les enregistrements orphelins et la seconde supprime les anciens enregistrements qui ne sont plus valides.

2) Créez une clé étrangère sur la table core_email_queue_recipients pour supprimer les enregistrements de destinataires en cascade. La requête SQL pour créer cette clé étrangère est:

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

En utilisant cette nouvelle clé étrangère, aucun enregistrement orphelin ne sera laissé sur la table core_email_queue_recipients lors du nettoyage de la table core_email_queue , et aucun message dupliqué à des destinataires incorrects ne sera envoyé à l'avenir.


2
Grande recherche et fourni correctif de travail César. Il s'agit d'un oubli majeur de l'équipe Magento étant donné que cela enverra potentiellement le nom et l'adresse du client à d'autres clients. Quelqu'un sait-il si cela a été résolu dans un (quel) correctif / version depuis que ce problème a été découvert?
zigojacko

Toujours confronté au problème du même e-mail de commande envoyé plusieurs fois à la même adresse e-mail après la mise en œuvre de la solution ci-dessus.Pouvez-vous s'il vous plaît aider ??
aton1004

Je vérifie que mes deux tables sont déjà vides, alors dois-je exécuter ces deux étapes (requêtes) ???
Abi Sharma

N'importe comment j'ai effectué ces requêtes mais aucune aide .. Toujours recevoir deux fois ma commande
Abi Sharma

5

J'ai eu le même problème. Pour chaque commande, je recevrais l'e-mail du client et un e-mail distinct à l'adresse de mon magasin, tous deux dans la boîte aux lettres de mon compte e-mail de magasin.

Dans Magento Admin: Système> Configuration> E-mails de vente> Commande

J'ai défini l'e-mail "Méthode de copie de l'e-mail de commande" de "E-mail séparé" sur "Cci", et cela fonctionne maintenant. Je ne reçois qu'un seul e-mail par commande maintenant.


3
J'utilise déjà la méthode Cci donc ce n'est pas le problème pour moi malheureusement :(
Christopher Thrower

J'utilise également ce paramètre déjà, mais l'utilisateur reçoit 2 e-mails après avoir passé une nouvelle commande.
Abi Sharma

1

J'ai eu le même problème. Dans mon cas, le problème est dû au code source du script cron.sh.

Mon hébergeur a utilisé ses propres versions des scripts cron.sh et cron.php pour le cron-job Magento.

Lorsque je suis passé du script cron.sh au script cron.php pour démarrer Magento-Cron-Job, le nouvel e-mail de commande n'a été envoyé qu'une seule fois, mon problème a été résolu.

Votre problème a peut-être quelque chose à voir avec le code du script cron.sh ou cron.php .


Salut, Nous utilisons déjà le script cron.php pour le travail cron de Magento, mais je reçois deux fois des e-mails.
Abi Sharma
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.