O Django-Mailer não para de enviar e-mails

2

Eu configurei o Django Mailer e adicionei os dois comandos ao 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 é o diretório que mantém meu projeto Django.

Depois de reiniciar o cron , liguei meu projeto do Django e cliquei em um link que coloca cerca de 600 e-mails na fila do Django Mailer. O comando cron pegou as mensagens na fila e começou a enviar os e-mails.

Cada email é endereçado a mim por enquanto para fins de teste. Como esperado, os e-mails começaram a aparecer.

No entanto, depois de cerca de 30 e-mails, eu queria parar de enviar os e-mails, pois queria fazer algumas alterações e recomeçar o processo (estou testando o aplicativo agora). Eu entrei em MySQL e deletei todos os registros na tabela django_mailer_queuedmessages , pensando que isso impediria qualquer e-mail adicional.

Os e-mails continuavam chegando.

Em seguida, apaguei todos os registros em django_mailer_messages table, esperando que isso parasse os emails.

Os e-mails continuaram chegando!

Eu excluí todos os registros em todas as tabelas que começam com django_mailer... e também comentei as crontab linhas que têm django-mailer nelas (as duas acima) e reiniciei cron .

Os emails ainda estão chegando !!

Que diabos! Como eles ainda estão sendo enviados? Curiosamente, cada e-mail informa que ele foi enviado no momento em que eu cliquei em Send All Emails (cerca de uma hora atrás agora) e não quando eles chegaram na minha caixa de entrada. Então, eu não tenho certeza do que está acontecendo ou como parar esse ataque de e-mails!

Ei, olhe, outro e-mail acabou de chegar ...

EDIT 1

Eu roteio todos os meus e-mails através da minha conta de e-mail do Google Apps Business. Eu simplesmente me conecto ao Gmail em meu código Python da maneira padrão ...

EDIT 2

Parou ... finalmente. Acabei enviando um sinal kill para os dois processos que iniciaram os comandos cron . A única coisa que posso pensar que aconteceu foi que o django_mailer armazenou todos os emails na memória e os estava enviando de lá. Eu tinha pensado que o django-mailer iria pegar um e-mail fora da fila (seu próprio modelo queue ), enviá-lo, então pegar a próxima mensagem. Este não parece ser o caso, pois eu poderia excluir toda a fila e as mensagens ainda estavam sendo enviadas. Claramente eles existiam em outro lugar que não a fila armazenada no banco de dados MySQL.

Meio confuso ...

    
por Garfonzo 25.01.2012 / 05:55

2 respostas

2

Solução de três etapas:

  1. Remova as entradas do seu crontab
    Não sei se ainda está disparando um e-mail a cada 60 segundos ou não, mas remova ou comente essas linhas, então temos certeza de que novos e-mails não estão sendo injetados.

  2. Envie sua fila de e-mail à minha … De qualquer maneira que seja apropriado para o seu software MTA (desde que você não especifique o seu MTA eu não posso ser mais específico). Isso deve eliminar todos os e-mails que estão aguardando para serem enviados (você pode ter um backlog substancial)

  3. Teste manualmente e observe o comportamento do seu sistema Isso permitirá que você determine o que aconteceu e como evitar que isso aconteça no futuro.

por 25.01.2012 / 06:16
1

Certifique-se de que o 'django' não esteja enviando as mensagens de correio. Desative sua diretiva ADMIN.

old settings.py

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

new settings.py

ADMINS = ()
MANAGERS = ADMINS

Isso evitará que o django envie e-mails quando algo estiver configurado incorretamente e DEBUG = False

    
por 16.04.2014 / 18:53

Tags