Test sending email without email server
I have a Django application that sends an email. The production server has an email server but my local box does not. I would like to be able to test sending of email locally. Is there any way that I can have django not send it through the email server and just print out to a file or console?
You can configure your application to use the Console Backend for sending e-mail. It writes e-mails to standard out instead of sending them.
Change your settings.py to include this line:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Don't forget to remove it for production.
Python has a little SMTP server built-in. You can start it in a second console with this command:
python -m smtpd -n -c DebuggingServer localhost:1025
This will simply print all the mails sent to localhost:1025
in the console.
You have to configure Django to use this server in your settings.py
:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
You can configure your application to write emails out to temporary files instead of sending them (similar to Daniel Hepper's answer).
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = 'tmp/email-messages/'
This saves each new message as a separate file. Useful if you are sending heaps of emails, and don't want to have to use the scrollback.