Подтвердить что ты не робот

Amazon SES SMTP с Django

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

Я создал свои учетные данные 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

4b9b3361

Ответ 1

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

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

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

Загрузка и установка (установка python setup.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

Ницца.

С

Ответ 3

После долгого поиска и поиска я обнаружил:

Вместо этого:

 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)

Ответ 5

Я взял, как 3 часа, ломаю голову над ним. Ваше решение о smtplib с s.starttls(), а затем s.login() хорошо с программой python со всеми учетными данными электронной почты в том же файле. Но я не думаю, что это чистый способ сделать это в Django. Поэтому я, наконец, понял это. Независимо от того, является ли ваш компьютер 32 или 64 бит. Выполните следующие действия:

  • Установить boto

    pip install --upgrade boto

  • Установить django-ses

    pip install django-ses

  • В файле djando settings.py обновите следующую информацию.

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

  • В вашем файле django, где вы хотите отправить электронное письмо

    из django.core.mail import send_mail
    send_mail ('Test subject', 'Это тело', '[email protected]', ['[email protected]'], fail_silently = False)