MailDiode

What is it?

MailDiode is an SMTP daemon that accepts incoming email and delivers it to maildirs.

Where can I get it?

A gem is available: gem install maildiode, or you can download it from RubyForge.

Why another SMTP server?

Because all the others I have found are either too hard to configure, or are written in insecure languages (C).

SMTP servers like sendmail, postfix, and exim serve two completely different purposes:

It turns out that handling outgoing mail is really hard, while handling incoming mail is really simple. So MailDiode handles incoming mail and not outgoing mail.

Who might use MailDiode?

Someone who wants to run their own incoming email server, and who can rely on some other server to handle outgoing mail. Or perhaps someone who runs both incoming and outgoing mail servers, but realizes that allowing each daemon to handle one specific task is simpler and (hopefully) more secure than having one service try to handle both.

What is the status of MailDiode?

As of 2008-12-08 it is in late alpha/early beta test. That is, I am using it for some of my own production email, and amd interested in feedback from other people. There are no known bugs, but I'm sure there are some in there.

When you say "simple", what do you mean?

MailDiode supports virtual domains, aliasing, and greylisting. Here is a sample config file demonstrating all those features:
#debug warn # error warn info debug

server hostname localhost
server ip 0.0.0.0
server port 10025
server maxconnections 20
#server user maildiode

maildir bob@example.com /home/bob/mail
maildir kevin           /home/kevins/TestMail/main/
maildir catchall        /home/kevins/TestMail/other/

plugin alias
alias kevin     ^kevin@qualitycode.com$
alias kevin     ^kevins@qualitycode.com$
alias catchall 	@qualitycode.com$
alias catchall  @example.com$

plugin blacklist
blacklist to	\d{6,}.*@qualitycode.com$

plugin delay
delay helo 5
delay mail 6
delay rcpt 7

plugin greylist
greylist delayminutes 5

The first section has general information about the server. The second section sets up two maildir destinations, each identified by an arbitrary string. (These could be local accounts, full email addresses, or anything else). The alias section uses regular expressions to create multiple aliases and "catchall accounts" that route to the destinations set up in the earlier section. The rest of the file is used to configure any optional plugins.

That's it. Simple.