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

zd287kbt  于 2023-10-21  发布在  Go
关注(0)|答案(8)|浏览(176)

我正在尝试配置Django的send_email,这样我就可以向用户发送密码重置邮件。到目前为止,我还没有运气让它工作。我已经设置了一个基本的Gmail帐户(没有Google App等),在我的Djangosettings.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.

有谁知道这是怎么回事吗!任何提示是赞赏!

goucqfw6

goucqfw61#

您在设置中输入了一个错误。TLS应该设置为EMAIL_USE_TLS,而不是MAIL_USE_TLS。连接到587时未使用TLS会产生此错误。

oogrdqng

oogrdqng2#

确保您也设置了EMAIL_BACKEND设置:

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

wixjitnu3#

这个回答对这个问题来说太晚了;但希望能帮助这篇文章的未来读者。
正如@WAF所指出的,EMAIL_USE_TLS = True解决了这个错误。
此外,如果解析是通过django manage工具的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
q35jwt9p

q35jwt9p4#

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

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

而不是

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

ldioqlga5#

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

EMAIL_HOST_USER = 'my_account'

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

disho6za

disho6za6#

您需要将TLSSSL设置为True
另外,使用STARTTLS端口,即587
像这样:

EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

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

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

neekobn87#

这是您的SMTP服务器配置的问题。它没有配置TLS。如果你使用的是postfix,请参考文件-
http://postfix.state-of-mind.de/patrick.koetter/smtpauth/postfix_tls_support.html
对你也有帮助-
How to send an email with Gmail as provider using Python?

kd3sttzy

kd3sttzy8#

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

EMAIL_HOST_USER
    EMAIL_HOST_PASSWORD
    EMAIL_HOST
    EMAIL_PORT
    EMAIL_USE_TLS

它的工作!!!!

相关问题