cmail
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".
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
- cmail-imapd Basic implementation (2019)
- 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
- cmail-smtpd for receiving incoming mail
- cmail-popd or cmail-imapd for access to mailboxes
- Optionally: cmail-api and cmail-webadmin for easier administration
- Optionally: cmail-api and cmail-webmailer for web access to mailboxes
Send-only server
This use case might be better served by
nullmailer.
Using cmail, you'd need
- cmail-smtpd for accepting originated mail
- cmail-dispatchd for delivering the outbound mail
- Optionally: cmail-api and cmail-webadmin for easier administration
Full-feature send- and receive-server
This setup involves the following modules
- cmail-smtpd for receiving incoming mail
- cmail-popd and/or cmail-imapd for access to mailboxes
- cmail-dispatchd for delivering the outbound mail
- Optionally: cmail-api and cmail-webadmin for easier administration
- Optionally: cmail-api and cmail-webmailer for web access to mailboxes
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 devel@cmail.rocks, 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
- Coverity Scan: