【问题标题】:Django Sending Email : SMTPServerDisconnected: Connection unexpectedly closedDjango 发送电子邮件:SMTPServerDisconnected:连接意外关闭
【发布时间】:2015-05-12 21:07:36
【问题描述】:

你好,我想发送电子邮件激活使用 django 注册 redux。

这是我的设置.py

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

ACCOUNT_ACTIVATION_DAYS = 3
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'blahblah@gmail.com'
EMAIL_HOST_PASSWORD = 'blahpassword'
EMAIL_PORT = 465
EMAIL_USE_SSL = True

LOGIN_REDIRECT_URL = '/'

当我尝试使用时

python manage.py shell

从 django.core.mail 导入发送邮件

send_mail('测试', '这是一个测试', 'youremail@gmail.com', ['toemail@gmail.com'])

我收到这样的错误:

    Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/apsijogja/djangogirls/myvenv/local/lib/python2.7/site-packages/django/core/mail/__init__.py", line 62, in send_mail
    return mail.send()
  File "/home/apsijogja/djangogirls/myvenv/local/lib/python2.7/site-packages/django/core/mail/message.py", line 286, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/apsijogja/djangogirls/myvenv/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 92, in send_messages
    new_conn_created = self.open()
  File "/home/apsijogja/djangogirls/myvenv/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 50, in open
    self.connection = connection_class(self.host, self.port, **connection_params)
  File "/usr/lib/python2.7/smtplib.py", line 249, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python2.7/smtplib.py", line 310, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 361, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
SMTPServerDisconnected: Connection unexpectedly closed

你能帮我解决这个问题吗?

【问题讨论】:

标签: python django email


【解决方案1】:

这通常是因为错误的 SENDGRID 凭据而引发的 在这里你必须使用

EMAIL_HOST_USER = 'apikey'

【讨论】:

  • 与 Laenka-Oss 的答案相同,但内容较少。
【解决方案2】:

要使用 465 端口,您需要调用 smtplib.SMTP_SSL()。 目前,它调用 smtplib.SMTP() .. 所以,把你的 PORT 从 465 改成 587

如果你想使用 465 端口,

你的EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'

EMAIL_PORT=465

你需要安装django_smtp_ssl

否则你可以保留,

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

EMAIL_PORT=465

【讨论】:

【解决方案3】:

我正在使用 AWS SES 并且遇到了同样的问题。

使用端口 587 对我有用。设置与@User0511 几乎相同

【讨论】:

    【解决方案4】:

    像我一样,如果您部署的 django 应用程序在 heroku 上并且使用 https 意味着您需要端口 465,您不应该忘记在下面将这些相同的值添加到您的 heroku Config Vars。它抛出了“连接意外关闭”错误,直到我不得不添加它。

    # settings.py

    EMAIL_HOST = 'smtp.sendgrid.net'
    EMAIL_HOST_USER = 'apikey'
    EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')                   
                         # replace here with the long SendGrid API secret code 
                         # xyxyxyxyzzzyz on heroku's Config Vars
    EMAIL_PORT =  465 
    EMAIL_USE_SSL = True
    

    否则,在 localhost 或开发服务器上调试将正常工作(在 http 下使用端口 587),但在使用 https 的端口 465 下进行部署时无法使用

    【讨论】:

      【解决方案5】:

      对于python3.0+

      我找到了解决方法,或者这就是解决方案,django 电子邮件包中存在一些问题。

      1)pip install sendgrid-django

      2) 在 settings.py 中添加这些以及其他电子邮件配置

        EMAIL_BACKEND = 'sgbackend.SendGridBackend'
        SENDGRID_API_KEY = "YOUR SENDGRID API KEY"
        EMAIL_PORT = 465
      

      3)发送邮件的代码示例(您的可能不同):

      from django.core.mail import EmailMessage
      send_email = EmailMessage(
          subject=subject,
          body=body,
          from_email=from_email,
          to=to_email,
          reply_to=reply_to,
          headers=headers,
      
      )
      send_email.send(fail_silently=fail_silently)
      

      您必须对代码进行更改,因为我只是展示了一个示例。

      仅用于调试目的-sendgrid mail send using telnet

      【讨论】:

        【解决方案6】:

        在我的情况下使用smtplib.SMTP_SSL() 解决了这个问题。你可以试试这个。

        【讨论】:

          【解决方案7】:

          请查看此链接:https://code.djangoproject.com/ticket/9575 并尝试通过 shell 发送,它应该可以工作

          【讨论】:

            猜你喜欢
            • 2018-04-29
            • 2013-07-19
            • 2018-09-04
            • 1970-01-01
            • 2016-11-16
            • 2016-09-28
            • 1970-01-01
            • 2012-05-23
            相关资源
            最近更新 更多