2015-06-09 3 views
2

это мой settings.py:Django & Amazon SES SMTP. Не удается отправить электронную почту

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com' 
EMAIL_PORT = '465' 
EMAIL_HOST_USER = config_data['EMAIL_HOST_USER'] 
EMAIL_HOST_PASSWORD = config_data['EMAIL_HOST_PASSWORD'] 
EMAIL_USE_SSL = True 

Я проверил адреса электронной почты и также генерироваться SMTP учетные данные, которые я скачал учетные данные, содержащие имя пользователя IAM, Smtp имя пользователя, пароль Smtp. Я использовал имя пользователя smtp для EMAIL_HOST_USER и smtp-пароль для EMAIL_HOST_PASSWORD.

В Джанго, я послал по электронной почте с этой линией ([email protected] заменяется учетной записью GMAIL, которая находится в проверенном списке адресов электронной почты):

send_mail("Subject", "content", "[email protected]", [email], fail_silently=False) 

Это не сработало. Отправка тестового письма с консоли SES (выберите одно из сообщений электронной почты в проверенных письмах и нажмите кнопку отправки тестовой электронной почты).

Этот document говорит, что я могу отправлять электронную почту через командную строку с помощью команды openssl. Таким образом, я сделал SSH к EC2 машине, и использование:

openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:25 

Обратите внимание, что я использовал 25 здесь, когда я использовал порт 465, он outputed:

didn't found starttls in server response, try anyway... 
write:errno=32 

Так вместо этого я попробовал порт 25, это связано (250 OK), а затем я напечатал:

AUTH LOGIN 
334 VXNlcm5hbWU6 
SMTP_USER 
334 UGFzc3dvcmQ6 
SMTP_PASSWORD 

но выводимый: 535 Проверка подлинности учетных данных Invalid. Может быть, я использовал неправильные учетные данные? но я копирую имя пользователя и пароль прямо с страницы пользователя smtp и генерации пароля.

Я также попытался установить политику AmazonSESFullAccess всем пользователям IAM, но ничего не произошло.

Я использую Django 1.8.2. Пробовал Django-SES, но он не работает слишком (синтаксическая ошибка при выполнении тестов, он не поддерживает Python 3?)

UPDATE

Я изменил порт 587 и использовать USE_TLS Правда, и теперь я может send_mail из оболочки django. Я поставил функцию в моем приложении views.py:

def test_email(request): 
    send_mail("title", "content", "[email protected]", ["[email protected]"], fail_silently=False) 
    return get_return_object(request, status_code=1) 

и urls.py Я положил это внутри urlpatterns:

url(r'^test_email/$', views.test_email, name="test_email"), 

и когда я посетил URL, ничего не происходит. Я вызываю ту же функцию test_email из оболочки, и она работает.

UPDATE

Оказывается, что я могу также использовать порт 465 и USE_SSL Истинную и быть в состоянии send_mail от Джанго оболочки. но до сих пор она не работает в views.py

+0

могли бы вы поставить сообщение об ошибке? Попробуйте создать новые учетные данные. –

+0

, см. Обновленный раздел. Я изменил порт, и теперь я могу отправить почту из оболочки, но по какой-то причине я не могу отправить ее по URL-адресу – bysreg

ответ

2

Если вы используете порт 465: Установите Джанго-SMTP-SSL с использованием пип

pip install django-smtp-ssl 

затем изменить EMAIL_BACKEND в настройках.ру следующим образом:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 

Если вы используете порт 587:

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

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

  • Нет связанных вопросов^_^