это мой settings.py:
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.
В django я отправил электронное письмо с этой строкой ([email protected] заменен учетной записью gmail, которая находится в подтвержденном списке адресов электронной почты):
send_mail("Subject", "content", "[email protected]", [email], fail_silently=False)
Это не сработало. Тем не менее, отправка тестового электронного письма из консоли SES (выберите одно из писем в подтвержденных письмах и нажмите кнопку «Отправить тестовое письмо») работает.
В этом документе говорится что я могу отправлять электронную почту через командную строку с помощью команды openssl. Итак, я сделал ssh на машине EC2 и использовал:
openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.us-east-1.amazonaws.com:25
Обратите внимание, что здесь я использовал 25, когда я использовал порт 465, он выводил:
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 Неверные учетные данные для аутентификации. Мог ли я использовать неправильные учетные данные? но я копирую имя пользователя и пароль прямо со страницы генерации пользователя и пароля smtp.
Я также попытался привязать политику AmazonSESFullAccess ко всем пользователям IAM, но ничего не вышло.
Я использую Django 1.8.2. Пробовал Django-ses, но он тоже не работал (синтаксическая ошибка при запуске тестов, он не поддерживает python 3?)
ОБНОВЛЕНИЕ
Я изменил порт на 587 и использую USE_TLS True, и теперь я могу 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 из оболочки, и она работает.
ОБНОВЛЕНИЕ
Оказывается, я также могу использовать порт 465 и USE_SSL True и иметь возможность send_mail из оболочки django. но все же это не работает в views.py