Назад | Перейти на главную страницу

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 и щелкнул ссылку, по которой в очередь Django Mailer помещается около 600 писем. В cron команда собрала сообщения в очереди и послушно начала отправлять электронные письма.

Все письма адресованы мне на данный момент для тестирования. Как и ожидалось, начали приходить электронные письма.

Однако после примерно 30 писем я хотел прекратить их рассылку, так как хотел внести некоторые изменения, и начать процесс заново (сейчас я тестирую приложение). Я вошел в MySQL и удалил все записи в django_mailer_queuedmessages table, думая, что это остановит дальнейшие электронные письма.

Электронные письма продолжали приходить.

Затем я удалил все записи в django_mailer_messages стол, надеясь который остановит электронную почту.

Письма продолжали приходить!

Затем я удалил все записи в каждой таблице, которая начинается с django_mailer... а также закомментировал crontab линии, которые имеют django-mailer в них (два вверху) и перезапустили cron.

Электронные письма ЕЩЕ приходят !!

Какого черта!? Как их еще присылают? Интересно, что в каждом электронном письме указано, что оно было отправлено в момент, когда я нажал кнопку Send All Emails (около часа назад), а не когда они пришли в мой почтовый ящик. Итак, я не совсем уверен, что происходит и как остановить этот натиск электронных писем!

Эй смотри, только что пришло другое письмо...

ИЗМЕНИТЬ 1

Я направляю всю свою электронную почту через свой аккаунт электронной почты Google Apps Business. Я просто подключаюсь к Gmail в своем коде Python стандартным способом ...

РЕДАКТИРОВАТЬ 2

Он остановился ... наконец. В итоге я отправил kill сигнал двум процессам, которые запустили cron команды. Я могу думать только о том, что django_mailer хранил все электронные письма в памяти и отправлял их оттуда. Я думал, что django-mailer выберет письмо из очереди (его собственный queue модель), отправьте его и получите следующее сообщение. Похоже, это не так, поскольку я мог удалить всю очередь, а сообщения все еще отправлялись. Ясно, что они существовали где-то еще, кроме очереди, хранящейся в базе данных MySQL.

Вид сбивает с толку ...

Трехэтапное решение:

  1. Удалите записи из вашего crontab
    Я не знаю, отправляет ли он электронное письмо каждые 60 секунд или нет, но удалите или закомментируйте эти строки, чтобы мы были уверены, что новое письмо не попадает.

  2. Сбросьте вашу почтовую очередь
    … Любым способом, который подходит для вашего программного обеспечения MTA (поскольку вы не указываете свой MTA, я не могу быть более конкретным). Это должно избавить от любой почты, ожидающей отправки (у вас может быть значительное отставание).

  3. Проверить вручную и наблюдайте за поведением вашей системы Это позволит вам определить, что произошло, и как предотвратить это в будущем.

Убедитесь, что сам django не отправляет почтовые сообщения. Отмените директиву ADMIN.

старый settings.py

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

новый settings.py

ADMINS = ()
MANAGERS = ADMINS

Это предотвратит отправку писем самим django, если что-то неправильно настроено и DEBUG = False