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
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
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
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/
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)
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
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:
-
Install boto
Pip install --upgrade boto
-
Zainstaluj django-ses
Pip install django-ses
-
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' -
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)
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
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