<?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 12, 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>James Server - 
  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="author" content="Serge Knystautas" />
    <meta name="Date-Revision-yyyymmdd" content="20120412" />
    <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-server-logo.gif">
              
                                                                            
        <img src="../images/logos/james-server-logo.gif" alt="James Server" />
                </a>
                              <a href="http://www.apache.org/" 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-12</span>
                  &nbsp;| <span id="projectVersion">Version: 1.6</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>James Server</h5>
                  <ul>
                  <li class="none">
                          <a href="../index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../design_objectives.html" title="Objectives">Objectives</a>
            </li>
                  <li class="none">
                          <a href="../FAQ.html" title="Server FAQ">Server FAQ</a>
            </li>
                  <li class="none">
                          <a href="../rfclist.html" title="Useful RFCs">Useful RFCs</a>
            </li>
                  <li class="none">
                          <a href="http://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
                  <li class="none">
                          <a href="http://svn.apache.org/viewvc/james/server/" title="Source">Source</a>
            </li>
          </ul>
                       <h5>Documentation</h5>
                  <ul>
                  <li class="none">
                          <a href="../3/index.html" title="Server v3">Server v3</a>
            </li>
                  <li class="none">
                          <a href="../2/index.html" title="Server v2">Server v2</a>
            </li>
                  <li class="none">
                          <a href="../archive/document_archive.html" title="Archive">Archive</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="../../weare.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="http://people.apache.org/builds/james/nightly/" 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>Configuration<a name="Configuration"></a></h2>

<p>
<blockquote>
        <p>This document explains the JAMES.conf.xml file for James 2.0
          <br />JAMES 2.0 uses a date-stamped version of Avalon from late September 2001.
          The lib directory includes jars with date-stamped names for the Avalon libraries.
          </br>
        </p>
</blockquote>


</div>

