The James Server

James is an open source project intended to produce a robust, flexible, and powerful enterprise class server that provides email and email-related services. It is also designed to be highly customizable, allowing administrators to configure James to process email in a nearly endless variety of fashions.

The James server is built on top of the Avalon Framework. The standard James distribution deploys inside the Phoenix Avalon Framework container. In addition to providing a robust server architecuture for James, the use of Phoenix allows James administrators to deploy their own applications inside the container. These applications can then be accessed during mail processing.

The James server is implemented as a complete collection of servers and related components that, taken together, provide an email solution. These components are described below.

POP3 Service

The POP3 protocol allows users to retrieve email messages. It is the method most commonly used by email clients to download and manage email messages.

The James version of the POP3 service is a simple and straightforward implementation that provides full compliance with the specification and maximum compatibility with common POP3 clients. In addition, James can be configured to require SSL/TLS connections for POP3 client connecting to the server.

More information on configuring the POP3 service can be found here.

SMTP Service

SMTP (Simple Mail Transport Protocol) is the standard method of sending and delivering email on the internet. James provides a full-function implementation of the SMTP specification, with support for some optional features such as message size limits, SMTP auth, and encrypted client/server communication.

More information on configuring the SMTP service can be found here.

NNTP Service

NNTP is used by clients to store messages on and retrieve messages from news servers. James provides the server side of this interaction by implementing the NNTP specification as well as an appropriate repository for storing news messages. The server implementation is simple and straightforward, but supports some additional features such as NNTP authentication and encrypted client/server communication.

More information on configuring the NNTP service can be found here.

FetchMail

FetchMail, unlike the other James components, is not an implementation of an RFC. Instead, it's a component that allows the administrator to configure James to retrieve email from a number of POP3 servers and deliver them to the local spool. This is useful for consolidating mail delivered to a number of accounts on different machines to a single account.

More information on configuring FetchMail can be found here.

The SpoolManager, Matchers, and Mailets

James separates the services that deliver mail to James (i.e. SMTP, FetchMail) from the engine that processes mail after it is received by James. The SpoolManager component is James' mail processing engine. James' SpoolManager component is a Mailet container. It is these mailets and matchers that actually carry out mail processing.

More on the structure of the SpoolManager and the Mailet API can be found here.

Repositories

James uses a number of different repositories to both store message data (email, news messages) and user information. User repositories store user information, including user names, authentication information, and aliases. Mail repositories store messages that have been delivered locally. Spool repositories store messages that are still being processed. Finally, news repositories are used to store news messages. Aside from what type of data they store, repositories are distinguished by where they store data. There are three types of storage - File, Database, and DBFile.

RemoteManager

James provides a simple telnet-based interface for control. Through this interface you can add and delete users, configure per-user aliases and forward addresses, and shut down the server.

More on the configuring the RemoteManager can be found here.