Overview of mailjam's architecture
==================================

.. contents::

Introduction
------------

Mailjam has been designed following a **multi-component structure**. There is 
**a daemon** that manage the mailing lists and members information in a storage
backend and there are **different kinds of clients** (currently, three of them)
that **interact with the daemon using a XMLRPC link**.

This is the scheme of the architecture:

.. image:: /mailjam_architecture.png
   :alt: Scheme of the architecture behind Mailjam
   :class: open_fancybox


.. _overview_mailjam_daemon:

Mailjam daemon
--------------

The daemon will perform all the operations regarding the management of the
mailing lists and members. The daemon will save information of a given 
mailing list to the storage backend, and will read information of already
saved lists from there too.

It listens for incoming XMLRPC requests on a given tcp port, allowing clients
to add/update/delete data from the backend.

.. _overview_mailjam_mta_client:

MTA client
----------

This client is attached to a given MTA, and is called but the MTA itself when
emails for a mailing lists are received. The client performs some checks on the
backend to tell the MTA what it has to do with the incoming emails.

.. _overview_mailjam_cli_client:

CLI client
----------

This is a shell-like interface that can be used to add mailing lists to a given
Mailjam server, edit such mailing lists information, add members, etc. 

.. _overview_mailjam_web_client:

Web client
----------

This is a small *webapp* that can be used to perform the same management 
operations you can achieve using the 
:ref:`CLI client<overview_mailjam_cli_client>`.