<div class="section"><h2>James Server Configuration<a name="James_Server_Configuration"></a></h2>
  <div class="section"><h3>James Configuration<a name="James_Configuration"></a></h3>
    <p>
        These tag elements control the JAMES spooling and identification
        settings.
    </p>
    <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> postmaster </td>
            <td> Postmaster@localhost </td>
            <td> Is the source of error replies and the email users will mail to for any problem.  You
            should change this to an address that can receive incoming messages.</td>
        </tr>
    <tr class="a">
            <td> helloName</td>
            <td> attribute autodetect=TRUE and value of 'myMailServer'  </td>
            <td> The name by which James will identify itself in SMTP and POP3
            greetings. If autodetect is TRUE James will attempt to detect
            automatically the name, failing which it will use 'localhost'. If
            autodetect is not TRUE, James will use the specified name or
            'localhost' if none is specified. Look in jamesinfo.log for
            lines like &quot;[...] Local host is: [servername] and [...] Hello Name is: [machine name]&quot;</td>
        </tr>
        <tr class="b">
            <td> servernames/servername</td>
            <td> attribute autodetect=TRUE and last value of 'localhost'</td>
            <td> A list of host names James will consider as local. Any user [user]@[servername]
            will be considered to be local. If autodetect is TRUE James will attempt to detect
            automatically the name and use any names specified. Look in jamesinfo.log for a line like &quot;[...] Handling mail for:: [domain/host]&quot;</td>
        </tr>
        <tr class="a">
            <td> spoolRepository </td>
            <td> file://var/mail/spool/ </td>
            <td> This is the path where incoming messages are stored before beeing processed. </td>
        </tr>
        <tr class="b">
            <td> inboxRepository </td>
            <td> file://var/mail/localinbox/ </td>
            <td> This is the root for local users inbox. Each user will have a personal folder
            [inboxRepository]/[user] </td>
        </tr>
        <tr class="a">
            <td> spoolmanagerthreads </td>
            <td> 5 </td>
            <td> This is the number of thread that work polling mails from the spool and take care
            of processing them. </td>
        </tr>
    </table>
  </div>

  <div class="section"><h3>SMTP Server Configuration<a name="SMTP_Server_Configuration"></a></h3>
   <p>
      These tag elements affect the SMTP listener (for incoming messages).
   </p>

    <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> port </td>
            <td> 25 </td>
            <td> The port we are listening to. </td>
        </tr>
        <tr class="a">
            <td> bind </td>
            <td> N.A. </td>
            <td> Specific IP addresses that you wish to bind this service to. </td>
        </tr>
        <tr class="b">
            <td> smtphandler </td>
            <td> N.A. </td>
            <td> Parent for all SMTPHandler configuations. </td>
        </tr>
        <tr class="a">
            <td> connectiontimeout </td>
            <td> 120000 </td>
            <td> If nothing is received from an open connection for more than {timeout] mills
            the connection is closed. </td>
        </tr>
    </table>
  </div>

  <div class="section"><h3>POP3 Server Configuration<a name="POP3_Server_Configuration"></a></h3>
    <p>
       These tag elements affect the POP3 server (for message retrieval)
    </p>
    <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> port </td>
            <td> 110 </td>
            <td> The port we are listening to. </td>
        </tr>
        <tr class="a">
            <td> bind </td>
            <td> N.A. </td>
            <td> Specific IP addresses that you wish to bind this service to. </td>
        </tr>
        <tr class="b">
            <td> useTLS </td>
            <td> false </td>
            <td> Whether you wish to require/use TLS (SSL) on this port. </td>
        </tr>
        <tr class="a">
            <td> pop3handler </td>
            <td> N.A. </td>
            <td> Parent for all POP3Handler configuations. </td>
        </tr>
        <tr class="b">
            <td> connectiontimeout </td>
            <td> 120000 </td>
            <td> If nothing is received from an open connection for more than {timeout] mills
            the connection is closed. </td>
        </tr>
    </table>
  </div>

  <div class="section"><h3>Users Manager Configuration<a name="Users_Manager_Configuration"></a></h3>
    <p>
       These tag elements affect the configuration of the list of local users.
    </p>
    <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> repository </td>
            <td> file://var/users/ </td>
            <td> The path where local mail account informations are stored. </td>
        </tr>
    </table>
  </div>

  <div class="section"><h3>Remote Manager Configuration<a name="Remote_Manager_Configuration"></a></h3>
    <p>
       These tag elements affect the remote manager, a telnet based utility
       to manage the User Manager.
    </p>
    <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> port </td>
            <td> 4555 </td>
            <td> The port we are listening to. </td>
        </tr>
        <tr class="a">
            <td> bind </td>
            <td> N.A. </td>
            <td> Specific IP addresses that you wish to bind this service to. </td>
        </tr>
        <tr class="b">
            <td> useTLS </td>
            <td> false </td>
            <td> Whether you wish to require/use TLS (SSL) on this port. </td>
        </tr>
        <tr class="a">
            <td> administrator_accounts </td>
            <td> N.A. </td>
            <td> The parent of &lt;account&gt; </td>
        </tr>
        <tr class="b">
            <td> account </td>
            <td> login=&quot;root&quot; password=&quot;root&quot; </td>
            <td> A list of root account to administer JAMES. </td>
        </tr>
        <tr class="a">
            <td> connectiontimeout </td>
            <td> 120000 </td>
            <td> If nothing is received from an open connection for more than {timeout] mills</td>
        </tr>
    </table>
  </div>

  <div class="section"><h3>Transport Configuration<a name="Transport_Configuration"></a></h3>
    <p>
       These tag elements affect SMTP remote delivery, specifically, DNS
       lookup functionality.
    </p>
   <table class="bodyTable" border="1">
        <tr class="a">
            <th>&lt;name&gt;</th>
            <th>default value</th>
            <th>meaning</th>
        </tr>
        <tr class="b">
            <td> dnsServer/servers/server </td>
            <td> N.A. </td>
            <td> This is a list of DNS to resolve external address. </td>
        </tr>
        <tr class="a">
            <td> authoritative </td>
            <td> false </td>
            <td> Whether to require authoritative (non-cached) DNS records. Should always be false
            unless you understand the implications. </td>
        </tr>
        <tr class="b">
            <td> repository </td>
            <td> file://var/mail/delayed/ </td>
            <td> This is a temp repository path shared with the name of &quot;TMP_REPOSITORY&quot;.
            It is used by the RemoteDelivery Mailet to store mail for futher delivery.
            (Note: this is not very elegant and will probally change soon) </td>
        </tr>
        <tr class="a">
            <td> mailets </td>
            <td> rootpath=&quot;org.apache.james.transport.mailets.&quot; </td>
            <td> This is the parent node for all mailet configurations. The rootpath specify
            where mailet repository is. (Note: need to plug more than one repository) </td>
        </tr>
    </table>
  </div>
