2011-12-20 37 views
22

Estoy tratando de usar el nuevo servicio SMTP de Amazon para SES con Django 1.3.1 pero no estoy teniendo mucha suerte.Amazon SES SMTP con Django

que he creado mis credenciales SMTP SES y tener 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 

Entonces intente enviar un mensaje de prueba (desde y hacia verificados direcciones de correo electrónico):

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

+2

podría estar relacionado con Amazon no apoyar start_tls. "Actualmente, la interfaz Amazon SES SMTP requiere el protocolo Handshake y no es compatible con STARTTLS. Admitimos SSL 3.0 y TLS 1.0". Vea la discusión aquí [enlace] (https://forums.aws.amazon.com/thread.jspa?threadID=82510&tstart=0&start=0) – mtnpaul

+0

¿Usted miró este [artículo] (http://hmarr.com/2011/jan/26/using-amazons-simple-email-service-ses-with-django /). – mtnpaul

+0

@mtnpaul gracias, pero este artículo no es para SMTP. Específicamente quería usar el protocolo SMTP. Pero parece que el problema está relacionado con el hecho de que TLS no es compatible, aunque lo mencionen en la consola. – GivP

Respuesta

25

Gracias a todos por las recomendaciones pero finalmente he encontrado una solución mucho más simple que me permitiera usar Django incorporado en las clases de correo, así que todavía puede tener en mis informes de correo electrónico de administrador de error 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 (configuración de python.py instalar)

A continuación, sólo cambiar la configuración para utilizar este nuevo backend de correo electrónico:

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' 

El resto de los parámetros son con normalidad:

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 

Niza.

G

+0

Dado que usa un servidor back-end SSL, ¿realmente necesita establecer EMAIL_USE_TLS = True? – mtnpaul

+0

No lo he intentado, para ser honesto. Hará la prueba. – GivP

+0

Configuración EMAIL_USE_TLS = False no hace la diferencia. – bobc

5

después de buscar mucho, mucho y tratando que encontré:

lugar usando:

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) 

Por lo tanto, creo que, por Django usted puede fijar django código, o escribir es el propietario sencilla backend de correo electrónico [basado en Django por defecto de correo electrónico backend].

UPD:

he encontrado otra solución (pero no se probó por mí): utilizar SSLEmailBackend del siguiente enlace

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

(A partir de aquí: Mysterious issue with Django + uWSGI + send email)

UPD2 :

AmazonSES admite STARTTL S a partir de ahora :)

Amazon SES supports expanded attachment types, VERP, and STARTTLS for SMTP

(de Amazon Newsletter)

+0

No estoy seguro de qué es lo que lo respalda, pero no viene con Django recién sacado de la caja. Ver mi solución similar a continuación. – GivP

+0

¡Se ve bien!) – vsvasya

+1

(Además, se me olvidó mencionar la hermosa aplicación django-ses :)) – vsvasya

0

Me tomó como 3 horas rompiendo la cabeza sobre ella. 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. Sólo hacer los siguientes pasos:

  1. Instalar boto

    pip install --upgrade boto

  2. Instalar django-ses

    pip install django-ses

  3. En el archivo djando settings.py actualizar la siguiente información.

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

  4. En el archivo de Django en la que desea enviar un correo electrónico

    from django.core.mail import send_mail
    send_mail('Test subject', 'This is the body', '[email protected]',['[email protected]'],fail_silently=False)

Cuestiones relacionadas