【问题标题】:scheduling an async email job fails with error SMTPAuthenticationError: (535, '5.7.3 Authentication unsuccessful')调度异步电子邮件作业失败并出现错误 SMTPAuthenticationError: (535, '5.7.3 Authentication unsuccessful')
【发布时间】:2016-04-11 02:36:03
【问题描述】:

我正在尝试安排异步电子邮件作业。 我使用django-rq 作为排队机制。我尝试了许多修复方法,例如更改密码、确保密码正确等。我可以通过 REPL 手动发送 SMTP。

更新 #1:据我所知,工作人员正在正确获取设置。该作业正确地获取了 settings.DEFAULT_FROM_EMAIL 的正确值,并将正确的电子邮件地址设置为 send_mail 的 arg。

以下代码成功运行(没有 django-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')

为什么会抛出异常,我该如何解决?

【问题讨论】:

    标签: django django-rq


    【解决方案1】:

    我的假设是入队任务在单独的工作环境中运行。在 Django 内部,send_mail 函数知道从哪里查找 Auth 详细信息。但是在工人内部,它找不到它们,因为它是一个单独的过程。

    您需要编写您的自定义 send_mail 函数,该函数不依赖 Django 来提供它的设置。

    【讨论】:

    • 谢谢,但这项工作似乎正确地选择了设置。例如,上面的 args 之一是 settings.DEFAULT_FROM_EMAIL,它在作业中被设置为 django 设置文件中的值。我将使用此信息更新问题
    • 我们没有将任何身份验证信息传递给send_email - Django 为他们提供了详细信息,甚至可能设置了连接。将任务排入队列时正在读取设置,该任务仍在 django 中。
    • 我明白你现在在说什么。我在这里记录了一个问题github.com/ui/django-rq/issues/148
    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多