Python SMTP Servers and Clients
http://python.readthedocs.org/en/latest/library/smtpd.html - Python 3.5
https://docs.python.org/2/library/smtpd.html - Python 2.7
https://docs.python.org/2/library/smtplib.html
https://docs.python.org/2/library/poplib.html
https://docs.python.org/2/library/imaplib.html
https://docs.python.org/2/library/email-examples.html
http://en.wikibooks.org/wiki/Python_Programming/Email
SMTP Server Examples
http://bip.weizmann.ac.il/course/python/PyMOTW/PyMOTW/docs/smtpd/index.html
http://pymotw.com/2/smtplib/index.html
https://github.com/bcoe/secure-smtpd
https://github.com/kennethreitz/inbox.py
https://github.com/matrixise/dsmtpd/blob/master/dsmtpd/_dsmtpd.py
SMTP Server Implementations
Twisted Mail
http://twistedmatrix.com/trac/wiki/TwistedMail
Twisted Mail contains high-level, efficient protocol implementations for both clients and servers of SMTP, POP3, and IMAP4. Additionally, it contains an "out of the box" combination SMTP/POP3 virtual-hosting mail server. Also included is a read/write Maildir implementation and a basic Mail Exchange calculator (depends on Twisted Names).
http://twistedmatrix.com/documents/current/mail/examples/
https://launchpad.net/txmailserver
See PythonTwisted
Bonzo
https://bonzo.readthedocs.org/en/latest/
Bonzo is a Python SMTP Server using the asynchronous network library of PythonTornado. And it’s actually a port of Python’s smtpd module.
https://pypi.python.org/pypi/bonzo
https://github.com/puentesarrin/bonzo
http://puentesarr.in/bonzo-minimalistic-python-smtp-proxy/
pymta
https://www.schwarz.eu/opensource/projects/pymta/docs/html/
pymta is a library to build a custom SMTP server in Python
From: http://www.schwarz.eu/opensource/projects/pymta/docs/html/
pytma uses multiple processes to handle more than one connection at the same time. In order to do this in a platform-independent manner, it utilizes the multiprocessing module.
The basic SMTP program flow is determined by two state machines: One for the SMTP command parsing mode (single-line commands or data) in the SMTPCommandParser and another much bigger state machine in the SMTPSession to control the correct order of commands sent by the SMTP client.
The PythonMTA is the main server component which listens on a certain port for new connections. There should be only one instance of this object. When a new connection is received, the PythonMTA spawns WorkerProcess? (if you have the multiprocessing module installed) which triggers a SMTPCommand parser that handles all the SMTP communitcation. When a message was submitted successfully, the new_message_accepted() method of your IMessageDeliverer will be called so it is in charge of actually doing something with the message.
You can instantiate a new server like that:
from pymta import PythonMTA, BlackholeDeliverer if __name__ == '__main__': # SMTP server will listen on localhost/port 8025 server = PythonMTA('localhost', 8025, BlackholeDeliverer()) server.serve_forever()
Shicks
http://p-nand-q.com/download/shicks/index.html
http://p-nand-q.com/download/shicks/manual.html
Lamson
Getting old ... 2013 ?
https://pypi.python.org/pypi/lamson/