web-dev-qa-db-ja.com

Django

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

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

28
GivP

みんなに推薦してくれてありがとう、しかし私はついに私がDjangoの組み込みのメールクラスを使うことを可能にするもっと簡単な解決策を見つけたので、私はまだ私の管理者エラーメールレポートなどを得ることができます。

この小さな美しさのおかげで、私は問題なくSESSMTPを使用することができました。

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

ダウンロードしてインストールします(python setup.py install)

次に、この新しいメールバックエンドを使用するように設定を変更します。

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

27
GivP

Django 1.7では、サードパーティのライブラリなしでSSLを使用してネイティブにメールを送信できます。

EMAIL_USE_SSL = True

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

9
Edwin Lunando

長い間検索して試した後、私は見つけました:

代わりに以下を使用します。

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

AmazonSESの場合、SMTPは次のよ​​うにする必要があります。

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

したがって、Djangoの場合、Djangoコードを修正するか、デフォルトのDjangoメールバックエンド]。

[〜#〜] upd [〜#〜]

私は別の解決策を見つけました(しかし私自身ではテストしていません):以下のリンクからSSLEmailBackendを使用してください

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

(ここから: Django + uWSGI +メールを送信 の不思議な問題

UPD2

AmazonSESはこれからSTARTTLSをサポートします:)

Amazon SESは、SMTP用の拡張添付ファイルタイプ、VERP、およびSTARTTLSをサポートします

(Amazonニュースレターから)

5
vsvasya

頭を骨折するのに3時間ほどかかりました。 s.starttls()、次にs.login()を使用したsmtplibに関するソリューションは、同じファイルにすべての電子メール資格情報を含むpythonプログラムで適切です。はDjangoでそれを行うためのクリーンな方法です。それで、私はついにそれを理解しました。マシンが32ビットか64ビットかに関係なく、次の手順を実行するだけです。

  1. Botoをインストールする

    pip install --upgrade boto

  2. Django-sesをインストールします

    pip install Django-ses

  3. Djando settings.pyファイルで、次の情報を更新します。

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

  4. メールを送信したいDjangoファイル内

    django.core.mailからimportsend_mail
    send_mail( 'Test subject'、 'This is the body'、 '[email protected]'、['[email protected]']、fail_silently = False)

0
William Borges
0
soField

@Givp(上記の回答者)にsmtp設定を試しましたが、Djangoで完全なAWSSMTP設定を提供したいと思います。

DEFAULT_FROM_EMAIL = '[email protected]'

ADMINS = [('name', '[email protected]')]
MANAGERS = ADMINS

SERVER_EMAIL = '[email protected]' # this is for to send 500 mail to admins

EMAIL_BACKEND = 'Django_smtp_ssl.SSLEmailBackend'
MAIL_Host = 'email-smtp.us-east-1.amazonaws.com' 
EMAIL_PORT = 465
EMAIL_Host_USER = 'Accesskeyofsmtp'
EMAIL_Host_PASSWORD = 'secretkeyofsmtp'
EMAIL_USE_TLS = True

ここでは、メールを送信する前にすべてのメールIDを確認する必要があります。そうすると、すべてが期待どおりに機能します。

0
selvasundarraj