
Goals of TurboMail
==================

TurboMail is about making sending emails easy. One part of that is constructing
email.Message objects with a simple API. This API is designed to cover the 
easy use cases (which are by far the majority) so your code can be significantly 
shorter and easier to read than doing it 'the hard way' by using
Python's built-in email module. But sometimes you really need the full power of 
RFC 2822. Then you can always use Python's email module (or another library)
and ignore TurboMail's message object. TurboMail can still help you sending the
actual message.

TurboMail is *not* a MTA like Exim, Postfix, sendmail or qmail. It is designed
to deliver your messages to a real mail server ("smart host") which actually
delivers them to the recipient's server. TurboMail does only use an in-memory
queue so there is no persistent queue storage which is absolutely crucial for a
real MTA. Theoretically you could extend TurboMail so that it behaves like a 
real MTA but this is not something we will build in the near future [#]_.

We hope that this got you a better idea what TurboMail is about and what tasks
leaves to other software. In the next section we'll show you a high level view
over TurboMail's different components.

.. [#] Fortunately, there are some free libraries to build an SMTP server on
       the internet, e.g. `Python's smtpd <http://docs.python.org/library/smtpd.html>`_ 
       (extremly simple to use, but messy code, not extendable), 
       `Twisted Mail <http://twistedmatrix.com/trac/wiki/TwistedMail>`_ 
       (probably the most featureful SMTP server implementation available for 
       Python, uses the twisted framework which can be either a huge advantage 
       or disadvantage, depending on your point of view), and
       `pymta <http://www.schwarz.eu/opensource/projects/pymta/>`_ (mostly a 
       proof of concept, but highly customizable). Besides these libraries there
       is `tmda-ofmipd <http://tmda.svn.sourceforge.net/viewvc/tmda/trunk/tmda/bin/tmda-ofmipd?revision=2194&view=markup>`_
       (extended version of Python's smtpd, supports TLS, messy code, only 
       available as a part of a bigger package).


Architecture and Components
===========================

Message class

The actual mail delivery is done by two components: Managers and transports.
*Managers* don't deliver the messages themselves. They have a strategy when to
hand over a message to a transport. *Transports* actual deliver messages they
get. Each transport is specialized on a specific transport mechanism (e.g.
SMTP or mailbox delivery to the filesystem).

