gsmtpd
======


.. image:: https://travis-ci.org/34nm/gsmtpd.svg?branch=master

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

.. code-block:: python

    from gevent import monkey
    monkey.patch_all()

Example
-----------------

.. code-block:: python
    
    from gevent import monkey 
    monkey.patch_all()
    
    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 asyncIO based smtpd in Python standrary lib.

.. note::

    Response per second = 0 means the program is crashed or refuse to connect



.. figure:: https://raw.githubusercontent.com/34nm/gsmtpd/master/helo_chart.png
    :scale: 100%

.. figure:: https://raw.githubusercontent.com/34nm/gsmtpd/master/mail_chart.png
    :scale: 100%


.. _Doc: http://gsmtpd.readthedocs.org
