<?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 Apr 17, 2012 -->
<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 - 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="20120417" />
    <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-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="Apache James Server 3.0" />
                </a>
                              <a href="http://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2012-04-17</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="../../imap/index.html" title="IMAP">IMAP</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>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/apache-james/" title="Nightly builds">Nightly builds</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>
          </ul>
                       <h5>Download</h5>
                  <ul>
                  <li class="none">
                          <a href="../../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></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="http://svn.apache.org/repos/asf/james/server/trunk/app/src/main/resources/mailetcontainer-template.xml">mailetcontainer-template.xml</a> in SVN 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-2012
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
