Amazon SES SMTP z Django

Próbuję użyć nowej usługi SMTP Amazona dla SES z Django 1.3.1, ale nie mam dużo szczęścia.

Utworzyłem moje poświadczenia ses SMTP i mam to w moich ustawieniach:

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

Następnie Próbuję wysłać testową wiadomość e-mail (z i na zweryfikowane adresy e-mail):

from django.core.mail import send_mail

send_mail('Test subject', 'This is the body', '[email protected]',['[email protected]'], fail_silently=False)

Ale dostaję następujący błąd:

SMTPServerDisconnected: Connection unexpectedly closed

Mogę telnet na Serwer:

telnet email-smtp.us-east-1.amazonaws.com 465
Jakieś pomysły?

Dzięki, G

Author: GivP, 2011-12-20

7 answers

Dziękuję wszystkim za rekomendacje, ale w końcu znalazłem znacznie prostsze rozwiązanie, które pozwoliłoby mi używać wbudowanych klas pocztowych Django, więc nadal mogę otrzymywać raporty o błędach administratora itp.

Dzięki tej małej urodzie udało mi się używać ses SMTP bez żadnych problemów:

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

Pobierz i zainstaluj (python setup.py install)

Następnie po prostu zmień ustawienia, aby użyć tego nowego e-maila backend:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'

Reszta ustawień jest jak zwykle:

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
Nieźle.

G

 30
Author: GivP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 09:22:40

Od Django 1.7, możesz wysyłać e-maile z SSL natywnie bez biblioteki stron trzecich.

EMAIL_USE_SSL = True

Docs

 10
Author: Edwin Lunando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-18 11:25:51

2019 Aktualizacja: Django 2.2.1

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

EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my_smtp_username'
EMAIL_HOST_PASSWORD = 'my_smtp_password'
EMAIL_USE_TLS = True

Nie jest potrzebna biblioteka.

Napisy: https://stackoverflow.com/a/32476190/5647272

Odniesienie: https://docs.djangoproject.com/en/2.2/topics/email/

 8
Author: Umair Mohammad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-03 11:21:10

Po długich poszukiwaniach i próbach znalazłem:

Zamiast:

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

Dla Amazonów SMTP musi być:

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

Więc myślę, że dla django możesz albo naprawić kod django, albo napisać własny prosty backend poczty e-mail[oparty na domyślnym backendzie poczty django].

UPD :

Znalazłem inne rozwiązanie( ale nie testowałem go sam): Użyj SSLEmailBackend z linku poniżej

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

(stąd: tajemniczy problem z Django + uWSGI + send e-mail )

UPD2 :

Amazonki wspierają STARTTLS od teraz :)

[[3]}Amazon SES obsługuje rozszerzone typy załączników, VERP i STARTTLS dla SMTP

(z Biuletynu Amazon)

 5
Author: vsvasya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:24:45

Http://aws.amazon.com/articles/2405502737055650

Core Python functionality sample

 0
Author: soField,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 15:53:10

Zajęło mi to jakieś 3 godziny. Twoje rozwiązanie dotyczące smtplib z s. starttls (), a następnie S. login() jest dobre z programem Pythona ze wszystkimi poświadczeniami e-mail w tym samym pliku. Ale nie sądzę, aby to był czysty sposób, aby to zrobić w Django. Więc w końcu to rozgryzłem. Niezależnie od tego, czy Twoja maszyna jest 32, czy 64-bitowa. Po prostu wykonaj następujące kroki:

  1. Install boto

    Pip install --upgrade boto

  2. Zainstaluj django-ses

    Pip install django-ses

  3. In your djando settings.py plik zaktualizuj następujące informacje.

    EMAIL_BACKEND = ' django_ses.SESBackend "
    AWS_ACCESS_KEY_ID = 'your_username'
    AWS_SECRET_ACCESS_KEY = 'your_password'

  4. W Twoim pliku django, gdzie chcesz wysłać e-mail

    Z django.rdzeń.import poczty send_mail
    send_mail ('test subject', 'This is the body', '[email protected]", ["[email protected]'], fail_silently=False)

 0
Author: William Borges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 14:25:40

Próbowałem ustawień smtp w celu @Givp( który odpowiedział powyżej), chcę dać pełne ustawienia SMTP AWS w django.

DEFAULT_FROM_EMAIL = '[email protected]'

ADMINS = [('name', '[email protected]')]
MANAGERS = ADMINS

SERVER_EMAIL = '[email protected]' # this is for to send 500 mail to admins

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
MAIL_HOST = 'email-smtp.us-east-1.amazonaws.com' 
EMAIL_PORT = 465
EMAIL_HOST_USER = 'Accesskeyofsmtp'
EMAIL_HOST_PASSWORD = 'secretkeyofsmtp'
EMAIL_USE_TLS = True

Tutaj musimy zweryfikować wszystkie mail-id przed wysłaniem e-maila.wtedy wszystko będzie działać zgodnie z naszym oczekiwaniem

 0
Author: selvasundarraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-22 13:50:57