2011-12-20 20 views
22

Amazonの新しいSMTPサービスをSES用にDjango 1.3.1で使用しようとしていますが、運があまりありません。Amazon SES SMTP with Django

私はSES SMTPの資格情報を作成し、私の設定でこれを持っていました:

EMAIL_USE_TLS = True 
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com' 
EMAIL_HOST_USER = 'my-smtp-user' 
EMAIL_HOST_PASSWORD = 'my-smtp-password' 
EMAIL_PORT = 465 

その後、私は(からと電子メールアドレスを検証するために)テストメールを送信してください:

from django.core.mail import send_mail 

send_mail('Test subject', 'This is the body', '[email protected]',['[email protected]'], fail_silently=False) 

しかし、私は次のエラーを取得する:

SMTPServerDisconnected: Connection unexpectedly closed 

私は、サーバーにtelnetで接続することができます

telnet email-smtp.us-east-1.amazonaws.com 465 

どのような考えですか?

おかげで、 G

+2

はSTART_TLSをサポートしていないアマゾンに関連している可能性が。 "Amazon SES SMTPインターフェイスは現在、ハンドシェイクプロトコルを必要とし、STARTTLSをサポートしていません.SSL 3.0とTLS 1.0の両方をサポートしています。ここの議論を見る[リンク](https://forums.aws.amazon.com/thread.jspa?threadID=82510&tstart=0&start=0) – mtnpaul

+0

あなたはこの記事を見ましたか?(http://hmarr.com/2011/jan/26/using-amazons-simple-email-service-ses-with-django /)。 – mtnpaul

+0

@mtnpaulありがとうございますが、この記事はSMTP用ではありません。私は特にSMTPプロトコルを使いたいと思っていました。しかし、TLSがサポートされていないことに関連しているように聞こえます。 – GivP

答えて

25

みんなありがとうからが、私は最終的に私が内蔵されたメールクラス私はまだことができるようにDjangoのを使用することができるようになるはるかに簡単な解決策を見つけました

https://github.com/bancek/django-smtp-ssl

:私は何の問題もなくSES SMTPを使用することができたこの小さな美しさに

おかげで私の管理者のエラーメールレポートなどを取得

ダウンロードしてインストールします(pythonのセットアップ。PY)

をインストールそれからちょうどこの新しい電子メールバックエンドを使用するように設定を変更します。

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 

残りの設定は通常通りです:

EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com' 
EMAIL_PORT = 465 
EMAIL_HOST_USER = 'my_smtp_username' 
EMAIL_HOST_PASSWORD = 'my_smtp_password' 
EMAIL_USE_TLS = True 

ニース。

g

+0

SSLバックエンドを使用しているので、本当にEMAIL_USE_TLS = Trueを設定する必要がありますか? – mtnpaul

+0

正直言って、試したことはありません。テストします。 – GivP

+0

EMAIL_USE_TLS = Falseに設定しても差はありません。 – bobc

5

長い長い検索の後と試みる私が見つけた:

代わりに使用して:AmazonSESについては

s = smtplib.SMTP(host, port) 
s.starttls() 
s.login(user, password) 

SMTPでなければなりません:

s = smtplib.SMTP_SSL(host, port) 
s.login(user, password) 

だから、私が思うに、ジャンゴのためにあなたは、コードをDjangoの修正、またはあなたは、[デフォルトのDjangoのメールバックエンドに基づい]簡単な電子メールのバックエンドを所有して書くことができます。

UPD

私は別の解決策を見つけた(ただし、自分でそれをテスト):(ここから:Mysterious issue with Django + uWSGI + send email

// settings.py 
EMAIL_BACKEND = 'backends.smtp.SSLEmailBackend' 

の下のリンクからSSLEmailBackendを使用

UPD2

AmazonSESはSTARTTLをサポートしていますS推奨事項については、今(アマゾンのニュースレターから):)

Amazon SES supports expanded attachment types, VERP, and STARTTLS for SMTP

+0

バックエンドに何があるのか​​はっきりしていませんが、Djangoはそのままでは提供されません。以下の私の同様のソリューションを参照してください。 – GivP

+0

いいですね! ) – vsvasya

+1

(また、私は美しいdjango-sesアプリを忘れていました:)) – vsvasya

0

私は3時間かけて頭を壊したような気がしました。 s.starttls()とs.login()を使ってsmtplibに関するあなたの解決策は、同じファイル内のすべての電子メールの資格情報を持つpythonプログラムでうまくいきます。しかし、私はそれがジャンゴでそれを行うためのきれいな方法だとは思わない。だから私はついにそれを理解した。あなたのマシンが32ビットか64ビットかにかかわらず。ただ、次の手順を実行します。

  1. はのboto

    pip install --upgrade boto

  2. には、以下の情報を更新するあなたdjando settings.pyファイルでジャンゴ-SES

    pip install django-ses

  3. をインストールします。あなたは電子メールにはDjango 1.7で

    from django.core.mail import send_mail
    send_mail('Test subject', 'This is the body', 'in[email protected]',['[email protected]'],fail_silently=False)

8

を送りたいあなたのジャンゴファイルで

EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_ACCESS_KEY_ID = 'your_username'
AWS_SECRET_ACCESS_KEY = 'your_password'

  • 、あなたは、サードパーティのライブラリなしでネイティブSSLでメールを送信することができます。

    EMAIL_USE_SSL = True 
    

    https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-EMAIL_USE_SSL

  • 関連する問題