Django通过smtp.gmail.com发送电子邮件的麻烦

时间:2013-11-02 20:57:57

标签: python django smtp

我正在尝试配置Django的send_email,以便我可以向用户发送密码重置电子邮件。到目前为止,我没有运气让它上班。我已经设置了一个基本的Gmail帐户(没有Google App等),并且在我的Django settings.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.

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

7 个答案:

答案 0 :(得分:19)

您在设置中输入了拼写错误。应使用EMAIL_USE_TLS而不是MAIL_USE_TLS设置TLS。连接到587时不使用TLS会产生此错误。

答案 1 :(得分:6)

确保您还设置了EMAIL_BACKEND设置:

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

答案 2 :(得分:2)

这个问题的答复迟了;但希望能帮助这个主题的未来读者。

正如@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

答案 3 :(得分:1)

我发现了问题...您必须使用此代码

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

代替

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

答案 4 :(得分:0)

删除邮件扩展名时,错误会更改为其他错误。但在大多数情况下,这不是真正的问题。正确完成设置后,它既可以使用扩展也可以不使用。

EMAIL_HOST_USER = 'my_account'

访问https://myaccount.google.com/security并在底部启用“允许安全性较低的应用”设置时检查其是否有效。

答案 5 :(得分:0)

您需要将TLSSSL设置为True

另外,使用STARTTLS的{​​{1}}端口

喜欢:

587

注意:您无需在设置中包括此内容:

EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

答案 6 :(得分:-1)

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

这对你有帮助 -
How to send an email with Gmail as provider using Python?