Apache James
The Apache Software Foundation

About

James stands for Java Apache Mail Enterprise Server!
It has a modular architecture based on a rich set of modern and efficient components which provides at the end complete, stable, secure and extendable Mail Servers running on the JVM.

Create your own personal solution of emails treatment by assembling the components you need thanks to the Inversion of Control mail platform offered and go further customizing filtering and routing rules using James Mailet Container.

James from a technical point of view

Complete portability (100% pure JVM: Java & Scala)
Built with Java 11 and running on the Java RE 11.

James Components:
- Emailing protocols: SMTP, LMTP, POP3, IMAP, ManageSieve, JMAP
- Mailet container: independent, extensible and pluggable email processing agents
- Storage API: Mailbox API / Search API / User API
- Storage Implementations: Cassandra / PostgreSQL / HSQLDB / MySQL / OpenSearch...
- Administration: JMX / REST / Command Line
- James Core



Your James server can also be used as Mail Transfer Agent, by enabling only SMTP or as a IMAP Mail Delivery Agent.

james general architecture using james as smtp relay using james as an imap server

Click here to see how-tos for some James features

James is a living Open Source project (all developments and implementations are based on open technical standards), any function which is not already available from can be developed!

Get Started With James

Get Started With the official binaries

  • DOWNLOADS:
    The Apache James project wires together the different libraries composing James to provide a running services, ready to download on the Apache mirrors. See our download page.

    Follow our installation guide.

Get Started With James And Docker

  • WHAT WILL YOU TRY:
    Here you will try James server version 3.8.1 thanks to an image. This James image has a default configuration using JPA (hsqldb) and Lucene. It also includes a default domain named james.local and three default users: user01@james.local, user02@james.local, user03@james.local, with their default password being 1234.
    Note: this James server will respond to IMAPS port 993 and SMTPS port 465.
  • STEPS YOU HAVE TO FOLLOW:
    Pull and run the James image with the following single command:

    docker run -p "465:465" -p "993:993" apache/james:demo-3.8.1

    Then, connect this image with for instance, Thunderbird. This tutorial covers more in depth user and domain creation, as well as thunderbird setup.
  • ALTERNATIVES:
    Instructions that do not imply docker are also available here.
  • BETA: Distributed James server
    Recent work of the Apache James project did lead to a James product that leverages a distributed mail server, using storage technologies like Cassandra, OpenSearch, RabbitMQ, and objectStorage (S3/Swift).

    Feedback on this product, announced as a beta since 3.5.0 is welcome.

    This product can be executed via docker-compose or you can follow its standard installation guide

Roadmap

  • MAIN GOALS
    • Providing a distributed mail server, fully horizontally scalable.
    • Maintaining a standalone version suitable for a single server, based on JPA.
  • INCOMING WORK
    • Rework our documentation with Antora, specify it on a per-server basis for ease of use. Preview...
      We will furthermore target servers to identified use cases, formulated in non technical terms: Basic Server, Advanced Server and Distributed Server.
    • Promote guice based applications.
      Spring server will be deprecated. A summary of community call describing this item can be found here.

      Guice adoption schedule:
      1. Promote Guice artifacts on the download page as part of 3.7.0
      2. Deprecate Spring artifact as part of 3.8.0
      3. Remove Spring artifact as part of 4.0.0
    • Continue improving JMAP RFC-8621 support. See this JIRA for some further possible developments
    • Feel free to add your own items here: see Contribute.

Last Posts

Community

Apache James Project is an Open Source all-volunteer project obtaining its strength from its Community made of developers and users. All are welcome to the Community!
That way, we recommend that Users, Developers, Curious and Fans join the James Community.

  • Mailing list:
    Subscribe to the appropriate Mailing Lists according to your interests and your profile.
    Mail guidelines explain you more precisely how it works.
  • Gitter chat room:
    Chat in live with the community on Gitter chat room.
  • Twitter:
    Express yourself and follow us @ApacheJames.
  • Download Apache James releases:
    Our download page allows you to download artifacts and sources for the James Server and James libraries.
  • Professional support:
    Find a list of companies which can provide you some support on James.

Contribute

James is a project that lives from the contributions of its community.
Anyone can contribute! That's right, we always want to hear from people with contributions to the code, the documentation, the website, and bug reports. We more than welcome non-coding contributions.
Here are different ways to contribute:

  • Licenses:
    All contributions to the James project are made under the Apache license 2.0
  • Join the community:
    We more than welcome articles and blog posts about James.
    Contact us by email or on Gitter to share your experiences.
    Don't hesitate to promote the Apache James project on your preferred medias.
  • Report bugs:
    You can here enter bug encountered, share your point of view about a specific feature or anything else...
    Each subproject has its own bug tracker. Go to James Server project bugtracker.
    For other projects click on the appropriate links mentioned in the concerned subproject. Finally, create your issue.
  • Documentation:
    Documentation is an easy way to get on board!
    Check out the ~documentation label on JIRA to get some ideas.
    Report on JIRA the typo you spots, the information you miss, and any improvement you can think to.
    The next step is to contribute the documentation changes via Git.
  • How to contribute code changes:
    Read our sources from the Apache Git.
    You can also come and interact with us on GitHub and share your work by creating a pull request.
    Alternatively, you can attach a patch to the JIRA issue.
    After a review, and exchanges with you, an Apache James developer will integrate the changes once it matches our policies.
  • What contributions can you do:
    We reference some easy tasks to start with : ~newbie
    We have a collection of minor fixes awaiting contributions: ~easyfix
    Challenge yourself with some cool features we thought to: ~feature
    Additional ideas are more than welcome. Don't hesitate to discuss that with us!
  • Reporting security vulnerabilities:
    Security: Vulnerabilities should be announced to the Apache Security team.
    PMCs will be notified about them, and will work hard to propose fixes as fast as possible.
  • Additional information:
    The contribute page contains more details about the various details exposed above.
    To match the quality expectations of our community, we enforce coding standards. We rely on checkstyle for style checking.

James use-cases

At LINAGORA, we chose JAMES as the Mail Delivery Agent of our  OpenPaaS product:

  • For easy administration of email load balancing and high availability
  • To allow email interactions with the platform
  • To use the JMAP protocol (the browser interacts directly with the mail server)

Our deployment currently allows serving a hundred users over JMAP, SMTP and IMAP.

Some statistics...

  • Contributors
  • Last year commits
  • Forks
  • Stars

...and contributors