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

17

我正在尝试配置Django的send_email功能,以便向用户发送密码重置电子邮件。到目前为止,我一直没有成功。我已经设置了一个基本的Gmail账户(没有Google应用等),并在我的Djangosettings.py中添加了以下代码:

EMAIL_HOST      = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = 'my_password'
EMAIL_HOST_USER = 'my_account@gmail.com'
EMAIL_PORT      = 587
MAIL_USE_TLS   = True

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL  = 'admin@my-site.com'

然后我尝试通过执行以下操作进行测试:

python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test', 'test', 'test@test.com', ['my-personal-email@gmail.com'])

然后我得到了错误信息

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.

有人知道发生了什么吗?任何提示都会受到赞赏!

8个回答

38
您的设置中出现了一个错别字。应该使用 EMAIL_USE_TLS 而不是 MAIL_USE_TLS 来设置 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', 'from@example.com', ['to@example.com'])
... 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

你需要将TLSSSL设置为True

同时,使用STARTTLS端口,即587

像这样:

EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

注意: 在您的设置中不需要包含此内容:

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

0

虽然问题确实指定了 Gmail,但您的回答实际上对我在非 Gmail 设置方面也有所帮助。 - will.mendil

-1
我删除了以下内容: EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 现在我的settings.py文件如下:
    EMAIL_HOST_USER
    EMAIL_HOST_PASSWORD
    EMAIL_HOST
    EMAIL_PORT
    EMAIL_USE_TLS

并且它起作用了!!!

不是每次都有效,问题出在EMAIL_USE_TLS上。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接