Available packaging options

James components are assembled in various way, called packaging.

    The packaging you choose will influence:
  • Your java requirement
  • The protocol the mail server supports
  • The components you can use

Thus, one must carefully choose his packaging.

    To help you doing this, here is a list of available packages:
  • Spring: Allows you to choose across various available implementations for each component. Requires more configuration effort.
  • Cassandra-guice: Ships a James server storing emails in Cassandra and index them in ElasticSearch targeting single server deployment. Optional support for LDAP authentication.
  • Distributed: cassandra-rabbitmq-guice: Ships a James server storing emails in Cassandra and index them in ElasticSearch targeting multi node deployments. S3 is used to store blobs. RabbitMQ is used for inter-node messaging. Optional support for LDAP authentication.
  • Jpa-Guice: Ships a James server storing emails in a SQL database (derby by default) accessed with JPA and Lucene to index emails and targets single node deployment.
  • Jpa-Smtp: A tiny SMTP server shiped without mailbox, using SQL database to store data, accessed by JPA.

Note: Especially using Guice, one can easily define new modules for existing James components, as well as for third party code. Note that building your own combination of components will lead to an untested and unsupported server.

Support matrix

Packaging Spring Cassandra-guice Distributed Cassandra-rabbitMQ-guice Jpa-guice Jpa-smtp
IoC framework Spring Guice Guice Guice Guice
Docker image Not available. Contributions welcomed for JIB support. apache/james:cassandra-3.6.0 apache/james:distributed-3.6.0 apache/james:jpa-3.6.0 None
Supports SMTP Yes Yes Yes Yes Yes
Deployment model Single node Single node Multi node Single node Single node
Supports IMAP Yes Yes Yes Yes No
Supports JMAP No Yes Yes No No
Supports POP3 Yes Yes Yes Yes No
Supports FetchMail Yes No No No No
Supports CLI Yes Yes Yes Yes No
Supports WebAdmin No Yes Yes Yes Yes
Supports Grafana metrics (Prometheus) No Yes Yes Yes Yes
Mailbox implementation JPA/MailDir/Memory Cassandra Cassandra JPA JPA
Indexer implementation Lucene/None ElasticSearch ElasticSearch Lucene None
Server data implementation JPA/File JPA/File Cassandra Cassandra JPA JPA
Mail queue implementation ActiveMQ ActiveMQ RabbitMQ ActiveMQ ActiveMQ
Sieve Experimental Experimental Experimental Experimental No
User defined mailbox listener registration No Yes (master) Yes (master) Yes (master) No
Installation instructions Here Here Here Here Here

WARNING: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)

Docker matrix

Image name Deployment model General persistence Blob persistence Queue type Search Supported protocols
apache/james:distributed-3.6.0 Multi-node Cassandra S3 or Cassandra RabbitMQ ElasticSearch SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin
apache/james:jpa-3.6.0 Single node Embedded Derby database (JPA, SQL) Not applicable In VM Index Lucene on the filesystem SMTP, IMAP, POP3, LMTP, WebAdmin
apache/james:demo-3.6.0 Pre-provisioned Single node instance to ease project discovery Embedded Derby database (JPA, SQL) Not applicable In VM Index Lucene on the filesystem SMTP, IMAP, POP3, LMTP, WebAdmin
apache/james:memory-3.6.0 Single node for test purposes Memory (no persistence) Memory (no persistence) In VM Scroll on in memory data SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin
apache/james:cassandra-3.6.0 Single node on top of a shared database Cassandra Cassandra In VM ElasticSearch SMTP, IMAP, JMAP, POP3, LMTP, WebAdmin

WARNING: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)