2016-01-06 9 views
0

Я пытаюсь запланировать асинхронное задание электронной почты. Я использую django-rq как механизм очередей. Я пробовал множество исправлений, таких как смена пароля, обеспечение его правильности и т. Д. Я могу вручную отправить SMTP через REPL.планирование задания async электронной почты с ошибкой SMTPAuthenticationError: (535, '5.7.3 Аутентификация неуспешна')

Обновление № 1: настройки, которые я могу установить, правильно настраиваются рабочим. Задание правильно подбирает правильное значение для settings.DEFAULT_FROM_EMAIL и имеет правильный адрес электронной почты, заданный как arg для send_mail.

Следующий код работает успешно (без Джанго-RQ):

send_mail(
    newClaim.linkedOffer.commsPromoHeadline, 
    msg_plain, 
    settings.DEFAULT_FROM_EMAIL, 
    [newRecipient.email], 
    html_message=msg_html, 
) 

в то время как следующий код генерирует ошибку аутентификации SMTP (обратное прослеживание пониже):

django_rq.enqueue(
    send_mail, 
    newClaim.linkedOffer.commsPromoHeadline, 
    msg_plain, 
    settings.DEFAULT_FROM_EMAIL, 
    [newRecipient.email], 
    html_message=msg_html, 
    ) 

обратное прослеживание:

Traceback (most recent call last): 
    File "/home/user1/webapps/dev_django_platform/ENV/lib/python2.7/site-packages/rq/worker.py", line 568, in perform_job 
    rv = job.perform() 
    File "/home/user1/webapps/dev_django_platform/ENV/lib/python2.7/site-packages/rq/job.py", line 495, in perform 
    self._result = self.func(*self.args, **self.kwargs) 
    File "/home/user1/webapps/dev_django_platform/lib/python2.7/Django-1.7.7-py2.7.egg/django/core/mail/__init__.py", line 62, in send_mail 
    return mail.send() 
    File "/home/user1/webapps/dev_django_platform/lib/python2.7/Django-1.7.7-py2.7.egg/django/core/mail/message.py", line 286, in send 
    return self.get_connection(fail_silently).send_messages([self]) 
    File "/home/user1/webapps/dev_django_platform/lib/python2.7/Django-1.7.7-py2.7.egg/django/core/mail/backends/smtp.py", line 92, in send_messages 
    new_conn_created = self.open() 
    File "/home/user1/webapps/dev_django_platform/lib/python2.7/Django-1.7.7-py2.7.egg/django/core/mail/backends/smtp.py", line 59, in open 
    self.connection.login(self.username, self.password) 
    File "/usr/local/lib/python2.7/smtplib.py", line 622, in login 
    raise SMTPAuthenticationError(code, resp) 
SMTPAuthenticationError: (535, '5.7.3 Authentication unsuccessful') 

Почему возникает исключение и как его исправить?

ответ

0

Мое предположение - задание, установленное в очередь, выполняется в отдельной рабочей среде. Внутри Django функция send_mail знает, где искать данные Auth. Но внутри рабочего он не может их найти, так как это отдельный процесс.

Вам необходимо написать свою собственную функцию send_mail, которая не зависит от Django, чтобы предоставить ее настройки.

+0

спасибо, но работа, похоже, правильно подбирает настройки. Например, одним из приведенных выше аргументов является параметр.DEFAULT_FROM_EMAIL, который в задании установлен в значение в файле настроек django. Я обновлю вопрос с этой информацией – AndrewO

+0

Мы не передаем никакую информацию аутентификации 'send_email' - Django предоставляет им информацию, возможно, даже устанавливает соединения. Настройки считываются при постановке задачи, которая все еще находится внутри django. – masnun

+0

Я понимаю, что вы сейчас говорите. Я зарегистрировал проблему здесь https://github.com/ui/django-rq/issues/148 – AndrewO