2 votes

Django-Mailer n'arrête pas d'envoyer des e-mails

J'ai configuré Django Mailer et ajouté les deux commandes à la crontab :

* * * * *      root     python /srv/www/cpm/manage.py send_mail >> /srv/www/cpm/cron_mail.log
0,20,40 * * * * root     python /srv/www/cpm//manage.py retry_deferred >> /srv/www/cpm/cron_mail_deferred.log

CPM est le répertoire qui contient mon projet Django.

Après le redémarrage cron J'ai lancé mon projet Django et j'ai cliqué sur un lien qui place environ 600 courriels dans la file d'attente de Django Mailer. Le site cron La commande a récupéré les messages en file d'attente et a commencé à les envoyer consciencieusement.

Chaque courriel m'est adressé pour l'instant à des fins de test. Comme prévu, les courriels ont commencé à affluer.

Cependant, au bout d'une trentaine d'emails, j'ai voulu arrêter l'envoi des emails car je voulais faire quelques changements, et recommencer le processus (je suis en train de tester l'application en ce moment). Je suis allé dans MySQL et a supprimé tous les enregistrements dans le django_mailer_queuedmessages table, en pensant que cela empêchera tout autre courriel.

Les e-mails ont continué à arriver.

J'ai ensuite supprimé tous les enregistrements dans django_mailer_messages table, espérant que arrêterait les emails.

Les emails n'arrêtaient pas d'arriver !

J'ai ensuite supprimé tous les enregistrements dans chaque table qui commence par django_mailer... et a également commenté le crontab les lignes qui ont django-mailer dans ces derniers (les deux en haut) et redémarré cron .

Les emails continuent d'arriver !

C'est quoi ce bordel ? Comment se fait-il qu'ils soient encore envoyés ? Il est intéressant de noter que chaque e-mail indique qu'il a été envoyé au moment où j'ai cliqué. Send All Emails (il y a environ une heure maintenant) et non lorsqu'ils sont arrivés dans ma boîte de réception. Je ne sais donc pas vraiment ce qui se passe ni comment mettre fin à cet assaut d'e-mails !

Hé, regarde, un autre courriel vient d'arriver ...

EDIT 1

J'achemine tout mon courrier électronique via mon compte de messagerie Google Apps Business. Je me connecte simplement à Gmail dans mon code Python de la manière standard...

EDIT 2

Ça s'est arrêté... enfin. J'ai fini par envoyer un kill aux deux processus qui avaient lancé le cron les commandes. La seule chose à laquelle je peux penser est que le django_mailer a stocké tous les emails en mémoire et les a envoyés à partir de là. J'avais pensé que django-mailer prendrait un email dans la file d'attente (sa propre commande queue ), l'envoyer, puis recevoir le message suivant. Cela ne semblait pas être le cas puisque je pouvais supprimer toute la file d'attente et les messages étaient toujours envoyés. Il est clair qu'ils existaient ailleurs que dans la file d'attente stockée dans la base de données MySQL.

C'est un peu confus...

2voto

voretaq7 Points 78924

Solution en trois étapes :

  1. Supprimez les entrées de votre crontab
    Je ne sais pas s'il envoie toujours un email toutes les 60 secondes ou non, mais supprimez ou commentez ces lignes pour être sûr que les nouveaux emails ne sont pas injectés.

  2. Videz votre file d'attente de courrier
    de la manière appropriée pour votre logiciel MTA (puisque vous ne précisez pas votre MTA, je ne peux pas être plus précis). Cela devrait permettre de se débarrasser de tout le courrier en attente d'être envoyé (vous pouvez avoir un arriéré important).

  3. Test manuel y observez le comportement de votre système Cela vous permettra de déterminer ce qui s'est passé et comment éviter que cela ne se reproduise à l'avenir.

1voto

Jeff Sheffield Points 277

Assurez-vous que "django" lui-même n'envoie pas les messages électroniques. Désactivez votre directive ADMIN.

ancien settings.py

ADMINS = (('Bugs Bunny', 'bugs.bunny@acme.com'),)
MANAGERS = ADMINS

nouveau settings.py

ADMINS = ()
MANAGERS = ADMINS

Cela évitera à django d'envoyer lui-même des courriels lorsque quelque chose est mal configuré et que DEBUG = False

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X