Internet mail processing suite with SQLite backend

cmail is an implementation of multiple protocols to fulfill most, if not all functions commonly expected in internet message exchange - commonly known as "mail server".
Architecturally, cmail is split into several modules which interface through a central SQLite database (the master database). For most modules, a command-line administration tool is provided.
Read more about the system architecture in the architecture & development information section.

Interested in using cmail? Try our step-by-step installation guide and the accompanying upgrade guide.

Development Rationale

cmail was started out of resignation over the complexity involved in configuring and running many other MTAs. As such, the configuration file format is relatively simple and only affects the specifics of the module it is written for. For the most part the configuration files consist of directives specifying on which ports the module should provide its service.

The primary objective of the project is to provide an easy-to-setup, easy-to-configure and secure mail server for end-users that simply want to send and receive mails on their domains. Other use cases are, of course, supported, but not with as high a priority.

The common configuration, such as local addresses, routing decisions and user data are kept in the master database. This provides flexibility of reconfiguration without restarting the modules, as well as allowing for the use of a variety of interfaces to configure the server, such as the provided Web Panel or an SQLite database editor.

cmail was intentionally kept simple in terms of configuration as well as features. It might not support some features experienced administrators may be accustomed to out-of-the-box. Most of it can probably be enabled or emulated with sufficient thought, though.

Should that not be enough, you can extend cmail either by modyfing the purposely slim codebase or by interfacing with a (not yet implemented, but planned) internal API for modifying its behaviour with runtime-loaded shared libraries (plugins).

If cmail still does not meet your expectations after that, you might be better off using another MTA :)

Current state & coarse roadmap

As the main developers have transitioned from university into full-time jobs, development has slowed somewhat. However, multiple cmail systems are in full productive use and the architecture has proven to be very stable. The primary criticism so far is missing support for IMAP, which is in slow progress, both due to the aforementioned lack of time as well as the pecularities of the IMAP protocol.

The following coarse roadmap illustrates the progress we currently aim for

  1. cmail-imapd Basic implementation (2019)
  2. Initial public packaged release (2019)
This listing should not be taken at face value. Development pace is not easy to estimate, and features may be postponed because of lack of interest or more pressing issues.

For finer grained To-Do lists, check the individual module folders in the repository for files named TODO.

Common use cases

Receive-only server, mail is sent via external servers

The following modules are involved

Send-only server

This use case might be better served by nullmailer. Using cmail, you'd need

Full-feature send- and receive-server

This setup involves the following modules

Contributing & Contact

Our main development languages are C (daemons), PHP (API backend) and JavaScript/HTML (web interface). To get acquainted with the tools we use, our methodology, architecture and codebase, we have aggregated some resources on our architecture & development information page on this web site as well as within the repository.

cmail is distributed under the BSD 2-Clause license. Any contributors must agree to have their code placed under that same license.

Got some patches, ideas or questions? Submit pull requests or issues on github, send patches, requests or praise to, discuss ideas and experiences or subscribe to information via one of our other mailing lists or do all of those or simply hang around in our IRC channel - #cmail on freenode.


Badges, etc