</div>

<div class="section"><h2>The Mailet processor pipeline<a name="The_Mailet_processor_pipeline"></a></h2>
  <p>
     This is James sitemap. It defines how each incoming mail will be
     processed. Incoming mails begins their process at the first mailet in the
     pipe. Each step is described by a &lt;servet&gt; tag with some attributes:
         &lt;mailet match=&quot;[matchClass]=[matchParameters]&quot;
                    class=&quot;[mailetClass]&quot;&gt;.
     The Matcher class split the mail into two Collections: one with all recipients
     matching conditions and the other with all recipient not matching. All information
     in the mail except recipients cloned so the message that both matching and not matching
     are identical (again except recipients). The matching recipients and mail will be passed to
     the specified mailet for processing. After processing both mails, the
     untouched not-matching mail and the processed matching mail, each go to next step in
     the processor. Some mailets will indicate the mail should be consumed and no continue processing.
     The Null mailet for example will simply consume any incoming mail as will the RemoteDelivery
     since after delivery the mail needs no more processing.
  </p>

  <div class="section"><h3>Matchers<a name="Matchers"></a></h3>
    <p>
       The Matcher interface defines how match class should work. Their work is
       to split a Vector of recipients into two: the ones matching a specified
       condition and all others.
       Currently implemented matchers:
    </p>
    <table class="bodyTable" border="1">
        <tr class="a">
            <th>class name</th>
            <th>parameter</th>
            <th>action</th>
            <th>example</th>
        </tr>
        <tr class="b">
            <td> All </td>
            <td> none </td>
            <td> match all recipients. </td>
            <td> match=&quot;All&quot; </td>
        </tr>
        <tr class="a">
            <td> HasAttachment </td>
            <td> none </td>
            <td> match all recipients if the message has an attachment (if content type is multipart/mixed). </td>
            <td> match=&quot;All&quot; </td>
        </tr>
        <tr class="b">
            <td> HostIs </td>
            <td> comma separated list of hosts names </td>
            <td> match all recipients belonging to one of the specified hosts </td>
            <td> match=&quot;HostIs=myHost.mydom.org,yourHost&quot; </td>
        </tr>
        <tr class="a">
            <td> HostIsLocal </td>
            <td> none </td>
            <td> check recipients's hosts against the list of host names set in configuration for localhost
            (see &lt;servername&gt;). </td>
            <td> match=&quot;HostIsLocal&quot; </td>
        </tr>
        <tr class="b">
            <td> InSpammerBlacklist </td>
            <td> DNS zone with blacklist </td>
            <td> match all recipients if mail received from an IP address on the blacklist. </td>
            <td> match=&quot;InSpammerBlacklist=blackholes.mail-abuse.org&quot; </td>
        </tr>
        <tr class="a">
            <td> IsSingleRecipient </td>
            <td> none </td>
            <td> match mail if only has 1 recipient. </td>
            <td> match=&quot;IsSingleRecipient&quot; </td>
        </tr>
        <tr class="b">
            <td> NESSpamCheck </td>
            <td> none </td>
            <td> match all recipients if mail matches various spam detection rules. </td>
            <td> match=&quot;NESSpamCheck&quot; </td>
        </tr>
        <tr class="a">
            <td> RecipientIs </td>
            <td> comma separated list of recipients </td>
            <td> match all recipients defined in condition. </td>
            <td> match=&quot;RecipientIs=root@localhost,admin@localhost&quot; </td>
        </tr>
        <tr class="b">
            <td> RecipientIsLocal </td>
            <td> none </td>
            <td> match recipient which host is local (see HostIsLocal) and that are recognized by the
            Users Manager to be local accounts. </td>
            <td> match=&quot;RecipientIsLocal&quot; </td>
        </tr>
        <tr class="a">
            <td> RelayLimit </td>
            <td> Maximum number of hops. </td>
            <td> match all recipients if the message has more than the specified number of SMTP hops.
            Important to prevent race conditions in SMTP delivery.
            </td>
            <td> match=&quot;RelayLimit=30&quot; </td>
        </tr>
        <tr class="b">
            <td> RemoteAddrInNetwork </td>
            <td> comma separated list of network addresses </td>
            <td> match all recipients if the message was received from an IP address that matches the
            comma separated list.  Wildcards are supposed, e.g., 192.168.0.* is a valid option.
            </td>
            <td> match=&quot;RemoteAddrInNetwork=127.0.0.1,192.168.*&quot; </td>
        </tr>
        <tr class="a">
            <td> RemoteAddrNotInNetwork </td>
            <td> comma separated list of network addresses </td>
            <td> match all recipients if the message was not received from an IP address that matches
            the comma separated list.  Wildcards are supposed, e.g., 192.168.0.* is a valid option.
            </td>
            <td> match=&quot;RemoteAddrNotInNetwork=127.0.0.1,192.168.*&quot; </td>
        </tr>
        <tr class="b">
            <td> SenderInFakeDomain </td>
            <td> none </td>
            <td> match recipients who's domain name portion of their email address is invalid.  Queries
            for A, CNAME, and MX record entries. </td>
            <td> match=&quot;SenderInFakeDomain&quot; </td>
        </tr>
        <tr class="a">
            <td> SenderIs </td>
            <td> comma separated list of address. </td>
            <td> match all recipients if sender is in the condition string, else match none. </td>
            <td> match=&quot;SenderIs=badBay@badhost&quot; </td>
        </tr>
        <tr class="b">
            <td> SizeGreaterThan </td>
            <td> number of bytes.  supports 'k' and 'm' suffixes. </td>
            <td> match all recipients if message is larger than the given number of bytes, kilobytes, or megabytes. </td>
            <td> match=&quot;SizeGreaterThan=1m&quot; </td>
        </tr>
        <tr class="a">
            <td> SubjectIs </td>
            <td> comma separated list of address. </td>
            <td> match all recipients if the subject is equal to the condition string, else match none. </td>
            <td> match=&quot;SubjectIs=REMOVE&quot; </td>
        </tr>
        <tr class="b">
            <td> SubjectStartsWith </td>
            <td> comma separated list of address. </td>
            <td> match all recipients if the subject starts with the condition string, else match none. </td>
            <td> match=&quot;SubjectStartsWith: [ADV]&quot; </td>
        </tr>
        <tr class="a">
            <td> UserIs </td>
            <td> comma separated list of accounts </td>
            <td> match all recipients defined in condition regardless of host. </td>
            <td> match=&quot;UserIs=root,admin&quot; </td>
        </tr>
    </table>
    <p>
       Some examples:
       <br />
         - &lt;mailet match=&quot;RecipientIsLocal&quot;
                     class=&quot;LocalDelivery&quot;&gt;
       </br>
       <br />
        - &lt;mailet match=&quot;UserIs=root&quot;
                     class=&quot;Forward&quot;&gt;
       </br>
       <br />
        - &lt;mailet match=&quot;SenderIs=badBoy@myhost,badGirl@yourhost&quot;
                     class=&quot;Null&quot;&gt;
       </br>
    </p>
  </div>

  <div class="section"><h3>Mailet<a name="Mailet"></a></h3>
    <p>
       Mailet are classes that process a message. They are
       passed a Mail object on which they can perform any kind of task.
       Clever use of mailets allow you to write an email-based application.
       Simple mailets provide basic mail functionality like mail forwarding,
       mailing list, &quot;I'm on vacation&quot; message, mail logging etc. As simply as
       these mailet, you can write and deploy your own mailet to perform any kind of task.
      <br />
         Here you are some of the mailets bundled with James along with their configuration:
       </br>
    </p>
    <b>Null</b>
    <blockquote>
        Consume any incoming mail. No configuration needed.
        <br />
        &lt;mailet match=&quot;SenderIs=badBoy@badhost&quot; class=&quot;Null&quot;&gt;
        &lt;/mailet&gt;
        </br>
    </blockquote>
    <b>debug.Identity</b>
    <blockquote>
         Leave any incoming mail untouched. A debug mailet
         (not really useful).
         No configuration needed.
            <br />
            &lt;mailet match=&quot;All&quot; class=&quot;Identity&quot;&gt;
            &lt;/mailet&gt;</br>
    </blockquote>
    <b>Forward</b>
    <blockquote>
            <br />
            Replace the recipient list with recipient specified in
            configurations.</br>
            <br />
            &lt;mailet match=&quot;RecipientIs=root@localhost&quot;
            class=&quot;Forward&quot;&gt;</br>
      <blockquote>
       <br />
              &lt;forwardto&gt; green@blue.org &lt;/forwardto&gt;
              &lt;forwardto&gt; red@yellow.com &lt;/forwardto&gt;
       </br>
      </blockquote>
            &lt;/mailet&gt;
    </blockquote>

    <b>ToProcessor</b>
    <blockquote>
      Sends the incoming mail object to a new processor pipeline.
      <tt>root</tt> and <tt>error</tt> are special processors that
      should always be defined.
      <br />
        &lt;mailet match=&quot;RecipientIsLocal&quot; class=&quot;ToProcessor&quot;&gt;
      </br>
      <blockquote>
              &lt;processor&gt; localdelivery &lt;/processor&gt;
      </blockquote>
          &lt;/mailet&gt;
    </blockquote>

    <b>ServerTime</b>
    <blockquote>
      Replies to the sender with a short message with the current time.
      No configuration needed.
      <br />
        &lt;mailet match=&quot;RecipientIs=time@localhost&quot; class=&quot;ServerTime&quot;&gt;
      </br>
      &lt;/mailet&gt;
    </blockquote>

    <b>ToRepository</b>
    <blockquote>
      Stores mails in the specified MailRepository. Useful for mail logging
      etc.  If the passThrough parameter is false the mail will be consumed, if true
      it will be returned untouched to the pipe.
      <br />
        &lt;mailet match=&quot;RecipientIs=root@localhost&quot;
                   class=&quot;ToRepository&quot;&gt;
      </br>
      <blockquote>
        <br />
          &lt;repositoryPath&gt; file://var/mail/logAdmin
                &lt;/repositoryPath&gt;
        </br>
        <br />
          &lt;passThrough&gt; true &lt;/passThrough&gt; (default false)
        </br>
      </blockquote>
            &lt;/mailet&gt;
    </blockquote>

    <b>LocalDelivery</b>
    <blockquote>
      Store mail in the local inbox, one folder for each user.
      <br />
        &lt;mailet match=&quot;RecipientIsLocal&quot; class=&quot;LocalDelivery&quot;&gt;
      </br>
        &lt;/mailet&gt;
    </blockquote>

    <b>RemoteDelivery</b>
    
 Relays mails to remote hosts. &quot;delayTime&quot; is the time in mills the 
  mailet will wait before retrying sending a mail which fail at first time. &quot;maxRetries&quot; 
  is the number of retries before sending back to sender the mail. <br />
          &lt;mailet match=&quot;!RecipientIsLocal&quot; class=&quot;RemoteDelivery&quot;&gt;
        </br>
      <blockquote>
        <br />
            &lt;delayTime&gt; 21600000 &lt;/delayTime&gt;
        </br>
        <br />
            &lt;maxRetries&gt; 5 &lt;/maxRetries&gt;
        </br>
      </blockquote>
            
  <p>&lt;/mailet&gt; </p>
   
    <b>Redirect</b>
  <dl>  <dt>A mailet providing configurable redirection services<br /></br>
      This mailet can produce listserver, forward and notify behaviour, with the 
      original message intact, attached, appended or left out altogether.<br /></br>
      This built in functionality is controlled by the configuration as laid out 
      below.</dt>
  </dl>
  <p>However it is also designed to be easily subclassed to make authoring redirection 
    mailets simple. <br /></br>
    By extending it and overriding one or more of its methods new behaviour can 
    be quickly created without the author having to address any other issue than 
    the relevant one. For more information see the javadocs</p>
  <p>The configuration parameters are:</p>
  <table class="bodyTable" border="1">
  <tr class="a">
            <th>param</th>
            <th>desc</th>
            
        </tr>
    <tr class="b"> 
      <td>&lt;recipients&gt;</td>
      <td>A comma delimited list of email addresses for recipients of this message, 
        it will use the &quot;to&quot; list if not specified. These addresses 
        will only appear in the To: header if no &quot;to&quot; list is supplied.</td>
    </tr>
    <tr class="a"> 
      <td>&lt;to&gt;</td>
      <td>A comma delimited list of addresses to appear in the To: header, the 
        email will only be delivered to these addresses if they are in the recipients 
        list.<br />
        </br>
        The recipients list will be used if this is not supplied</td>
    </tr>
    <tr class="b"> 
      <td>&lt;sender&gt;</td>
      <td>A single email address to appear in the From: header <br />
        </br>
        It can include constants &quot;sender&quot; and &quot;postmaster&quot;</td>
    </tr>
    <tr class="a"> 
      <td>&lt;message&gt;</td>
      <td>A text message to be the body of the email. Can be omitted.</td>
    </tr>
    <tr class="b"> 
      <td>&lt;inline&gt;</td>
      <td> 
        <p>One of the following items:</p>
        <ul>
          <li>unaltered     The original message is the new 
            message, for forwarding/aliasing</li>
          <li>heads          The 
            headers of the original message are appended to the message</li>
          <li>body           The 
            body of the original is appended to the new message</li>
          <li>all               Both 
            headers and body are appended</li>
          <li>none           Neither 
            body nor headers are appended</li>
        </ul>
      </td>
    </tr>
    <tr class="a"> 
      <td>&lt;attachment&gt;</td>
      <td> 
        <p>One of the following items:</p>
        <ul>
          <li>heads      The headers of the original 
            are attached as text</li>
          <li>body       The body of the original 
            is attached as text</li>
          <li>all           Both 
            headers and body are attached as a single text file</li>
          <li>none       Nothing is attached</li>
          <li>message  The original message is attached as type message/rfc822, 
            this means that it can, in many cases, be opened, resent, fw'd, replied 
            to etc by email client software.</li>
        </ul>
      </td>
    </tr>
    <tr class="b"> 
      <td>&lt;passThrough&gt;</td>
      <td>TRUE or FALSE, if true the original message continues in the mailet 
        processor after this mailet is finished. False causes the original to 
        be stopped.</td>
    </tr>
    <tr class="a"> 
      <td>&lt;attachError&gt;</td>
      <td>TRUE or FALSE, if true any error message available to the mailet is 
        appended to the message body (except in the case of inline == unaltered)</td>
    </tr>
    <tr class="b"> 
      <td>&lt;replyto&gt;</td>
      <td>A single email address to appear in the Rely-To: header, can also be 
        &quot;sender&quot; or &quot;postmaster&quot;, this header is not set if 
        this is omited.</td>
    </tr>
    <tr class="a"> 
      <td>&lt;prefix&gt;</td>
      <td>An optional subject prefix prepended to the original message subject, 
        for example..<br />
        </br>
        Undeliverable mail:</td>
    </tr>
    <tr class="b"> 
      <td>&lt;static&gt;</td>
      <td> 
        <p>TRUE or FALSE, if this is true it hints to the mailet that none of 
          the parameters are set dynamically, and therefore they can be set once 
          in the init method.<br /></br>
          False tells the mailet to call all the &quot;getters&quot; for every 
          mail processed.</p>
        <p>This defaults to false.<br /></br>
          It should be TRUE in all cases, except where one of the getter methods 
          has been overriden to provide dynamic values, such as a listserve which 
          might override getRecipients() to get a list from a users repository.</p>
      </td>
    </tr>
  </table>
