Apache James

Last updated

Apache James
Developer(s) Apache Software Foundation
Stable release
3.8.1 / February 23, 2024;11 months ago (2024-02-23) [1]
Repository James Repository
Written in Java
Platform Java SE
Type Mail transfer agent
License Apache License 2.0
Website james.apache.org

Apache James, or Java Apache Mail Enterprise Server, is an open source SMTP and POP3 mail transfer agent written entirely in Java. [2] James is maintained by contributors to the Apache Software Foundation, with initial contributions by Serge Knystautas. [3] [4] IMAP support was added in 2010 in version 3.0-M2 (released as stable 3.0.0 in 2017), and JMAP support in version 3.6.0 in 2021. In 2021 open source company Linagora upgraded the government system providing email for every citizen of Estonia to use Apache James. [5] [6]

Contents


The James project manages the Apache Mailet API which defines "matchers" and "mailets". These allow users to write their own mail-handling code, such as to update a database, build a message archive, or filter spam. [2] A matcher is used to classify messages based on some criteria, and then determines whether the message should be passed to an appropriate mailet for processing. Mailets are so-called due to their conceptual similarity to a servlet, [7] and arose because Sun Microsystems declined a proposal to include mail-handling in the servlet implementation. [4] James ships with a variety of pre-written matchers and mailets to serve common tasks. [7] Many sets of mailets and matchers can be combined to produce sophisticated and complex functional behaviour.

The Apache James project also produces pure Java libraries for implementing Sender Policy Framework (SPF), the Sieve mail filtering language, and parsing MIME content streams, independent of Sun's JavaMail API.

Development

James was originally formed under the Jakarta Project as Jakarta-James. [4] In January 2003, James was upgraded to a top-level Apache project in a unanimous decision by the ASF Board of Directors, under the chairmanship of Serge Knystautas. James was initially distributed within the Phoenix container, which implemented the Apache Avalon application framework. [7]

After the closure of the Apache Avalon project in 2005, the Apache James server code was extensively reworked to use the Spring application framework, which was finally released as version 3.0.0 in 2017. [8] [9]

VersionReleasedNotes [9]
2.3.0October 2006
2.3.1April 2007
2.3.2August 2009 [8]
2.3.2.1September 8, 2015security fix
3.0.0July 20, 2017 IMAP support, draft JMAP support
3.0.1October 20, 2017security fix
3.1.0July 31, 2018
3.2.0November 14, 2018
3.3.0March 26, 2019
3.4.0September 5, 2019
3.5.0July 16, 2020Support for Docker, distributed configuration using Cassandra, ElasticSearch, RabbitMQ and S3 backends [10]
3.6.0March 16, 2021Java JRE 11 required, JMAP RFC-8621 support [11]
3.7.0March 1, 2022maildir support removed, support for OAuth, OpenID Connect, security and performance improvements [12]
3.8.0May 17, 2023Improved IMAP support, JMAP Quotas, OpenSearch [13]
3.8.1January 9, 2024security fix [14]

See also

Related Research Articles

The Jakarta Messaging API is a Java application programming interface (API) for message-oriented middleware. It provides generic messaging models, able to handle the producer–consumer problem, that can be used to facilitate the sending and receiving of messages between software systems. Jakarta Messaging is a part of Jakarta EE and was originally defined by a specification developed at Sun Microsystems before being guided by the Java Community Process.

<span class="mw-page-title-main">Jakarta EE</span> Set of specifications extending Java SE

Jakarta EE, formerly Java Platform, Enterprise Edition and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE with specifications for enterprise features such as distributed computing and web services. Jakarta EE applications are run on reference runtimes, which can be microservices or application servers, which handle transactions, security, scalability, concurrency and management of the components they are deploying.

<span class="mw-page-title-main">Jakarta Servlet</span> Jakarta EE programming language class

A Jakarta Servlet, formerly Java Servlet is a Java software component that extends the capabilities of a server. Although servlets can respond to many types of requests, they most commonly implement web containers for hosting web applications on web servers and thus qualify as a server-side servlet web API. Such web servlets are the Java counterpart to other dynamic web content technologies such as PHP and ASP.NET.

A web container is the component of a web server that interacts with Jakarta Servlets. A web container is responsible for managing the lifecycle of servlets, mapping a URL to a particular servlet and ensuring that the URL requester has the correct access-rights. A web container handles requests to servlets, Jakarta Server Pages (JSP) files, and other types of files that include server-side code. The Web container creates servlet instances, loads and unloads servlets, creates and manages request and response objects, and performs other servlet-management tasks. A web container implements the web component contract of the Jakarta EE architecture. This architecture specifies a runtime environment for additional web components, including security, concurrency, lifecycle management, transaction, deployment, and other services.

Jakarta Faces, formerly Jakarta Server Faces and JavaServer Faces (JSF) is a Java specification for building component-based user interfaces for web applications. It was formalized as a standard through the Java Community Process as part of the Java Platform, Enterprise Edition. It is an MVC web framework that simplifies the construction of user interfaces (UI) for server-based applications by using reusable UI components in a page.

<span class="mw-page-title-main">Apache Struts 1</span> Open-source web application framework

Apache Struts 1 is an open-source web application framework for developing Java EE web applications. It uses and extends the Java Servlet API to encourage developers to adopt a model–view–controller (MVC) architecture. It was originally created by Craig McClanahan and donated to the Apache Foundation in May 2000. Formerly located under the Apache Jakarta Project and known as Jakarta Struts, it became a top-level Apache project in 2005.

The Web Server Gateway Interface is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. The current version of WSGI, version 1.0.1, is specified in Python Enhancement Proposal (PEP) 3333.

