A Development SMTP Server for Testing

I needed a development SMTP server that I could use for testing with Microsoft Outlook, which would save the e-mails in a folder so I could go back to them.  I was already aware of python -m smtpd -n -c DebuggingServer localhost:25, but this solution allows me to open the results in Outlook.

I use this with Cygwin on Windows.

import smtpd
import asyncore
import io
import uuid
import os

class FileSMTPServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        f_name = os.path.join('mailroot', str(uuid.uuid4()) + '.eml')
        with open(f_name, "w") as out_file:
            out_file.write(data)
            

if not os.path.isdir('mailroot'):
    os.mkdir('mailroot')
    
print("Development SMTP Server Listening on Port 25")
server = FileSMTPServer(('127.0.0.1', 25), None)

asyncore.loop()

Save it as smtp-test-server.py, and run it with python smtp-test-server.py.  It’ll create a folder called mailroot which will store each e-mail with a unique ID.

Note that you’d need to run this with sudo on Linux, or change the port number (port 25 in this example) to one above 1024.