<table class="bodyTable" border="1">
  <tr class="a"><th>
  <p>Example, creates a distribution list:</p></th></tr><tr class="b"><td>
  <p> &lt;mailet match=&quot;RecipientIs=test@localhost&quot; class=&quot;Redirect&quot;&gt;<br /></br>
    &lt;recipients&gt;x@localhost, y@localhost, z@localhost&lt;/recipients&gt;<br /></br>
    &lt;to&gt;list@localhost&lt;/to&gt;<br /></br>
    &lt;sender&gt;owner@localhost&lt;/sender&gt;<br /></br>
    &lt;message&gt;sent on from James&lt;/message&gt;<br /></br>
    &lt;inline&gt;unaltered&lt;/inline&gt;<br /></br>
    &lt;passThrough&gt;FALSE&lt;/passThrough&gt;<br /></br>
    &lt;replyto&gt;postmaster&lt;/replyto&gt;<br /></br>
    &lt;prefix&gt;[test mailing]&lt;/prefix&gt;<br /></br>
    &lt;static&gt;TRUE&lt;/static&gt;<br /></br>
    &lt;passThrough&gt;FALSE&lt;/passThrough&gt;<br /></br>
    &lt;/mailet&gt;<br /></br>
  </p></td></tr></table>
<table class="bodyTable" border="1">
  <tr class="a"><th>
  
  <p>and this sends a spam notification to the postmaster <br /></br>with the original message 
    attached as a message, and a subject prefix:</p></th></tr><tr class="b"><td>
  <p> &lt;mailet match=&quot;All&quot; class=&quot;Redirect&quot;&gt;<br /></br>
    &lt;recipients&gt;x@localhost&lt;/recipients&gt;<br /></br>
    &lt;sender&gt;postmaster&lt;/sender&gt;<br /></br>
    &lt;message&gt;Message marked as spam:<br /></br>
    &lt;/message&gt;<br /></br>
    &lt;inline&gt;heads&lt;/inline&gt;<br /></br>
    &lt;attachment&gt;message&lt;/attachment&gt;<br /></br>
    &lt;passThrough&gt;FALSE&lt;/passThrough&gt;<br /></br>
    &lt;attachError&gt;TRUE&lt;/attachError&gt;<br /></br>
    &lt;replyto&gt;postmaster&lt;/replyto&gt;<br /></br>
    &lt;prefix&gt;[spam notification]&lt;/prefix&gt;<br /></br>
    &lt;static&gt;TRUE&lt;/static&gt;<br /></br>
    &lt;passThrough&gt;FALSE&lt;/passThrough&gt;<br /></br>
    &lt;/mailet&gt;</p>
</td></tr></table>
  </div>
</div>



      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2006-2012
                        <a href="http://www.apache.org">The Apache Software Foundation</a>.
            All Rights Reserved.      
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