<span class="mw-page-title-main">GlassFish</span> Application server project

GlassFish is an open-source Jakarta EE platform application server project started by Sun Microsystems, then sponsored by Oracle Corporation, and now living at the Eclipse Foundation and supported by OmniFish, Fujitsu and Payara. The supported version under Oracle was called Oracle GlassFish Server. GlassFish is free software and was initially dual-licensed under two free software licences: the Common Development and Distribution License (CDDL) and the GNU General Public License (GPL) with the Classpath exception. After having been transferred to Eclipse, GlassFish remained dual-licensed, but the CDDL license was replaced by the Eclipse Public License (EPL).

<span class="mw-page-title-main">Log4j</span> Java-based logging software

Apache Log4j is a Java-based logging utility originally written by Ceki Gülcü. It is part of the Apache Logging Services, a project of the Apache Software Foundation. Log4j is one of several Java logging frameworks.

Eclipse Jetty is a Java web server and Java Servlet container. While web servers are usually associated with serving documents to people, Jetty is now often used for machine to machine communications, usually within larger software frameworks. Jetty is developed as a free and open source project as part of the Eclipse Foundation. The web server is used in products such as Apache ActiveMQ, Alfresco, Scalatra, Apache Geronimo, Apache Maven, Apache Spark, Google App Engine, Eclipse, FUSE, iDempiere, Twitter's Streaming API and Zimbra. Jetty is also the server in open source projects such as Lift, Eucalyptus, OpenNMS, Red5, Hadoop and I2P. Jetty supports the latest Java Servlet API as well as protocols HTTP/2 and WebSocket.

The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web server through to an application server that sits behind the web server. AJP is a highly trusted protocol and should never be exposed to untrusted clients, which could use it to gain access to sensitive information or execute code on the application server.

The Spring Framework is an application framework and inversion of control container for the Java platform. The framework's core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE platform. The framework does not impose any specific programming model.. The framework has become popular in the Java community as an addition to the Enterprise JavaBeans (EJB) model. The Spring Framework is free and open source software.

<span class="mw-page-title-main">Apache Jena</span> Open source semantic web framework for Java

Apache Jena is an open source Semantic Web framework for Java. It provides an API to extract data from and write to RDF graphs. The graphs are represented as an abstract "model". A model can be sourced with data from files, databases, URLs or a combination of these. A model can also be queried through SPARQL 1.1.

<span class="mw-page-title-main">Apache CouchDB</span> Document-oriented NoSQL database

Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.

<span class="mw-page-title-main">Apache Sling</span> Java web framework

Apache Sling is an open source Web framework for the Java platform designed to create content-centric applications on top of a JSR-170-compliant content repository such as Apache Jackrabbit. Apache Sling allows developers to deploy their application components as OSGi bundles or as scripts and templates in the content repository. Supported scripting languages are JSP, server-side JavaScript, Ruby, Velocity. The goal of Apache Sling is to expose content in the content repository as HTTP resources, fostering a RESTful style of application architecture.

Jakarta RESTful Web Services, is a Jakarta EE API specification that provides support in creating web services according to the Representational State Transfer (REST) architectural pattern. JAX-RS uses annotations, introduced in Java SE 5, to simplify the development and deployment of web service clients and endpoints.

<span class="mw-page-title-main">Play Framework</span> Open-source web framework written in Scala

Play Framework is an open-source web application framework which follows the model–view–controller (MVC) architectural pattern. It is written in Scala and usable from other programming languages that are compiled to JVM bytecode, e.g. Java. It aims to optimize developer productivity by using convention over configuration, hot code reloading and display of errors in the browser.

The JSON Meta Application Protocol (JMAP) is a set of related open Internet Standard protocols for handling email. JMAP is implemented using JSON APIs over HTTP and has been developed as an alternative to IMAP/SMTP and proprietary email APIs such as Google's Gmail and Microsoft's MAPI . Additional protocols and data models being built on top of the core of JMAP for handling contacts and calendar synchronization are meant to be potential replacements for CardDAV and CalDAV, and other support is currently in the works.

References

  1. "GitHub tag: james-project-3.8.1". GitHub . Retrieved January 27, 2025.
  2. 1 2 James Server - Overview
  3. "James Project - Who We Are". Archived from the original on 2011-11-01. Retrieved 2008-02-22.
  4. 1 2 3 "Board of Directors Meeting Minutes". Apache Software Foundation. 2003-01-22. Retrieved 2008-02-23.
  5. "Apache James". Linagora. Retrieved January 27, 2025.
  6. "Highlight Track: Getting Apache James to serve 1M+ digital mailboxes of all Estonian residents". ApacheCon@Home. ApacheCon. September 21, 2021. Retrieved January 27, 2025.
  7. 1 2 3 Claude Duguay (2003-06-10). "Working with James". IBM. Archived from the original on 29 January 2008. Retrieved 2008-02-22.
  8. 1 2 "News Archive". Apache James Project. Retrieved January 27, 2025.
  9. 1 2 "Commit 59f8772: CHANGELOG.md". Apache James Project. July 17, 2024. Retrieved January 27, 2025 via GitHub.
  10. "Apache James Server 3.5.0". Apache James Project. July 16, 2020. Retrieved January 27, 2025.
  11. "Apache James Server 3.6.0". Apache James Project. March 16, 2021. Retrieved January 27, 2025.
  12. "Apache James Server 3.7.0". Apache James Project. March 21, 2022. Retrieved January 27, 2025.
  13. "Apache James Server 3.8.0". Apache James Project. May 17, 2023. Retrieved January 27, 2025.
  14. "Apache James Server 3.8.1". Apache James Project. January 9, 2024. Retrieved January 27, 2025.