Django-Mailer 不会停止发送电子邮件

Django-Mailer 不会停止发送电子邮件

我设置了 Django Mailer 并将两个命令添加到 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是保存我的 Django 项目的目录。

重启后,cron我启动了 Django 项目,点击一个链接,将大约 600 封电子邮件放入 Django Mailer 队列。该cron命令选取了排队的消息并开始发送电子邮件。

目前,每封电子邮件都是发给我的,用于测试目的。正如预期的那样,电子邮件开始大量涌入。

但是,大约 30 封电子邮件之后,我想停止发送电子邮件,因为我想做一些更改,然后重新开始该过程(我现在正在测试该应用程序)。我进入MySQL并删除了表中的所有记录django_mailer_queuedmessages,以为这样可以停止任何进一步的电子邮件。

电子邮件不断涌来。

然后我删除了表中的所有记录django_mailer_messages,希望将停止发送电子邮件。

电子邮件不断涌来!

然后,我删除了每个以 开头的表中的所有记录django_mailer...,并注释掉了其中crontab的行django-mailer(上面两行),然后重新启动cron

电子邮件仍在发送中!!

什么鬼!?它们怎么还在发送?有趣的是,每封电子邮件都显示它是在我点击时发送的Send All Emails(大约一个小时前),而不是它们到达我的收件箱时发送的。所以,我真的不知道发生了什么,也不知道如何阻止这种电子邮件的猛烈攻击!

你看,刚刚收到另一封电子邮件...

编辑1

我通过 Google Apps Business 电子邮件帐户发送所有电子邮件。我只是以标准方式在我的 Python 代码中连接到 Gmail...

编辑2

它终于停止了……我最终kill向启动命令的两个进程发送了一个信号cron。我能想到的唯一事情是 django_mailer 将所有电子邮件存储在内存中并从那里发送。我原以为 django-mailer 会从队列(它自己的queue模型)中挑选一封电子邮件,发送它,然后获取下一条消息。事实似乎并非如此,因为我可以删除整个队列,但消息仍在发送。显然,它们存在于存储在 MySQL 数据库中的队列以外的其他地方。

有点令人困惑...

答案1

三步解决方案:

  1. 从 crontab 中删除条目
    我不知道它是否仍每 60 秒发送一封电子邮件,但请删除或注释掉这些行,以确保不会注入新邮件。

  2. 转储您的邮件队列
    …以适合您的 MTA 软件的任何方式(由于您没有指定您的 MTA,因此我无法更具体)。这应该可以清除所有等待发送的邮件(您可能有大量积压)

  3. 手动测试观察系统的行为 这将让您确定发生了什么,以及如何防止它将来再次发生。

答案2

确保“django”本身没有发送邮件消息。取消设置您的 ADMIN 指令。

旧设置.py

ADMINS = (('Bugs Bunny', '[email protected]'),)
MANAGERS = ADMINS

新的设置.py

ADMINS = ()
MANAGERS = ADMINS

这将防止 django 本身在配置错误时发送电子邮件,并且DEBUG = False

相关内容