Magento 1.9.1 Email Queue ne fonctionne pas / buggy - comment dépanner et qu'est-ce qui est considéré comme le meilleur correctif?

35

Tout d’abord, c’est une autre question / un autre sujet sur la file d’email 1.9.1. Mais il ne s'agit pas de problèmes cron (comme celui-ci ou celui-ci ) ou de la nouvelle fonctionnalité de file d'attente qui n'est pas utilisée (comme ceci ).

Dans notre cas, le problème était que la file d'attente ( core_email_queueet core_email_queue_recipients) ne recevait tout simplement pas d'e-mails concernant les nouvelles commandes ou les mises à jour des commandes. Par conséquent, aucun autre e-mail n'a été envoyé pour les commandes. Cron fonctionne parfaitement et l'ajout manuel à la file d'attente fonctionne et ils sont envoyés.

La chose étrange est que, dans notre environnement de test, tout a fonctionné. Même lorsque nous sommes entrés en ligne aujourd’hui dans les premières minutes, tous les e-mails ont été traités, mais après quelques minutes (sans aucune modification supplémentaire sur le système en direct), aucun nouvel e-mail n’a été ajouté à la file. Il semble que cela se soit produit (mais je ne le sache pas avec certitude) lorsque le premier client a utilisé PayPal Express, ce que nous n'avions pas testé auparavant: - / Nous utilisions en effet des substitutions personnalisées dans la logique de PayPal Express avec l'ancienne sendNewOrderEmail()fonction. Mais nous ne pouvions pas faire fonctionner les emails même après avoir corrigé ceux-ci queueNewOrderEmail().
La première question serait donc: est-il possible que l’ancienne fonction déclenche une incohérence qui «casse» la file d'attente de messagerie? Ou est-ce juste une grosse coïncidence et une explication totalement différente?

Comme nous ne pouvions pas trouver le problème mais que, bien sûr, nous avions besoin que les courriels fonctionnent à nouveau dès que possible, nous avons opté pour un autre remplacement prioritaire. Dans Mage_Core_Model_Email_Template_Mailer(bien sûr, dans une copie local), nous avons commenté la ligne 76: ->setQueue($this->getQueue())
cela semble ignorer la file d'attente et tous les e-mails sont à nouveau envoyés à l'ancienne.

Cependant, comme nous aimerions limiter au minimum le nombre de modifications de base, nous ne pouvons pas dire pour le moment si nous ferons face à d’autres effets secondaires, conseils ou solutions de personnes connaissant mieux le code magento et les la file d'attente d'email serait appréciée.

Mise à jour pour la version 1.9.2: lors de la mise à niveau vers la version 1.9.2, nous avons à nouveau examiné de plus près la file d'attente de messagerie et n'avons pas pu reproduire le problème. Mais comme nous ne savons toujours pas quel était le problème avec la version 1.9.1 et que la résolution du problème Mage_Core_Model_Email_Template_Mailer::send()fonctionne toujours de la manière décrite ici, nous n’utilisons toujours pas la file d’attente. De cette façon, nous espérons ne plus avoir le même problème après un certain temps de production.

tl; dr: La file d’e-mails ne fonctionne pas dans la version 1.9.1, la ligne 76 est mise en commentaire et Mage_Core_Model_Email_Template_Mailercontourne la file. Comment cela peut-il être mieux résolu?

