If you are setting up a web application on your own computer you sometimes need a simple mail server that just lets you view emails, for example for a password reset mail. This article lists several solutions to quickly set up a test mail server.
The easiest way is to use Python’s built-in smtpd module. You can start a SMTP server that simply prints the received messages with this command:
$ python -m smtpd --nosetuid --class DebuggingServer
That opens a SMTP server on port 8025, and simply prints messages that look like this:
---------- MESSAGE FOLLOWS ---------- To: firstname.lastname@example.org From: Sjoerd Langkemper <email@example.com> Subject: Test message Message-ID: <firstname.lastname@example.org> Date: Sun, 27 Jan 2019 14:34:19 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: nl X-Peer: 127.0.0.1 Hello world ------------ END MESSAGE ------------
A more modern SMTP module is aiosmtpd, which can be run to print email messages with the following command:
$ python -m aiosmtpd -n
The modern aiosmtpd is prefered over the deprecated smtpd. The only disadvantage is that you have to install it, whereas smtpd comes bundled with Python.
MailSlurper is a tool programmed in Go that opens a mail server and shows all mails through a web interface. The ports it uses are specified in a configuration file,
config.json. It is pretty straightforward and easy to use, and it handles HTML emails better than the Python solution described above.
Using application configuration
If you are using a .NET application, you can configure mail to be stored in a specific directory instead of being sent out over SMTP. Using the specifiedPickupDirectory directive you can configure the directory to store your mails in.
Similarly, for Django there is a console email backend. Putting the following in the settings.py will display emails on the console instead of sending them:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
These tools set up a temporary email server on your own computer:
These services provide a cloud-based email server for testing purposes:
You can have your own mail server running within minutes, making it possible to test password resets and other functionality that sends email without using your actual mail server.