Django 通过 smtp.gmail.com 发送电子邮件时出现问题

问题描述 投票:0回答:8

我正在尝试配置 Django 的 send_email,以便我可以向用户发送密码重置电子邮件。到目前为止,我还没有运气让它发挥作用。我已经设置了一个基本的 Gmail 帐户(没有 Google 应用程序等),并且在我的 Django settings.py 中我有:

EMAIL_HOST      = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = 'my_password'
EMAIL_HOST_USER = '[email protected]'
EMAIL_PORT      = 587
MAIL_USE_TLS   = True

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL  = '[email protected]'

然后我尝试通过这样做来测试这一点:

python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test', 'test', '[email protected]', ['[email protected]'])

我收到错误消息

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Program Files\Python27\lib\site-packages\django\core\mail\__init__.py
", line 62, in send_mail
    connection=connection).send()
  File "C:\Program Files\Python27\lib\site-packages\django\core\mail\message.py"
, line 255, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "C:\Program Files\Python27\lib\site-packages\django\core\mail\backends\sm
tp.py", line 88, in send_messages
    new_conn_created = self.open()
  File "C:\Program Files\Python27\lib\site-packages\django\core\mail\backends\sm
tp.py", line 55, in open
    self.connection.login(self.username, self.password)
  File "C:\Program Files\Python27\lib\smtplib.py", line 577, in login
    raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.

有谁知道发生了什么事吗!任何提示表示赞赏!

python django smtp
8个回答
37
投票

您的设置中有拼写错误。 TLS 应使用

EMAIL_USE_TLS
设置,而不是
MAIL_USE_TLS
。连接到 587 时不使用 TLS 会生成此错误。


6
投票

确保您还设置了

EMAIL_BACKEND
设置:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

5
投票

对于问题的回答已经晚了;但希望能帮助该主题的未来读者。

正如@WAF所指出的,EMAIL_USE_TLS = True解决了这个错误。

此外,如果通过 django 管理工具的 shell 命令验证分辨率,我们必须在添加上述设置后重新启动 shell 并重复验证步骤。

以下总结了 django shell 中 gmail 验证的最小配置:

在settings.py中:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '<email.id>'
EMAIL_HOST_PASSWORD = '<pw>'
EMAIL_USE_TLS = True

在 django 管理工具的 shell 中:

from django.core.mail import send_mail
send_mail('From django', 'Test email from dj manage', '[email protected]', ['[email protected]'])
... 1

5
投票

我发现问题了...你必须使用这个代码

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

而不是

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

1
投票

通过删除邮件扩展名修复错误后,您可能会收到其他错误。在大多数情况下,扩展并不是真正的问题。一旦正确完成设置,无论有扩展还是没有扩展,它都可以工作。

EMAIL_HOST_USER = 'my_account'

访问 https://myaccount.google.com/security 并检查当您打开底部的允许不太安全的应用程序设置时它是否有效。


1
投票

您需要将

TLS
SSL
设置为
True

此外,使用

STARTTLS
端口,即
587

像这样:

EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

注意: 您不需要将其包含在您的设置中:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

0
投票

这是您的 SMTP 服务器配置问题。它未配置 TLS。 如果您使用 postfix 请参阅文档 -
http://postfix.state-of-mind.de/patrick.koetter/smtpauth/postfix_tls_support.html

这对你也有帮助 -
如何使用 Python 以 Gmail 作为提供商发送电子邮件?


0
投票

我删除了:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
我的
settings.py
看起来像 :

    EMAIL_HOST_USER
    EMAIL_HOST_PASSWORD
    EMAIL_HOST
    EMAIL_PORT
    EMAIL_USE_TLS

并且成功了!!!!

© www.soinside.com 2019 - 2024. All rights reserved.