2011-12-20 6 views
22

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

Я создал мой 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', '[email protected]',['[email protected]'], fail_silently=False) 

Но Я получаю следующее сообщение об ошибке:

SMTPServerDisconnected: Connection unexpectedly closed 

Я TELNET к серверу:

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

Любые мысли?

Спасибо, G

+2

Может быть связано с Amazon не поддерживает start_tls. «Интерфейс SMTP Amazon SES в настоящее время требует протокола Handshake и не поддерживает STARTTLS. Мы поддерживаем как SSL 3.0, так и TLS 1.0». См. Обсуждение здесь [link] (https://forums.aws.amazon.com/thread.jspa?threadID=82510&tstart=0&start=0) – mtnpaul

+0

Вы посмотрели на эту статью [http://hmarr.com/2011/jan/26/using-amazons-simple-email-service-ses-with-django /). – mtnpaul

+0

@mtnpaul спасибо, но эта статья не для SMTP. Я специально хотел использовать протокол SMTP. Но похоже, что проблема связана с тем, что TLS не поддерживается, хотя они упоминают об этом в консоли. – GivP

ответ

25

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

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

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

Загрузить и установить (настройка python.ру установки)

Затем просто изменить настройки, чтобы использовать этот новый бэкенд электронной почты:

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

+0

Поскольку вы используете SSL-сервер, вам действительно нужно установить EMAIL_USE_TLS = True? – mtnpaul

+0

Не пробовал, честно говоря. Будет тест. – GivP

+0

Настройка EMAIL_USE_TLS = False не имеет значения. – bobc

5

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

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

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

Для AmazonSES SMTP должен быть:

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

Так что, я думаю, для Джанго вы можете либо исправить Джанго код, или написать собственный простой вы бэкенд электронной почты [основанный на Джанго по умолчанию электронной почты бэкэндом].

UPD:

я нашел другое решение (но не проверял сам): использовать SSLEmailBackend из ссылки ниже

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

(Отсюда: Mysterious issue with Django + uWSGI + send email)

UPD2 :

AmazonSES поддерживает STARTTL S теперь :)

Amazon SES supports expanded attachment types, VERP, and STARTTLS for SMTP

(от Amazon бюллетеня)

+0

Не уверен, что это такое, но он не поставляется с Django из коробки. См. Мое аналогичное решение ниже. – GivP

+0

Это выглядит красиво!) – vsvasya

+1

(Кроме того, я забыл упомянуть красивое приложение django-ses :)) – vsvasya

0

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

  1. Установите бото

    pip install --upgrade boto

  2. Установите Джанго-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. В файле Джанго, где вы хотите, чтобы отправить письмо

    from django.core.mail import send_mail
    send_mail('Test subject', 'This is the body', '[email protected]',['[email protected]'],fail_silently=False)

Смежные вопросы