A Few Words On Apache James

One of the applications that I will run on this site is the Apache James email server. One of the reasons I am using this is because it is written in Java, so it helps fulfill the site’s mission of promoting Java.

Briefly, I will discuss what James is, why I have decided to use it, and then a few words on how I will configure it and what my plans are.

James is an email and news server written in Java. It runs within Apache Avalon, which from what I can gather is some sort of a container or kernel, similar to Pico Container, Tomcat or Spring. Avalon has been dropped as an Apache project and absorbed within Apache Excalibur. There are references in the file names, scripts and documentation to “Phoenix”, which appears to be some sort of code name for Avalon, just as Catalina is a code name for Tomcat.

The configuration is handled by a (very large) xml file. James can handle SMTP and POP protocols. It can be configured to store emails and user information either in a database, or on a filesystem.

I have run a few other domains on VPS servers as practice. A lot of the users opted to use Google Mail or a third-party email provider,  like FastMail or HushMail. I decided to run a mail server myself, although I may wind up regretting that.

Another reason that I chose James is that it can handle SMTP and POP. SMTP is used to send emails from one email server to another. POP is used by client applications (such as Columba, Thunderbird or Outlook) to read email on a server. There is also another protocol to retrieve mail called IMAP, but I did not have any interest in that.

Looking around, I noticed that not all email servers were able to handle both sending and retrieving. I only wanted to configure one server. There is one called Courier, but I was a put off  by some of the documentation. I found a few web pages with titles like, “Configuring an Email Server with Postfix AND Courier AND Amavis  AND ClamAV AND SpamAssassin AND MySQL blah blah blah etc etc”. That sounds like more that I wanted to handle. It turns out that James can be difficult to configure, but only dealing with one server just suits me better.

A lot of the servers that did both protocols either did not run on Linux, were proprietary (yes, there is proprietary software that runs on Linux), or was part of a collaboration or groupware suite with lots of stuff I did not want (like calendaring or scheduling). There was another Java email server called the “Java Email Server”, but I was not able to get that to run as a service via a script on /etc/init.d. Either I would have to hit Control-C or run a “kill” command. I could have tried using the Java wrapper from Tanukisoft, but once again I wanted to just use one thing.

I plan on writing about how I am going to install and configure James. There is a quick start guide on Apache’s site, that I will wind up parroting at first. It is easy to get a James server running that receives emails via SMTP, and can allow a client to read them via POP and to store information on the filesystem. Setting it up to handle SMTP authentication or send email to non-existent users to the database takes more configuration. Beyond that, the documentation is pretty scattered in wikis, web pages and the mailing list. Granted, putting more stuff on yet another blog might make that worse, but at least things should go in a linear fashion. I will also reference the default config.xml file as I go forward and make changes.


2009-02-15 23:49:37 Sunday CST -0600

Image from Physiologus Bernensis, a manuscript made in Reims around 830.  The manuscript is at Burgerbibliothek of Berne  (Wikipedia page here), image from e-Codices, assumed allowed under Fair Use.