Django & Amazon SES SMTP. Не може да се изпрати имейл

това е моят 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 и сега мога да изпращам_mail от django shell. Поставих функцията в моето приложение 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 и да мога да изпращам имейл от django shell. но все още не работи в views.py


person bysreg    schedule 09.06.2015    source източник
comment
Бихте ли поставили съобщението за грешка? Опитайте се да генерирате нови идентификационни данни.   -  person Edwin Lunando    schedule 10.06.2015
comment
моля, вижте актуализирания раздел. Промених порта и сега мога да изпращам имейл от shell, но по някаква причина не мога да го изпращам през url   -  person bysreg    schedule 10.06.2015


Отговори (2)


Ако използвате порт 465: Инсталирайте django-smtp-ssl с помощта на pip

pip install django-smtp-ssl

след това променете EMAIL_BACKEND в settings.py както следва:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'

Ако използвате порт 587:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
person Dawn T Cherian    schedule 09.09.2015

Актуализация за 2020 г.

Както се казва в документацията тук: Документация по имейл на Django и Email_use_ssl

В момента използвам Django 3.0 и документацията казва, че можете да използвате

EMAIL_USE_SSL = True

... Обикновено се използва на порт 465

Правя мисълта си да работи и изпращам имейли, използвайки AWS SES и услугата port 465 използвайки този ред вместо EMAIL_USE_TLS = Вярно :)

person Samuel Urias    schedule 24.05.2020