blob: bad2f8cb877ad9feb2b036c8a242c6e2ea2842b8 [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 2016-10-20 -->
<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 Server 3.0 -
Apache James Server 3 - Mailet Container 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="20161020" />
<meta http-equiv="Content-Language" content="en" />
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
<!-- 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="Apache James Server 3.0" />
</a>
<a href="http://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: 2016-10-20</span>
</div>
<div class="xright"> <a href="../../index.html" title="Home">Home</a>
|
<a href="../index.html" title="Server">Server</a>
|
<a href="../../hupa/index.html" title="Hupa">Hupa</a>
|
<a href="../../protocols/index.html" title="Protocols">Protocols</a>
|
<a href="../../mailet/index.html" title="Mailets">Mailets</a>
|
<a href="../../mailbox/index.html" title="Mailbox">Mailbox</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>
|
<a href="../../mpt/index.html" title="MPT">MPT</a>
|
<a href="../../postage/index.html" title="Postage">Postage</a>
</div>
<div class="clear">
<hr/>
</div>
</div>
<div id="leftColumn">
<div id="navcolumn">
<h5>Overview</h5>
<ul>
<li class="none">
<a href="index.html" title="Introduction">Introduction</a>
</li>
<li class="none">
<a href="release-notes.html" title="Release Notes">Release Notes</a>
</li>
</ul>
<h5>Features</h5>
<ul>
<li class="none">
<a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
</li>
<li class="none">
<a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a>
</li>
<li class="none">
<a href="feature-persistence.html" title="Persistence">Persistence</a>
</li>
<li class="none">
<a href="feature-protocols.html" title="Protocols">Protocols</a>
</li>
<li class="none">
<a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
</li>
<li class="none">
<a href="feature-performance.html" title="Performance">Performance</a>
</li>
<li class="none">
<a href="feature-security.html" title="Security">Security</a>
</li>
</ul>
<h5>User Manual</h5>
<ul>
<li class="none">
<a href="quick-start.html" title="1. Quick Start">1. Quick Start</a>
</li>
<li class="none">
<a href="install.html" title="2. Install James">2. Install James</a>
</li>
<li class="expanded">
<a href="config.html" title="3. Configure James">3. Configure James</a>
<ul>
<li class="none">
<a href="config-system.html" title="System">System</a>
</li>
<li class="none">
<a href="config-domainlist.html" title="Domain List">Domain List</a>
</li>
<li class="none">
<a href="config-users.html" title="Users">Users</a>
</li>
<li class="none">
<a href="config-recipientrewritetable.html" title="Recipient Rewrite">Recipient Rewrite</a>
</li>
<li class="none">
<a href="config-mailbox.html" title="Mailbox">Mailbox</a>
</li>
<li class="none">
<a href="config-mailrepositorystore.html" title="Mail Repository Stores">Mail Repository Stores</a>
</li>
<li class="none">
<a href="config-dnsservice.html" title="DNS Service">DNS Service</a>
</li>
<li class="none">
<a href="config-smtp-lmtp.html" title="SMTP LMTP">SMTP LMTP</a>
</li>
<li class="none">
<a href="config-pop3.html" title="POP3">POP3</a>
</li>
<li class="none">
<a href="config-imap4.html" title="IMAP4">IMAP4</a>
</li>
<li class="none">
<strong>Mailet Container</strong>
</li>
<li class="none">
<a href="config-fetchmail.html" title="FetchMail">FetchMail</a>
</li>
<li class="none">
<a href="config-ssl-tls.html" title="SSL/TLS">SSL/TLS</a>
</li>
<li class="none">
<a href="config-sieve.html" title="Sieve">Sieve</a>
</li>
<li class="none">
<a href="config-antispam.html" title="Anti Spam">Anti Spam</a>
</li>
</ul>
</li>
<li class="collapsed">
<a href="manage.html" title="4. Manage">4. Manage</a>
</li>
<li class="collapsed">
<a href="monitor.html" title="5. Monitor">5. Monitor</a>
</li>
<li class="collapsed">
<a href="upgrade.html" title="6. Upgrade">6. Upgrade</a>
</li>
</ul>
<h5>Developers Corner</h5>
<ul>
<li class="none">
<a href="dev.html" title="Architecture">Architecture</a>
</li>
<li class="none">
<a href="dev-build.html" title="Build from source">Build from source</a>
</li>
<li class="none">
<a href="dev-database-schema.html" title="Database Schema">Database Schema</a>
</li>
<li class="collapsed">
<a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a>
</li>
<li class="collapsed">
<a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
</li>
</ul>
<h5>References</h5>
<ul>
<li class="none">
<a href="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>
</ul>
<h5>About James</h5>
<ul>
<li class="none">
<a href="../../index.html" title="Overview">Overview</a>
</li>
<li class="none">
<a href="../../newsarchive.html" title="News">News</a>
</li>
<li class="none">
<a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
</li>
<li class="none">
<a href="../../contribute.html" title="Contributing">Contributing</a>
</li>
<li class="none">
<a href="../../guidelines.html" title="Guidelines">Guidelines</a>
</li>
<li class="none">
<a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
</li>
<li class="none">
<a href="../../team-list.html" title="Who We Are">Who We Are</a>
</li>
<li class="none">
<a href="../../license.html" title="License">License</a>
</li>
<li class="none">
<a href="../../thanks.html" title="Thanks">Thanks</a>
</li>
<li class="none">
<a href="../../support.html" title="Professional support">Professional support</a>
</li>
</ul>
<h5>Download</h5>
<ul>
<li class="none">
<a href="../../download.cgi" title="Releases">Releases</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">
<!-- 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. -->
<div class="section">
<h2>Mailet Container Configuration<a name="Mailet_Container_Configuration"></a></h2>
<p>Consult <a class="externalLink" href="https://github.com/apache/james-project/tree/master/server/app/src/main/resources/mailetcontainer-template.xml">mailetcontainer-template.xml</a> in GIT to get some examples and hints.</p>
<p>Changes between 3.0-M2 and 3.0-beta3:</p>
<ul>
<li>No more mailetpackage specification in mailetcontainer.xml</li>
<li>Exactly one standard package, hard-coded in source code</li>
<li>Standard package applied to mailet classnames without package prefix</li>
<li>All custom mailets must be specified with full package prefix</li>
<li>Package prefixed custom mailet names will be searched across the entire applicable class path</li>
<li>Composite matchers</li>
</ul>
<!-- <matcher name="anyname" match="org.apache.james.mailetcontainer.lib.matcher.And">
<matcher match="SenderIs...."/>
<matcher match="SubjectStartsWith...."/>
</matcher>
<mailet match="anyname" class="MailetX"/> -->
<p>This configuration block is defined by the <b>mailserver</b> tag. All administrators
need to adjust the <b>mailserver</b> block upon installation.</p>
<dl>
<dt><b>context.postmaster</b></dt>
<dd>The body of this element is the address that the server
will consider its postmaster address. This address will be listed as the sender address
of all error messages that originate from James. Also, all messages addressed to
postmaster@&lt;servername&gt;, where &lt;servername&gt; is one of the domain names whose
mail is being handled by James, will be redirected to this email address.
Set this to the appropriate email address for error reports
If this is set to a non-local email address, the mail server
will still function, but will generate a warning on startup.</dd>
<dt><b>spooler.threads</b></dt>
<dd>Number of simultaneous threads used to spool the mails.</dd>
</dl>
<!-- <p>The SpoolManager is controlled by a single configuration block in the mailetcontainer.xml.
The spoolmanager tag defines the boundaries of the configuration block. The behavior of
the SpoolManager, most importantly the routing of mail messages through the processor tree,
is controlled by this block.</p>
<p>The spoolmanager tag has only one children. It is:</p>
<ul>
<li><strong>threads</strong> - This is a required positive integer element. It specifies
the number of threads the SpoolManager will use to process messages in the spool. This
parameter tends to substantially impact performance, so it is advisable to tune it in production
configurations.</li>
</ul>
<p>Spoolmanager depends on mailet and matcher packages, configured by these tags:</p>
<ul>
<li><strong>mailetpackages</strong> - This is a required container tag. It contains some number
of <strong>mailetpackage</strong> children. The body of each of these <strong>mailetpackage</strong>
elements is a Java package name. It is these packages that contain the classes to be instantiated
as mailets.</li>
<li><strong>matcherpackages</strong> - This is a required container tag. It contains some number
of <strong>matcherpackage</strong> children. The body of each of these <strong>matcherpackage</strong>
elements is a Java package name. It is these packages that contain the classes to be instantiated
as matchers.</li>
</ul>
<p>The remaining SpoolManager configuration elements are complex enough to require a more in-depth
discussion.</p>
<subsection name="Processor Configuration">
<p>In addition to the child elements discussed above, the SpoolManager tag can have several
<strong>processor</strong> children. It is these tags and their children that define the processor tree
for the SpoolManager.</p>
<p>Each processor has a required attribute, <strong>name</strong>. The value of this attribute must be
unique for each processor tag. The name of a processor is significant. Certain processors are required
(specifically root and error). The name "ghost" is forbidden as a processor name, as it is used to denote
a message that should not undergo any further processing.</p>
<p>The James SpoolManager creates a correspondance between processor names and the "state" of a mail as defined
in the Mailet API. Specifically, after each mailet processes a mail, the state of the message is examined. If
the state has been changed, the message does not continue in the current processor. If the new state is "ghost"
then processing of that message terminates completely. If the new state is anything else, the message is
re-routed to the processor with the name matching the new state.</p>
<p>The root processor is a required processor. All new messages that the SpoolManager finds on the spool are
directed to this processor.</p>
<p>The error processor is another required processor. Under certain circumstances James itself will redirect messages
to the error processor. It is also the standard processor to which mailets redirect messages when an error
condition is encountered.</p>
<p>The transport and spam processors are two useful, but optional, processors that are included in the out of
the box configuration. These processors include logic for actual mail delivery and spam handling respectively. More
information on these processors can be found in the default mailetcontainer.xml.</p>
<p>Each processor element has zero or more <strong>mailet</strong> child elements. Each of these elements describes a
matcher/mailet pair. The ordering of the <strong>mailet</strong> children is crucial to the configuration, as
it is the order in which pairs will be traversed in the processor.</p>
<p>It is this <strong>mailet</strong> element that is at the core of the SpoolManager configuration.</p>
</subsection> -->
<div class="section">
<h3>The Mailet Tag<a name="The_Mailet_Tag"></a></h3>
<p>Consider the following simple <b>mailet</b> tag:</p>
&lt;mailet match=&quot;RemoteAddrNotInNetwork=127.0.0.1&quot; class=&quot;ToProcessor&quot;&gt;<br />
&lt;processor&gt;spam&lt;/processor&gt;<br />
&lt;/mailet&gt;<br />
<p>The mailet tag has two required attributes, <b>match</b> and <b>class</b>.</p>
<p>The <b>match</b> attribute is set to the value of the specific Matcher class to be instantiated with a an
optional argument. If present, the argument is separated from the Matcher class name by an '='. Semantic
interpretation of the argument is left to the particular mailet.</p>
<p>The <b>class</b> attribute is set to the value of the Mailet class that is to be instantiated.</p>
<p>Finally, the children of the <b>mailet</b> tag define the configuration that is passed to the Mailet. The
tags used in this section should have no attributes or children. The names and bodies of the elements will be passed to
the mailet as (name, value) pairs.</p>
<p>So in the example above, a Matcher instance of RemoteAddrNotInNetwork would be instantiated, and the value &quot;127.0.0.1&quot;
would be passed to the matcher. The Mailet of the pair will be an instance of ToProcessor, and it will be passed the (name, value)
pair of (&quot;processor&quot;, &quot;spam&quot;).</p>
<p>Apache James Server includes a number of pre-packaged Mailets and Matchers. A list of provided Mailets may be found
<a href="dev-provided-mailets.html">here</a>. A list of provided Matchers may be found <a href="dev-provided-matchers.html">here</a>.</p>
</div>
</div>
</div>
</div>
<div class="clear">
<hr/>
</div>
<div id="footer">
<div class="xright">Copyright &#169; 2002-2016
<a href="http://www.apache.org/">The Apache Software Foundation</a>.
All Rights Reserved.
</div>
<div class="clear">
<hr/>
</div>
</div>
</body>
</html>