I think I may soon look for another mail server to replace Apache James. Right now I am using 2.3.2, which will someday be obsolete. I downloaded the new version, 3.0-M2. It looks like Apache James may no longer be a mail server that can be used by “retail users”. I am running it on a VPS account with 512 MB of memory.
The new version has IMAP. It also uses OpenJPA and Spring (before it was using some other Dependency Injection framework from another Apache project that almost nobody else used). It can be managed via JMX. The project seems to be geared towards the “Enterprise”. James 2 uses ~60 jar files. James 3 uses about 125.
I ran James 3 on my desktop to see if I could port my admin web app to James 3. Unlike James 2, James 3 does not create the tables upon startup. I emailed the list and I was told that I would have to add some users or domains in order to create tables. I was told via the email list that I could add a user via JMX or the remote manager (which I just do not like).
So I started James 3, and then I started jconsole. I was able to connect to James via jconsole. But I was not clear on what to do after that. For example, I saw a screen for adding a user. But the parameters on the form/screen are labelled “p1”, “p2” and “p3”. I assumed having worked with James 2 that they would be username, encrypted password, and encryption algorithm, but it would be nice if jconsole was clearer on this. I tried adding a user. I put “SHA-256” in the last field, and I got an exception message telling me “user repository does not exist: SHA-256”. Looking in other windows, I found that there is a repository called “LocalUsers”. I tried that and got a message about java.rmi.UnmarshalException. So I decided to stop at that point.
Then I tried the remote manager. I really do not like the remote manager. I do not like having unnecessary services and ports open. But I thought that until I get some tables created I have no choice. I logged in, and I tried a few commands. I tried adding a user a couple of times and adding a domain. Each time the remote manager hung, and I had to kill James. I could run the commands to list users and domains. The only command that returned any information was the command to list domains, but it only listed the domains that I put in the domainslist.xml file. So no tables were created.
So I think I will start looking for another email server. Perhaps I will try to write one myself in Groovy. I have started looking into Groovy and Grails again recently. I would rather run something myself than use GMail.
Image from Wikimedia, assumed allowed under Fair Use. Image from the Vatican Virgil, a 5th century manuscript of poems by Virgil.