Amazon SES SMTP с Джанго - PullRequest
       14

Amazon SES SMTP с Джанго

27 голосов
/ 20 декабря 2011

Я пытаюсь использовать новый SMTP сервис Amazon для SES с Django 1.3.1, но мне не везет.

Я создал свои учетные данные SMTP SES и у меня в настройках:

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 email-smtp.us-east-1.amazonaws.com 465

Есть мысли?

Спасибо, G

Ответы [ 6 ]

27 голосов
/ 22 декабря 2011

Спасибо всем за рекомендации, но я наконец-то нашел гораздо более простое решение, которое позволило бы мне использовать встроенные классы почты Django, чтобы я мог получать отчеты об ошибках администратора по электронной почте и т. Д.

Благодаря этому маленькомукрасота Я смог использовать SES SMTP без каких-либо проблем:

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

Nice.

G

9 голосов
/ 03 февраля 2015

В Django 1.7 вы можете отправлять электронную почту по протоколу SSL без сторонней библиотеки.

EMAIL_USE_SSL = True

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

5 голосов
/ 22 декабря 2011

После долгих долгих поисков и попыток я нашел:

Вместо использования:

 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 поддерживает расширенные типы вложений, VERP и STARTTLS для SMTP

(из новостной рассылки Amazon)

0 голосов
/ 22 октября 2018

Я пробовал настройки smtp, чтобы @Givp (кто ответил выше), я хочу дать полные настройки AWS SMTP в django.

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

здесь мы должны проверить все почтовые идентификаторы перед отправкой электронной почты. Тогда все будет работать, как мы ожидали

0 голосов
/ 03 апреля 2013

Я взял, как 3 часа, ломая голову над ним.Ваше решение по поводу smtplib с помощью s.starttls (), а затем s.login () подходит для программы на 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.core.mail import send_mail
    send_mail ('Испытуемый объект', 'Это тело', 'info@abc.com', ['hello @ abc.com '], fail_silently = False)

0 голосов
/ 21 декабря 2011

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

пример функциональности ядра Python

...