こんにちは私は電子メールのアクティベーションを送信したい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
この問題の解決を手伝ってくれませんか?
ポート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 シェル経由で送信してみてください。うまくいくはずです。
私の場合、smtplib.SMTP_SSL()
を使用してこの問題を解決します。これを試すことができます。
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メール送信
私と同じように、デプロイされた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でのデプロイメントでは機能しません