30

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

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', 'info@abc.com',['hello@abc.com'], fail_silently=False)

しかし、次のエラーが発生します。

SMTPServerDisconnected: Connection unexpectedly closed

サーバーにtelnetで接続できます。

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

8 に答える 8

30

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
于 2011-12-22T09:22:40.060 に答える
12

2019アップデート:Django 2.2.1

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

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

ライブラリは必要ありません。

クレジット:https ://stackoverflow.com/a/32476190/5647272

参照:https ://docs.djangoproject.com/en/2.2/topics/email/

于 2019-11-27T18:49:51.583 に答える
11

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

EMAIL_USE_SSL = True

ドキュメント

于 2015-02-03T03:51:18.983 に答える
6

2021アップデート:Django-3.2.4

django-sesまたはなどのライブラリは必要ありませんdjango-amazon-ses!!

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.ap-northeast-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'my_smtp_username'      # Must create SMTP Credentials
EMAIL_HOST_PASSWORD = 'my_smtp_password'  # Must create SMTP Credentials
DEFAULT_FROM_EMAIL = 'myses@sender.com' # If don't need, comment out!!

追加しましDEFAULT_FROM_EMAILた。

DEFAULT_FROM_EMAIL = 'myses@sender.com'

必要ない場合はコメントしてください!!

# DEFAULT_FROM_EMAIL = 'myses@sender.com'

さらに、の場合は、アカウントがにあるかどうかDEFAULT_FROM_EMAILを1つ入力します。verified domainemail addresssandbox

したがって、sender.com以下の検証済みドメインの場合、

ここに画像の説明を入力してください


以下の3つが有効です:(3つのうち1つだけを使用してください)

DEFAULT_FROM_EMAIL = 'abc@sender.com' # OR
DEFAULT_FROM_EMAIL = 'test@sender.com' # OR
DEFAULT_FROM_EMAIL = 'myses@sender.com'

ただし、以下の2つは無効です:(これらはエラーになります)

*フォーマットはsomething@sender.com!!でなければなりません

DEFAULT_FROM_EMAIL = 'sender.com' 
DEFAULT_FROM_EMAIL = '@sender.com'

2 email addresses次に、以下の検証のために、

ここに画像の説明を入力してください


以下の2つのうち1つだけを使用してください。

DEFAULT_FROM_EMAIL = 'hello@gmail.com' # OR
DEFAULT_FROM_EMAIL = 'world@outlook.com'

最後に、EMAIL_HOST_USERとについてEMAIL_HOST_PASSWORDは、を作成する必要がありますSMTP Credentials

選択SMTP Settings

ここに画像の説明を入力してください


ボタンを押すCreate My SMTP Credentials

ここに画像の説明を入力してください


与えられたSMTP Credentials

ここに画像の説明を入力してください

次に、次のように配置SMTP Credentialsします。

EMAIL_HOST_USER = 'AKIAWP3TMGZN4OZH5H37'
EMAIL_HOST_PASSWORD = 'BB6dufiw96jJHUTrowXI8R4gcyOI+t1+Skbi51cdHYhV'

*(私はすでにこれらを削除しましたSMTP Credentials


于 2021-06-10T17:55:38.073 に答える
5

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

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

 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ニュースレターから)

于 2011-12-22T00:19:44.920 に答える
1

http://aws.amazon.com/articles/2405502737055650

コアPython機能サンプル

于 2011-12-21T15:53:10.510 に答える
1

頭を壊すのに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ファイル内

    from django.core.mail import send_mail
    send_mail('Test subject'、'This is the body'、'info@abc.com'、['hello@abc.com']、fail_silently = False)

于 2013-04-02T22:57:34.163 に答える
1

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

DEFAULT_FROM_EMAIL = 'admin@domain.com'

ADMINS = [('name', 'name@domain.com')]
MANAGERS = ADMINS

SERVER_EMAIL = 'admin@domain.com' # 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を確認する必要があります。そうすれば、すべてが期待どおりに機能します。

于 2018-10-22T13:50:57.907 に答える