python django smtp amazon-web-services amazon-ses

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)



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:

  1. Instalar boto

    instalación de pip --upgrade boto

  2. Instalar django-ses

    pip instala django-ses

  3. 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''

  4. 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)