【问题标题】:Trouble with Django sending email though smtp.gmail.comDjango 通过 smtp.gmail.com 发送电子邮件的问题
【发布时间】:2013-11-13 20:03:21
【问题描述】:

我正在尝试配置 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.

有没有人知道发生了什么!任何提示表示赞赏!

【问题讨论】:

    标签: python django smtp


    【解决方案1】:

    我发现了问题……你必须使用这段代码

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

    而不是

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

    【讨论】:

      【解决方案2】:

      您需要将TLSSSL 设置为True

      另外,使用STARTTLS 端口,即587

      像这样:

      EMAIL_PORT = 587
      EMAIL_USE_TLS = True
      EMAIL_USE_SSL = False
      

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

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

      【讨论】:

        【解决方案3】:

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

        EMAIL_HOST_USER = 'my_account'
        

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

        【讨论】:

          【解决方案4】:

          您的设置有误。 TLS 应该设置为EMAIL_USE_TLS 而不是MAIL_USE_TLS。连接到 587 时不使用 TLS 会产生此错误。

          【讨论】:

            【解决方案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
            

            【讨论】:

              【解决方案6】:

              这是您的 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?

              【讨论】:

              • 虽然问题确实指定了 gmail。你的回答实际上帮助我设置了 NONE gmail
              【解决方案7】:

              确保您还设置了EMAIL_BACKEND 设置:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-11-05
                • 1970-01-01
                • 2014-06-27
                • 2020-02-06
                • 1970-01-01
                • 2014-04-25
                • 2015-08-22
                • 1970-01-01
                相关资源
                最近更新 更多