Search code examples
pythondjangosmtpamazon-web-servicesamazon-ses

Amazon SES SMTP with Django


I'm trying to use Amazon's new SMTP service for SES with Django 1.3.1 but I'm not having much luck.

I've created my SES SMTP credentials and have this in my settings:

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

Then I try sending a test email (from and to verified email addresses):

from django.core.mail import send_mail

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

But I get the following error:

SMTPServerDisconnected: Connection unexpectedly closed

I can telnet to the server:

telnet email-smtp.us-east-1.amazonaws.com 465

Solution

  • I found a much simpler solution that would allow me to use Django's built-in mail classes so I can still get my admin error email reports etc.

    Thanks to this little beauty I was able to use SES SMTP without any problems:

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

    Download and install (python setup.py install)

    Then just change your settings to use this new email backend:

    EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
    

    The rest of the settings are as per normal:

    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