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
Ответы
Ответ 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
Ницца.
С
Ответ 2
В Django 1.7 вы можете отправлять электронную почту с помощью SSL самостоятельно без сторонней библиотеки.
EMAIL_USE_SSL = True
https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-EMAIL_USE_SSL
Ответ 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)
Ответ 4
http://aws.amazon.com/articles/2405502737055650
пример функциональности ядра python
Ответ 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)