gsmtpd
SMTP servers impletement base on Gevent
Install
pip install gsmtpd
Usage
Basically gsmtpd is ported from Python standard lib smtpd, you can it check from Doc
however there is only one difference, you should add monkey patch of gevent
from gevent import monkey
monkey.patch_all()
Example
from gevent import monkey
monkey.patch_all()
from gsmtpd.server import SMTPServer
class DebuggingServer(SMTPServer):
# Do something with the gathered message
def process_message(self, peer, mailfrom, rcpttos, data):
inheaders = 1
lines = data.split('\n')
print '---------- MESSAGE FOLLOWS ----------'
for line in lines:
# headers first
if inheaders and not line:
print 'X-Peer:', peer[0]
inheaders = 0
print line
print '------------ END MESSAGE ------------'
if __name__ == "__main__":
server = DebuggingServer()
server.serve_forever()
Performance
The charts below shows gsmtpd vs asyncore based smtpd in Python standrary lib.
Note
Response per second = 0 means the program is crashed or refuse to connect