Я установил 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.
Вид сбивает с толку ...
Трехэтапное решение:
Удалите записи из вашего crontab
Я не знаю, отправляет ли он электронное письмо каждые 60 секунд или нет, но удалите или закомментируйте эти строки, чтобы мы были уверены, что новое письмо не попадает.
Сбросьте вашу почтовую очередь
… Любым способом, который подходит для вашего программного обеспечения MTA (поскольку вы не указываете свой MTA, я не могу быть более конкретным). Это должно избавить от любой почты, ожидающей отправки (у вас может быть значительное отставание).
Проверить вручную и наблюдайте за поведением вашей системы Это позволит вам определить, что произошло, и как предотвратить это в будущем.
Убедитесь, что сам django не отправляет почтовые сообщения. Отмените директиву ADMIN.
старый settings.py
ADMINS = (('Bugs Bunny', 'bugs.bunny@acme.com'),)
MANAGERS = ADMINS
новый settings.py
ADMINS = ()
MANAGERS = ADMINS
Это предотвратит отправку писем самим django, если что-то неправильно настроено и DEBUG = False