web-dev-qa-db-ja.com

Django電子メールの送信:SMTPServerDisconnected:接続が予期せず終了しました

こんにちは私は電子メールのアクティベーションを送信したいDjango登録reduxを使用します。

これは私のsetting.pyです

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

ACCOUNT_ACTIVATION_DAYS = 3
EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'blahpassword'
EMAIL_PORT = 465
EMAIL_USE_SSL = True

LOGIN_REDIRECT_URL = '/'

私が試すとき

python manage.pyシェル

django.core.mail import send_mailから

send_mail( 'Test'、 'This is a test'、 '[email protected]'、['[email protected]'])

次のようなエラーが発生します。

    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

この問題の解決を手伝ってくれませんか?

12
User0511

ポート465を使用するには、smtplib.SMTP_SSL()を呼び出す必要があります。現在、それはsmtplib.SMTP()を呼び出します..したがって、PORTを465から587に変更します

pORT 465を使用する場合は、

きみの EMAIL_BACKEND = 'Django_smtp_ssl.SSLEmailBackend'

`EMAIL_PORT=465`  

とインストールする必要がありますDjango_smtp_ssl

そうでなければ、あなたは保つことができ、

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

EMAIL_PORT=465

このリンクを確認してください: https://code.djangoproject.com/ticket/9575 シェル経由で送信してみてください。うまくいくはずです。

2
nyk91

私の場合、smtplib.SMTP_SSL()を使用してこの問題を解決します。これを試すことができます。

1

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)

例を示しただけなので、コードを変更する必要があります。

デバッグ目的のみ- Telnetを使用したsendgridメール送信

1
MrSoloDolo

私と同じように、デプロイされた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

それがなければ、ローカルホストまたは開発サーバーでのデバッグは(httpでポート587を使用して)機能しますが、httpsを使用してポート465でのデプロイメントでは機能しません

0
Laenka-Oss