Jey DWork
la source
1
Combien de transactions tests avez-vous effectuées par rapport au nombre de transactions en direct effectuées au cours des premières minutes? S'agissait-il d'une mise à niveau d'une version antérieure et de certains fichiers sont manquants ou ont des autorisations inappropriées? Qu'en est-il exception.logou éventuellement system.log, y a-t-il des indices?
pspahn
C'était une mise à jour depuis la 1.9.0.1 et cela n’a pas été fait via Connect-Manager mais à partir de la base de code Magento, donc je doute que nous ayons des fichiers manquants (nous avons aussi diffé, coreetc. pour nous assurer que tout ce qui n’est pas personnalisé ou une extension est en place et non modifié et c'est). Les autorisations correspondent à l'ancienne configuration et les journaux / rapports sont propres.
Jey DWork
Cron est-il configuré de la même manière?
pspahn
Lorsque nous avons vu le changement de courrier électronique dans le journal des modifications, nous avons modifié cron pour qu'il s'exécute toutes les 5 minutes avant (car nous comprenons le changement de manière à ce que, dans le pire des cas, les clients doivent attendre jusqu'à 5 minutes pour recevoir leur courrier de confirmation). En dehors de cela, il n'y a pas de changement et, comme indiqué précédemment, nous voyons dans d'autres emplois cron s'exécute sans problème. // edit: Je devrais probablement ajouter que nous utilisons (et toujours utilisé) Aoe_Scheduler où nous configurons le système core_email_queue_send_allpour qu'il s'exécute également toutes les minutes et à partir duquel nous voyons qu'il est réellement exécuté.
Jey DWork
T4 2015 et j'ai le même problème, je peux confirmer que les tables de la file d'attente sont des entrées totalement manquantes pour certaines commandes, un signe clair pour confirmer les rapports qu'aucun courrier électronique n'a été reçu. Malheureusement, la journalisation a été désactivée dans mon cas, donc je n'ai pas encore d'erreur à rechercher. Avez-vous appris quelque chose de nouveau depuis votre première publication qu'il pourrait être utile d'ajouter?
Rick Buczynski

Réponses:

8

Mon hypothèse est que la configuration de cron.php pour s'exécuter chaque minute a provoqué la superposition de nombreux éléments, c'est-à-dire qu'ils ne se terminent pas avant l'exécution de la prochaine tâche planifiée de même nature ou similaire. Depuis les deux cron.php ne serait pas au courant de chaque état. Le même enregistrement peut être tenté deux fois, ce qui provoque une exception étrange lors de l'enlèvement des envois de courrier électronique dans la file d'attente.

Cela dit, il y a Mage::Logdes exceptions dans le courrier en file d'attente. S'assurer que la journalisation est activée serait donc la meilleure étape pour aider à déterminer s'il existe des exceptions. Il peut être judicieux de lancer également l' php -f cron.phpinterface CLI pour voir si elle génère également des exceptions, car vous ne le verrez peut-être pas dans les coulisses.

Je commencerais également par un simple mail()test PHP pour vous assurer que vous ne rencontrez aucune stratégie anti-spam. Juste pour être sûr que ce n'est pas quelque chose de plus bas dans la pile qui cause le problème.

Juste quelques spéculations, espérons que cela aide!

* MODIFIER *

Utilisez à la cron.shplace de cron.phpce qui sera fait grep pspour voir si un processus précédent est déjà en cours d'exécution.

B00MER
la source
Merci pour la contribution, mais ces problèmes peuvent certainement être exclus. Le fait que le travail cron du système soit exécuté chaque minute ne signifie pas que tous les travaux cron de Magento le sont. Dans notre cas, seul le courrier électronique a été configuré pour s'exécuter également toutes les minutes. De Magentos cron log, nous pouvons constater que tous les travaux cron se terminent avec succès, même dans des minutes "stressantes" (c'est-à-dire toutes les heures environ lorsque plusieurs travaux sont exécutés en même temps, et pas uniquement par courrier électronique. ) La journalisation est également activée et les exceptions ne sont pas générées. L'utilisation de filtres anti-spam peut être exclue. Après la solution de contournement, tous les e-mails ont été envoyés à tous les clients.
Jey DWork
Vous voudrez peut-être essayer d'activer le mode développeur pour voir s'il permet de générer des exceptions non consignées. Soyez prudent si son fonctionnement en production cependant. Également des journaux de serveur Web en corrélation?
B00MER le
2
@JeyDWork avez-vous implémenté Aoe_Scheduler ? Cela peut donner une bonne visibilité.
Benmarks
2
J'aimerais voir une mise à jour. La file d'attente de courrier électronique s'avère être un défi pour beaucoup.
benmarks
1
Pour moi, j’utilisais la norme paypal qui nécessitait le retour des données IPN (Notification instantanée de paiement) de paypal juste pour confirmer le paiement et changer le statut de la commande en traitement / terminé et enfin envoyer un e-mail .. mais je n’ai pas configuré le domaine réel. Pour mon serveur et mes hôtes virtuels, c’est la raison pour laquelle paypal n’a pas pu publier de données IPN sur Magento. Vous pouvez consulter l'historique IPN dans le profil du compte d'entreprise paypal. Paypal fait montre les données qui était censé envoyer et le statut était « Retrying » ..
Zaw
0

Vérifiez si core_email_queue et core_email_queue_recipients a AUTO_INCREMENT. Si ces tables n'ont pas activé l'IA, les nouvelles entrées ne seront pas prises en compte.

Ali Exalter
la source