blob: e47a6dd6ca83f494966b2b7a9150738f2e0748e8 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at 2021-11-12 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Apache James Project &#x2013; Apache James Server 3 - JMAP Configuration</title>
<style type="text/css" media="all">
@import url("../css/james.css");
@import url("../css/maven-base.css");
@import url("../css/maven-theme.css");
@import url("../css/site.css");
@import url("../js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
@import url("../js/jquery/css/print.css");
@import url("../js/fancybox/jquery.fancybox-1.3.4.css");
</style>
<script type="text/javascript" src="../js/jquery/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="../js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
<script type="text/javascript" src="../js/fancybox/jquery.fancybox-1.3.4.js"></script>
<link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
<meta name="Date-Revision-yyyymmdd" content="20211112" />
<meta http-equiv="Content-Language" content="en" />
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1384591-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body class="composite">
<div id="banner">
<a href="../index.html" id="bannerLeft" title="james-logo.png">
<img src="../images/logos/james-logo.png" alt="James Project" />
</a>
<a href="https://www.apache.org/index.html" id="bannerRight">
<img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
</a>
<div class="clear">
<hr/>
</div>
</div>
<div id="breadcrumbs">
<div class="xleft">
<span id="publishDate">Last Published: 2021-11-12</span>
</div>
<div class="xright"> <a href="../index.html" title="Home">Home</a>
|
<a href="../documentation.html" title="James">James</a>
|
<a href="../mime4j/index.html" title="Mime4J">Mime4J</a>
|
<a href="../jsieve/index.html" title="jSieve">jSieve</a>
|
<a href="../jspf/index.html" title="jSPF">jSPF</a>
|
<a href="../jdkim/index.html" title="jDKIM">jDKIM</a>
</div>
<div class="clear">
<hr/>
</div>
</div>
<div id="leftColumn">
<div id="navcolumn">
<h5>James components</h5>
<ul>
<li class="collapsed">
<a href="../documentation.html" title="About James">About James</a>
</li>
<li class="expanded">
<a href="../server/index.html" title="Server">Server</a>
<ul>
<li class="none">
<a href="../server/advantages.html" title="Advantages">Advantages</a>
</li>
<li class="none">
<a href="../server/objectives.html" title="Objectives">Objectives</a>
</li>
<li class="expanded">
<a href="../server/quick-start.html" title="User Manual">User Manual</a>
<ul>
<li class="collapsed">
<a href="../server/features.html" title="1. Features">1. Features</a>
</li>
<li class="none">
<a href="../server/packaging.html" title="2. Packaging">2. Packaging</a>
</li>
<li class="collapsed">
<a href="../server/install.html" title="3. Install James">3. Install James</a>
</li>
<li class="expanded">
<a href="../server/config.html" title="4. Configure James">4. Configure James</a>
<ul>
<li class="none">
<a href="../server/config-listeners.html" title="Additional mailbox listeners">Additional mailbox listeners</a>
</li>
<li class="none">
<a href="../server/config-antispam.html" title="Anti Spam">Anti Spam</a>
</li>
<li class="none">
<a href="../server/config-blob-export.html" title="Blob Export">Blob Export</a>
</li>
<li class="none">
<a href="../server/config-blobstore.html" title="BlobStore">BlobStore</a>
</li>
<li class="none">
<a href="../server/config-cassandra.html" title="Cassandra">Cassandra</a>
</li>
<li class="none">
<a href="../server/config-elasticsearch.html" title="ElasticSearch">ElasticSearch</a>
</li>
<li class="none">
<a href="../server/config-vault.html" title="Deleted Messages Vault">Deleted Messages Vault</a>
</li>
<li class="none">
<a href="../server/config-dnsservice.html" title="DNS Service">DNS Service</a>
</li>
<li class="none">
<a href="../server/config-domainlist.html" title="Domain List">Domain List</a>
</li>
<li class="none">
<a href="../server/config-fetchmail.html" title="FetchMail">FetchMail</a>
</li>
<li class="none">
<a href="../server/config-guice.html" title="Guice">Guice</a>
</li>
<li class="none">
<a href="../server/config-imap4.html" title="IMAP4">IMAP4</a>
</li>
<li class="none">
<strong>JMAP</strong>
</li>
<li class="none">
<a href="../server/config-mailrepositorystore.html" title="Mail Repository Stores">Mail Repository Stores</a>
</li>
<li class="none">
<a href="../server/config-mailbox.html" title="Mailbox">Mailbox</a>
</li>
<li class="none">
<a href="../server/config-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
</li>
<li class="none">
<a href="../server/config-healthcheck.html" title="Periodical Health Checks">Periodical Health Checks</a>
</li>
<li class="none">
<a href="../server/config-pop3.html" title="POP3">POP3</a>
</li>
<li class="none">
<a href="../server/config-quota.html" title="Quota">Quota</a>
</li>
<li class="none">
<a href="../server/config-rabbitmq.html" title="RabbitMQ">RabbitMQ</a>
</li>
<li class="none">
<a href="../server/config-recipientrewritetable.html" title="Recipient Rewrite">Recipient Rewrite</a>
</li>
<li class="none">
<a href="../server/config-smtp-lmtp.html" title="SMTP LMTP">SMTP LMTP</a>
</li>
<li class="none">
<a href="../server/config-sieve.html" title="Sieve">Sieve</a>
</li>
<li class="none">
<a href="../server/config-ssl-tls.html" title="SSL/TLS">SSL/TLS</a>
</li>
<li class="none">
<a href="../server/config-system.html" title="System">System</a>
</li>
<li class="none">
<a href="../server/config-spring-jpa-postgres.html" title="Spring JPA Postgres">Spring JPA Postgres</a>
</li>
<li class="none">
<a href="../server/config-users.html" title="Users">Users</a>
</li>
<li class="none">
<a href="../server/config-webadmin.html" title="WebAdmin">WebAdmin</a>
</li>
</ul>
</li>
<li class="collapsed">
<a href="../server/manage.html" title="5. Manage">5. Manage</a>
</li>
<li class="collapsed">
<a href="../server/monitor.html" title="6. Monitor">6. Monitor</a>
</li>
<li class="collapsed">
<a href="../server/upgrade.html" title="7. Upgrade">7. Upgrade</a>
</li>
<li class="collapsed">
<a href="../server/dev.html" title="8. Developers Corner">8. Developers Corner</a>
</li>
</ul>
</li>
<li class="none">
<a href="../mail.html#James_Mailing_lists" title="Mailing Lists">Mailing Lists</a>
</li>
<li class="none">
<a href="../server/release-notes.html" title="Release Notes">Release Notes</a>
</li>
<li class="none">
<a href="../server/apidocs/index.html" title="Javadoc">Javadoc</a>
</li>
<li class="none">
<a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
</li>
<li class="none">
<a href="https://github.com/apache/james-project" title="Sources">Sources</a>
</li>
<li class="none">
<a href="../server/rfcs.html" title="RFCs">RFCs</a>
</li>
<li class="none">
<a href="../download.cgi#Apache_James_Server" title="Download releases">Download releases</a>
</li>
</ul>
</li>
<li class="collapsed">
<a href="../mailet/index.html" title="Mailets">Mailets</a>
</li>
<li class="collapsed">
<a href="../mailbox/index.html" title="Mailbox">Mailbox</a>
</li>
<li class="collapsed">
<a href="../protocols/index.html" title="Protocols">Protocols</a>
</li>
<li class="collapsed">
<a href="../mpt/index.html" title="MPT">MPT</a>
</li>
</ul>
<h5>Apache Software Foundation</h5>
<ul>
<li>
<strong>
<a title="ASF" href="http://www.apache.org/">ASF</a>
</strong>
</li>
<li>
<a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
</li>
<li>
<a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
</li>
<li>
<a title="License" href="http://www.apache.org/licenses/" >License</a>
</li>
<li>
<a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a title="Security" href="http://www.apache.org/security/">Security</a>
</li>
</ul>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
<img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
</a>
</div>
</div>
<div id="bodyColumn">
<div id="contentBox">
<section>
<h2><a name="JMAP_configuration"></a>JMAP configuration</h2>
<p><a class="externalLink" href="https://jmap.io/">JMAP</a> is intended to be a new standard for email clients to connect to mail
stores. It therefore intends to primarily replace IMAP + SMTP submission. It is also designed to be more
generic. It does not replace MTA-to-MTA SMTP transmission.</p>
<p>Cassandra Guice proposes a JMAP implementation.</p>
<section>
<h3><a name="jmap.properties"></a>jmap.properties</h3>
<p>Consult <a class="externalLink" href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/jmap.properties">jmap.properties</a> in GIT to get some examples and hints.</p>
<br />
<dl>
<dt><b>enabled</b></dt>
<dd>true/false. Governs whether JMAP should be enabled</dd>
<dt><b>jmap.port</b></dt>
<dd>Optional. Defaults to 80. The port this server will be listening on. This value must be a valid
port, ranging between 1 and 65535 (inclusive)</dd>
<dt><b>tls.keystoreURL</b></dt>
<dd>Keystore to be used for generating authentication tokens for password authentication mechanism.
This should not be the same keystore than the ones used by TLS based protocols.</dd>
<dt><b>tls.secret</b></dt>
<dd>Password used to read the keystore</dd>
<dt><b>jwt.publickeypem.url</b></dt>
<dd>Optional. Coma separated list of RSA public keys URLs to validate JWT tokens allowing requests to bypass authentication.
Defaults to an empty list.</dd>
<dt><b>url.prefix</b></dt>
<dd>Optional. Configuration urlPrefix for JMAP routes.</dd>
<dd>Default value: http://localhost.</dd>
<dt><b>websocket.url.prefix</b></dt>
<dd>Optional. URL for JMAP WebSocket route</dd>
<dd>Default value: ws://localhost</dd>
<dt><b>upload.max.size</b></dt>
<dd>Optional. Configuration max size Upload in new JMAP-RFC-8621.</dd>
<dd>Default value: 30M. Supported units are B (bytes) K (KB) M (MB) G (GB).</dd>
<dt><b>email.send.max.size</b></dt>
<dd>Optional. Configuration max size for message created in both JMAP Draft amd RFC-8621.</dd>
<dd>Default value: None. Supported units are B (bytes) K (KB) M (MB) G (GB).</dd>
<dt><b>view.email.query.enabled</b></dt>
<dd>Optional boolean. Defaults to false.</dd>
<dd>Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against ElasticSearch?
This enables a higher resilience, but the projection needs to be correctly populated.</dd>
<dt><b>user.provisioning.enabled</b></dt>
<dd>Optional boolean. Defaults to true.</dd>
<dd>Governs whether authenticated users that do not exist locally should be created in the users repository.
</dd>
<dt><b>jmap.version.default</b></dt>
<dd>Optional string. Defaults to draft. Allowed values: draft, rfc-8621.</dd>
<dd>Which version of the JMAP protocol should be served when none supplied in the Accept header.
Defaults to draft for legacy reasons (avoid breaking changes) but setting the value to
rfc-8621 allow compatibility with other third party apps.</dd>
</dl>
</section>
<section>
<h3><a name="Wire_tapping"></a>Wire tapping</h3>
<p>Enabling <b>TRACE</b> on <b>org.apache.james.jmap.wire</b> enables reactor-netty wiretap, logging of
all incoming and outgoing requests, outgoing requests. This will log also potentially sensible information
like authentication credentials.</p>
</section>
<section>
<h3><a name="JMAP-draft_vs_JMAP-RFC-8621"></a>JMAP-draft vs JMAP-RFC-8621</h3>
<p>James had been supporting an implementation based on an early specification of JMAP, what we call here
<i>JMAP-draft</i> version. But the protocol went under a lot of changes until its finalization as an
official RFC.</p>
<p>The finalized version of JMAP regarding the core specifications [<a class="externalLink" href="https://tools.ietf.org/html/rfc8620">RFC-8620</a>]
and the mail specifications [<a class="externalLink" href="https://tools.ietf.org/html/rfc8621">RFC-8621</a>] are being
currently implemented in James (<i>JMAP-RFC-8621</i> version). It's supposed to replace at term the
<i>JMAP-draft</i> version.</p>
<p>Meanwhile, both versions will be available. The version by default will be <i>JMAP-draft</i> during
the time it takes to implement the new version. If you want to use a specific version for a request,
you will need to add an extra <i>jmapVersion</i> field in your <b>Accept</b> header of your JMAP request:</p>
<ul>
<li><b>JMAP-draft</b>: <i>Accept: application/json; jmapVersion=draft</i></li>
<li><b>JMAP-RFC-8621</b>: <i>Accept: application/json; jmapVersion=rfc-8621</i></li>
</ul>
</section>
<section>
<h3><a name="Annotated_specification"></a>Annotated specification</h3>
<p>The <a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/protocols/jmap-rfc-8621/doc/specs/spec">annotated documentation</a>
presents the limits of the JMAP RFC-8621 implementation part of the Apache James project. We furthermore implement
<a class="externalLink" href="https://tools.ietf.org/html/rfc8887">JSON Meta Application Protocol (JMAP) Subprotocol for WebSocket</a>.</p>
<p>Some methods / types are not yet implemented, some implementations are naive, and the PUSH is not supported yet.</p>
<p>Users are invited to read these limitations before using actively the JMAP RFC-8621 implementation, and should ensure their
client applications only uses supported operations.</p>
<p>Contributions enhancing support are furthermore welcomed.</p>
<ul>The list of tested JMAP clients are:
<li><a class="externalLink" href="https://open-paas.org/">OpenPaaS</a> is actively using the draft version of the JMAP implementation. Migration to
RFC-8621 is planned.</li>
<li>Experiments had been run on top of <a class="externalLink" href="https://github.com/iNPUTmice/lttrs-android">LTT.RS</a>. Version in the Accept
headers needs to be explicitly set to `rfc-8621`. <a class="externalLink" href="https://github.com/linagora/james-project/pull/4089">Read more</a>.</li>
</ul>
</section>
</section>
</div>
</div>
<div class="clear">
<hr/>
</div>
<div id="footer">
<div class="xright">Copyright &#169; 2006-2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All Rights Reserved.
</div>
<div class="clear">
<hr/>
</div>
</div>
</body>
</html>