I frequently have to send emails from web applications. But before I deploy to a production environment, I want to make sure the mechanism works and the right mails are constructed. Here’s two ways to do that.
Monkey patching the Zope MailHost
When developing a Zope based application, the
package can really help you out. By including this package in your
setup, the Zope
MailHost class is patched so no actual emails are
sent. Instead the content of email is printed to the standard output.
But when working on a Django application (or any other non Zope
project) there is no
MailHost class that can be monkey
smtpd module to the
rescue. The first step is to configure the application to use
localhost as the SMTP server on a random port (say: 1025). Next, go to
the command line and type:
python -m smtpd -n -c DebuggingServer localhost:1025
Just like the PrintingMailHost, this SMTP server prints the emails to standard output. For more information see the “Testing e-mail sending” section in the Django documentation.
mail_debugmanagement command. This commands starts the same SMTP debugging server, but you don’t have to remember the right incantation.
Somewhat related to this: if you want to test your application against an HTTP server, you can use this command:
python -m SimpleHTTPServer
The SimpleHTTPServer module can be used to get server up-and-running quickly. It can also be a simple way to, for instance, copy files from one machine to another. By running the HTTP server in the directory containing the files, you can access the files via your browser on another machine. Safe? No. Convenient? Yes.