python - Amazon SES SMTP con Django
amazon-web-services amazon-ses (5)
Estoy intentando usar el nuevo servicio SMTP de Amazon para SES con Django 1.3.1 pero no estoy teniendo mucha suerte.
Creé mis credenciales SES SMTP y tengo esto en mi configuración:
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
Luego intento enviar un correo electrónico de prueba (desde y hasta direcciones de correo electrónico verificadas):
from django.core.mail import send_mail
send_mail(''Test subject'', ''This is the body'', ''[email protected]'',[''[email protected]''], fail_silently=False)
Pero me sale el siguiente error:
SMTPServerDisconnected: Connection unexpectedly closed
Puedo telnet al servidor:
telnet email-smtp.us-east-1.amazonaws.com 465
¿Alguna idea?
Gracias, G
Después de una larga búsqueda e intento, encontré:
En lugar de usar:
s = smtplib.SMTP(host, port)
s.starttls()
s.login(user, password)
Para AmazonSES SMTP debe ser:
s = smtplib.SMTP_SSL(host, port)
s.login(user, password)
Así que, creo, para django puedes corregir el código de django o escribir tu propio backend de correo electrónico simple [basado en el backend de correo electrónico predeterminado de django].
UPD :
Encontré otra solución (pero no la probé): use SSLEmailBackend desde el siguiente enlace
// settings.py
EMAIL_BACKEND = ''backends.smtp.SSLEmailBackend''
(Desde aquí: misterioso problema con Django + uWSGI + enviar correo electrónico )
UPD2 :
AmazonSES admite STARTTLS a partir de ahora :)
Amazon SES admite tipos de archivos adjuntos ampliados, VERP y STARTTLS para SMTP
(del boletín de Amazon)
En Django 1.7, puede enviar correos electrónicos con SSL de forma nativa sin una biblioteca de terceros.
EMAIL_USE_SSL = True
https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-EMAIL_USE_SSL
Gracias a todos por las recomendaciones, pero finalmente encontré una solución mucho más simple que me permitía usar las clases de correo integradas de Django, así puedo obtener mis informes de error de administrador, etc.
Gracias a esta pequeña belleza, pude usar SES SMTP sin ningún problema:
https://github.com/bancek/django-smtp-ssl
Descargue e instale (instalación de python setup.py)
Luego simplemente cambie su configuración para usar este nuevo servidor de correo electrónico:
EMAIL_BACKEND = ''django_smtp_ssl.SSLEmailBackend''
El resto de la configuración es como de costumbre:
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
Bonito.
GRAMO
Me tomó como 3 horas rompiéndome la cabeza. Su solución sobre smtplib con s.starttls () y luego con s.login () es buena con un programa python con todas las credenciales de correo electrónico en el mismo archivo. Pero no creo que sea una manera limpia de hacerlo en Django. Así que finalmente lo descubrí. Independientemente de si su máquina tiene 32 o 64 bits. Solo haga los siguientes pasos:
Instalar boto
instalación de pip --upgrade boto
Instalar django-ses
pip instala django-ses
En su archivo djando settings.py, actualice la siguiente información.
EMAIL_BACKEND = ''django_ses.SESBackend''
AWS_ACCESS_KEY_ID = ''your_username''
AWS_SECRET_ACCESS_KEY = ''su_contraseña''En su archivo django donde desea enviar un correo electrónico
de django.core.mail import send_mail
send_mail (''Sujeto de prueba'', ''Este es el cuerpo'', ''[email protected]'', [''[email protected]''], fail_silently = False)
http://aws.amazon.com/articles/2405502737055650
muestra de la funcionalidad core python