<?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 Jun 27, 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 - Provided Mailets</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="20120627" />
    <meta http-equiv="Content-Language" content="en" />
                                                    
<link type="application/rdf+xml" title="DOAP" rel="meta" 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-06-27</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="collapsed">
                          <a href="config.html" title="3. Configure James">3. Configure James</a>
                  </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="expanded">
                          <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                    <ul>
                      <li class="none">
            <strong>Mailets</strong>
          </li>
                      <li class="none">
                          <a href="dev-provided-matchers.html" title="Matchers">Matchers</a>
            </li>
                      <li class="none">
                          <a href="dev-provided-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
            </li>
              </ul>
        </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>Mailets<a name="Mailets"></a></h2>

<p>James provides a number of implemented Mailets for use by James administrators in their 
configurations.  These are primarily mailets that members of the James developer or user 
communities have found useful in their own configurations.  A description of how to configure 
Mailets and use them in the James SpoolManager can be found <a href="config-mailetcontainer.html">here</a>.</p>

<div class="section"><h3>AddFooter<a name="AddFooter"></a></h3>
<p>Description: This mailet adds a text footer to the message.</p>

<p>Parameters:
</p><ul>
<li><b>text</b> (required) - the text that will be added as a footer to the message.</li>
</ul>

</div>

<div class="section"><h3>AddHabeasWarrantMark<a name="AddHabeasWarrantMark"></a></h3>
<p>Description: This mailet adds a Habeas warrant mark (see <a class="externalLink" href="http://habeas.com">http://habeas.com</a> for details) to the message.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>AddHeader<a name="AddHeader"></a></h3>
<p>Description: This mailet is <b>deprecated</b> .Please use SetMimeHeader .</p>
</div>

<div class="section"><h3>AvalonListserv<a name="AvalonListserv"></a></h3>
<p>Provides basic list server functionality.  Implements basic filters for emails sent to the list, 
including restriction of senders to members, diallowing attachments in list messages, and subject line 
processing</p>

<p>Parameters:
</p><ul>
<li><b>repositoryName</b> (required) - the name of the user repository that contains the users 
for this list.</li>
<li><b>membersonly</b> (optional) - whether only members of the list can send messages to this 
list.  Defaults to false.</li>
<li><b>attachmentsallowed</b> (optional) - whether attachments are allowed in messages sent to this 
list.  Defaults to true.</li>
<li><b>replytolist</b> (optional) - whether the reply-to address for all messages sent to this 
list is set to the list address.  Defaults to true.</li>
<li><b>subjectprefix</b> (optional) - a String value.  If set, this value is prepended to the subject
line of all messages sent to the list.</li>
<li><b>autobracket</b> (optional) - a boolean value.  If a subjectprefix is set, this value determines 
whether the prefix is bracketed before being prepended to the subject line.  Defaults to true.</li>
</ul>

</div>

<div class="section"><h3>AvalonListservManager<a name="AvalonListservManager"></a></h3>
<p>Processes list management commands of the form &lt;list-name&gt;-on@&lt;host&gt; and 
&lt;list-name&gt;-off@&lt;host&gt; where &lt;list-name&gt; and lt;host&gt; are arbitrary.  Note 
that this should be used in tandem with a CommandForListserv matcher to ensure that only commands 
intended for a specific list are processed.</p>

<p>Parameters:
</p><ul>
<li><b>repositoryName</b> (required) - the name of the user repository that contains the users 
for this list.</li>
</ul>

</div>

<div class="section"><h3>BayesianAnalysis<a name="BayesianAnalysis"></a></h3>
<p>Description: Spam detection mailet using bayesian analysis techniques.</p>

<p>Parameters:
</p><ul>
<li><b>repositoryPath</b> (required) - The repositoryPath which is used.</li>
<li><b>headerName</b> - The HeaderName which get adds to holds the Probalitity. Default is <i>X-MessageIsSpamProbability</i>.</li>
<li><b>ignoreLocalSender</b> - Set to true if you want to ignore messages from local senders. By local sender we mean a return-path 
with a local server part (server listed in &lt;servernames&gt; in mailetcontainer.xml). Default is <i>false</i>.</li>
<li><b>maxSize</b> - Set this to the maximum message size (in bytes) after analysis will be skipped. Default is <i>100000</i>.</li>
</ul>

</div>

<div class="section"><h3>BayesianAnalysisFeeder<a name="BayesianAnalysisFeeder"></a></h3>
<p>Description: Feeds ham OR spam messages to train the BayesianAnalysis mailet.</p>

<p>Parameters:
</p><ul>
<li><b>repositoryPath</b> (required) - The repositoryPath which is used.</li>
<li><b>feedType</b> (required) - The type of the message which is used to feed the mailet. Allowed values are <i>spam</i> and <i>ham</i>.</li>
<li><b>maxSize</b> - Set this to the maximum message size (in bytes) after analysis will be skipped. Default is <i>100000</i>.</li>
</ul>

</div>

<div class="section"><h3>Bounce<a name="Bounce"></a></h3>
<p>Description: Generates a response to the reverse-path address.</p>

<p>Parameters:
</p><ul>
<li><b>sender</b> - The senderAddress which will be used for sending the bounce. Possible values: <i>address</i>, <i>postmaster</i> , <i>sender</i>,
<i>unaltered</i>. Default <i>postmaster</i>.</li>
<li><b>attachError</b> - Attach error. Default is false.</li>
<li><b>message</b> - Set the message which get included in the bounce.</li>
<li><b>prefix</b> - Optional subject prefix prepended to the original message.</li>
<li><b>inline</b> - Specify which mailpart will be included in the email body. Possible values: <i>unaltered</i>, <i>heads</i>, <i>body</i> , <i>all</i>,
&quot;none&quot;. Default &quot;none&quot;.</li>
<li><b>attachment</b> - Specify which mailpart will be attached to the email. Possible values: <i>none</i>, <i>heads</i>, <i>body</i>, <i>all</i>,
<i>message</i>. Default <i>message</i>.</li>
<li><b>passThrough</b> - If set to false the email will not processed after the bounce. Possible values: <i>true</i>, <i>false</i>.
Default <i>true</i>.</li>
<li><b>fakeDomainCheck</b> - If set to false true will check if the sender domain is valid. Possible values: <i>true</i>, <i>false</i>.
Default <i>true</i>.</li>
<li><b>debug</b> - If set true you can enable debugging. Possible values: <i>true</i>, <i>false</i>. 
Default <i>false</i>.</li>
</ul>

</div>

<div class="section"><h3>ClamAVScan<a name="ClamAVScan"></a></h3>
<p>Description: Does an antivirus scan check using a ClamAV daemon (CLAMD).</p>

<p>Parameters:
</p><ul>
<li><b>host</b> - The host name of the server where CLAMD runs. The default is <i>localhost</i></li>
<li><b>port</b>  - The port on which CLAMD listens. The default is <i>3310</i>.</li>
<li><b>maxPings</b> - The maximum number of connection retries during startup. If the value is <i>0</i> no startup 
test will be done.</li>
<li><b>pingIntervalMillis</b> (required) - The interval (in milliseconds) between each connection retry during startup. 
The default is <i>30000</i> (30 seconds)</li>
<li><b>streamBufferSize</b> - the BufferedOutputStream buffer size to use writing to the stream connection. The 
default is <i>8192</i>.</li>
<li><b>debug</b> - If set true you can enable debugging. Possible values: <i>true</i>, <i>false</i>. 
Default <i>false</i>.</li>
</ul>

</div>

<div class="section"><h3>CommandListservFooter<a name="CommandListservFooter"></a></h3>
<p>Description: CommandListservFooter is based on the AddFooter mailet. It is used by the CommandListservProcessor to inject a footer into mailing list.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>CommandListservManager<a name="CommandListservManager"></a></h3>
<p> Description: CommandListservManager is the default implementation of ICommandListservManager.
It loads all the configured IListServCommands and delegates to them at runtime.
<br />
It isn't responsible for procesing messages sent to the main mailing list, but is responsible for
individual commands sent by users, such as: info, subscribe, etc...
<br />
Requests sent to the CommandListservManager take the form of:
</p><div><pre>
&lt;listName&gt;-&lt;commandName&gt;@domain
</pre></div>
 
If the command isn't recognized an error will be sent.
<br />
<br />
The configuration for this mailet sould be in the 'root' processor block.

<p>Parameters:
</p><ul>
<li><b>listName</b> - The listname </li>
<li><b>displayName</b>  - The full listname</li>
<li><b>listOwner</b> - An emailaddress which will be used as owneraddress.</li>
<li><b>repositoryName</b> - the repository name </li> 
<li><b>listDomain</b> - The domain</li>
</ul>

<br /> 
<p> Example configuration:
</p><div class="source"><pre>
&lt;mailet match=&quot;CommandListservMatcher=announce@localhost&quot; class=&quot;CommandListservManager&quot;&gt;
  &lt;listName&gt;announce&lt;/listName&gt;
  &lt;displayName&gt;Announce mailing list&lt;/displayName&gt;
  &lt;listOwner&gt;owner@localhost&lt;/listOwner&gt;
  &lt;repositoryName&gt;list-announce&lt;/repositoryName&gt;
  &lt;listDomain&gt;localhost&lt;/listDomain&gt;

  &lt;commandpackages&gt;
     &lt;commandpackage&gt;org.apache.james.transport.mailets.listservcommands&lt;/commandpackage&gt;
  &lt;/commandpackages&gt;

  &lt;commands&gt;
     &lt;command name=&quot;subscribe&quot; class=&quot;Subscribe&quot;/&gt;
     &lt;command name=&quot;subscribe-confirm&quot; class=&quot;SubscribeConfirm&quot;/&gt;
     &lt;command name=&quot;unsubscribe&quot; class=&quot;UnSubscribe&quot;/&gt;
     &lt;command name=&quot;unsubscribe-confirm&quot; class=&quot;UnSubscribeConfirm&quot;/&gt;
     &lt;command name=&quot;error&quot; class=&quot;ErrorCommand&quot;/&gt;
     &lt;command name=&quot;owner&quot; class=&quot;Owner&quot;/&gt;
     &lt;command name=&quot;info&quot; class=&quot;Info&quot;/&gt;
  &lt;/commands&gt;
 &lt;/mailet&gt;
</pre></div> 

</div>


<div class="section"><h3>DSNBounce<a name="DSNBounce"></a></h3>
<p>Description: Generates a Delivery Status Notification (DSN). Note that this is different than a mail-client's
reply, which would use the Reply-To or From header.Bounced messages are attached in their entirety (headers and
content) and the resulting MIME part type is &quot;message/rfc822&quot;.
The reverse-path and the Return-Path header of the response is set to <i>null</i> (<i>&lt;&gt;</i>),
meaning that no reply should be sent.
A sender of the notification message can optionally be specified.
If one is not specified, the postmaster's address will be used.</p>

<p>Parameters:
</p><ul>
<li><b>sender</b> - An address, postmaster,sender or unaltered. Default is <i>postmaster</i></li>
<li><b>prefix</b>  - Optional subject prefix prepended to the original message.</li>
<li><b>attachment</b> - Values are message, heads or none. Default is <i>message</i>. 
test will be done.</li>
<li><b>messageString</b> - the message sent in the bounce, the first occurrence of the pattern [machine] is replaced with the name of the executing machine, default=Hi. This is the James mail server at [machine] .... </li> 
<li><b>passThrough</b> (optional) - a boolean value (true/false) indicating whether
processing should continue on the message is on.  If false, the original message is GHOSTed.  Defaults to false.</li>
<li><b>debug</b> - If set true you can enable debugging. Possible values: <i>true</i>, <i>false</i>. 
Default <i>false</i>.</li> 
</ul>

</div>

<div class="section"><h3>Forward<a name="Forward"></a></h3>
<p>Description: This mailet forwards the message to a set of recipients.</p>

<p>Parameters:
</p><ul>
<li><b>forwardto</b> (required) - a comma delimited list of email addresses.</li>
</ul>

</div>

<div class="section"><h3>FromRepository<a name="FromRepository"></a></h3>
<p>Description: This mailet ee-spools mail found in the specified Repository.</p>

<p>Parameters:
</p><ul>
<li><b>repositoryPath</b> (required) - The repositoryPath which is used.</li>
<li><b>processor</b> (required) - The target processor to move the mails to.</li>
<li><b>delete</b> - If set to true the mails get deleted after re-spooling. Default is <i>false</i>.</li>
</ul>

</div>

<div class="section"><h3>ICommandListservManager<a name="ICommandListservManager"></a></h3>
<p>Description: ICommandListservManager is the interface that describes the functionality of any command based list serv managers.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>JDBCAlias<a name="JDBCAlias"></a></h3>
<p>Description: This mailet does alias translation for email addresses stored in a database table.</p>

<p>Parameters:
</p><ul>
<li><b>mappings</b> (required) - a URL of the form db://&lt;data-source&gt;/&lt;table&gt;, where 
&lt;table&gt; is the table in the database containing the alias info and &lt;data-source&gt; is the name 
of the data-source in mailetcontainer.xml that is to be used.</li>
<li><b>source-column</b> (required) - the column containing the aliases.</li>
<li><b>target-column</b> (required) - the column containing the alias targets.</li>
</ul>

</div>

<div class="section"><h3>JDBCRecipientRewriteTable<a name="JDBCRecipientRewriteTable"></a></h3>
<p>Description: This mailet does complex alias translation for email addresses stored in a database table.</p>

<p>Parameters:
</p><ul>
<li><b>table</b> (required) - the URL describing the database table.  This URL has the form 
db://&lt;data-source&gt;/&lt;table&gt; where &lt;data-source&gt; and &lt;table&gt; are the names of 
the data-source as defined in mailetcontainer.xml and the table in the database.</li>
<li><b>sqlquery</b> (optional) - the text of the SQL query used by the mailet to do user
lookup.  The default is &quot;select RecipientRewriteTable.target-address from RecipientRewriteTable, RecipientRewriteTable as VUTDomains where (RecipientRewriteTable.user like ? or RecipientRewriteTable.user like '\\%') and (RecipientRewriteTable.domain like ? or (RecipientRewriteTable.domain like '\\%' and VUTDomains.domain like ?)) order by concat(RecipientRewriteTable.user,'@',RecipientRewriteTable.domain) desc limit 1&quot;</li>
</ul>

</div>

<div class="section"><h3>LocalDelivery<a name="LocalDelivery"></a></h3>
<p>Description: This mailet delivers messages to local mailboxes.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>LogMessage<a name="LogMessage"></a></h3>
<p>Description: Logs Message Headers and/or Body.</p>

<p>Parameters:
</p><ul>
<li><b>passThrough</b> (optional) - If the &quot;passThrough&quot; in confs is true the mail will be left untouched in
the pipe. If false will be destroyed.  Default is true.</li>
<li><b>headers</b> (optional) - If set to true the headers get logged. Default is true&quot;</li>
<li><b>body</b> (optional) - If set to true the body get logged. Default is true.</li>
<li><b>bodyMax</b> (optional) - The max length wich should be logged. Default is log all.</li>
<li><b>comment</b> (optional) - The comment which should be logged  Default is none.</li>
</ul>

</div>

<div class="section"><h3>NotifyPostmaster<a name="NotifyPostmaster"></a></h3>
<p>Description: This mailet forwards the message as an attachment to the James postmaster.</p>

<p>Parameters:
</p><ul>
<li><b>sendingAddress</b> (optional) - the address from which the forwarded email will be 
sent.  Defaults to the postmaster address.</li>
<li><b>notice</b> (optional) - the text message that will accompany the forwarded message.  Defaults 
to &quot;We were unable to deliver the attached message because of an error in the mail server.&quot;</li>
<li><b>attachStackTrace</b> (optional) - whether an error stack trace is attached to the forwarded message.</li>
</ul>

</div>

<div class="section"><h3>NotifySender<a name="NotifySender"></a></h3>
<p>Description: This mailet forwards the message as an attachment to the original sender.</p>

<p>Parameters:
</p><ul>
<li><b>sendingAddress</b> (optional) - the address from which the forwarded email will be 
sent.  Defaults to the postmaster address.</li>
<li><b>notice</b> (optional) - the text message that will accompany the forwarded message.  Defaults 
to &quot;We were unable to deliver the attached message because of an error in the mail server.&quot;</li>
<li><b>attachStackTrace</b> (optional) - whether an error stack trace is attached to the forwarded message.</li>
</ul>

</div>

<div class="section"><h3>Null<a name="Null"></a></h3>
<p>Description: This mailet ends processing for this mail.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>PostmasterAlias<a name="PostmasterAlias"></a></h3>
<p>Description: Intercepts all mails addressed to postmaster@&lt;domain&gt; where &lt;domain&gt; is one
of the domains managed by this James server and substitutes the configured James postmaster address for
the original recipient address.  This mailet is inserted automatically by James at the head of the root
processor.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>Redirect<a name="Redirect"></a></h3>
<p>Description: A mailet providing powerful, configurable redirection services.<br />
      This mailet can produce listserver, forward and notify behaviour, with the
      original message intact, attached, appended or left out altogether.<br />
      This built in functionality is controlled by the configuration as described
      <a href="apidocs/org/apache/james/transport/mailets/Redirect.html">here</a>.</p>
<p>It is also intended to be easily subclassed to make providing bespoke redirection
    mailets simple. <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
    <a href="apidocs/org/apache/james/transport/mailets/Redirect.html">here</a>.</p>

<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/Redirect.html">See javadocs.</a></p>
</div>

<div class="section"><h3>RemoteDelivery<a name="RemoteDelivery"></a></h3>

  <p>Manages delivery of messages to recipients on remote SMTP hosts.</p>
  
  <p>Parameters:
    </p><ul>
      <li><b>outgoing</b> (required) - The URL for the repository that will hold messages being processed
      by the RemoteDelivery Mailet.</li>
      <li><b>delayTime</b> (optional) - a non-negative Long value that is the time in
      milliseconds between redelivery attempts for a particular mail.  Defaults to six hours.</li>
      <li><b>maxRetries</b> (optional) - a non-negative Integer value that is number of times
      the Mailet will attempt to deliver a particular mail.  Defaults to five.</li>
      <li><b>timeout</b> (optional) - The SMTP connection timeout for SMTP connections generated
      by this Mailet.  Defaults to 60 seconds.</li>
      <li><b>deliveryThreads</b> (optional) - The number of threads this Mailet will use to generate
      SMTP connections.</li>
      <li><b>gateway</b> (optional) - The host name of the SMTP server 
      to be used as a gateway for this server.  If this value is set, then all 
      messages will be delivered to the gateway server, regardless of recipient 
      address.  To specify more than one gateway server, add multiple gateway tags, 
      each containing one value.  If more than one server is specified, they will be 
      tried in order until one is successful.  In addition the port may be specified 
      for each gateway in the format &lt;host&gt;:&lt;port&gt;.  If this 
      value is unset, delivery will occur to SMTP servers resolved by MX lookup.</li>
      <li><b>gatewayPort</b> (optional) - The default port number of the 
      SMTP server to be used as a gateway for this server.  This value will be 
      employed when a gateway is set <i>and</i> the gateway value does not specify 
      a port as described above.</li>
      <li><b>gatewayUsername</b> (optional) - The username to use when
      authenticating to the defined gateway.  This value will be 
      employed when a gateway is set.</li>
      <li><b>gatewayPassword</b> (optional) - The password to use when
      authenticating to the defined gateway.  This value will be 
      employed when a gateway is set.</li>
      <li><b>bind</b> (optional) - If present, this value is a string 
      describing the local IP address to which the mailet should be bound while 
      delivering emails. If the tag is absent then the service will bind to the 
      default local address of the machine. This tag is useful for multihomed machines.<br />
      Note: Currently you must use the same IP address for all of those RemoteDelivery 
      instances where you explicitly supply a bind address.</li>
      <li><b>startTLS</b> (optional) - a boolean value (true/false) indicating whether starTLS is
      on.  Defaults to false.</li>
      <li><b>sslEnable</b> (optional) - a boolean value (true/false) indicating whether starTLS is
      on.  Defaults to false.</li>
      <li><b>debug</b> (optional) - a boolean value (true/false) indicating whether debugging is
      on.  Defaults to false.</li>
    </ul>
  
  
</div>

<div class="section"><h3>RemoveAllMailAttributes<a name="RemoveAllMailAttributes"></a></h3>
<p>Description: Removes all attributes on the Mail instance.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>RemoveMailAttributes<a name="RemoveMailAttributes"></a></h3>
<p>Description: Remove attributes on the Mail instance.</p>

<p>Parameters:
</p><ul>
<li><b>name</b> (required) - The name of the attribute to remove.</li>
</ul>

</div>

<div class="section"><h3>Resend<a name="Resend"></a></h3>
<p>Description:A mailet providing configurable redirection services. For more information see 
the javadocs <a href="apidocs/org/apache/james/transport/mailets/Resend.html">here</a>.</p>

<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/Resend.html">See javadocs.</a></p>
</div>

<div class="section"><h3>ServerTime<a name="ServerTime"></a></h3>
<p>Description: This mailet sends a message to the sender of the original mail message with a server timestamp.</p>

<p>Parameters: None.</p>
</div>

<div class="section"><h3>SetMailAttributes<a name="SetMailAttributes"></a></h3>
<p>Description: Set attributes on the Mail instance.</p>

<p>Parameters:
</p><ul>
<li><b>name</b> (required) - The name of the attribute to set.</li>
</ul>

</div>

<div class="section"><h3>SetMimeHeader<a name="SetMimeHeader"></a></h3>
<p>Description: Set an MimeHeader on a MimeMessage.</p>

<p>Parameters:
</p><ul>
<li><b>name</b> (required) - the name of the header to be added to the message.</li>
<li><b>value</b> (required) - the text that will be added as a header to the message.</li>
</ul>

</div>

<div class="section"><h3>SMIMECheckSignature<a name="SMIMECheckSignature"></a></h3>
<p>Description: Verifies the s/mime signature of a message. The s/mime signing ensure that
the private key owner is the real sender of the message. To be checked by
this mailet the s/mime signature must contain the actual signature, the
signer's certificate and optionally a set of certificate that can be used to
create a chain of trust that starts from the signer's certificate and leads
to a known trusted certificate.
</p>
<p>
This check is composed by two steps: firstly it's ensured that the signature
is valid, then it's checked if a chain of trust starting from the signer
certificate and that leads to a trusted certificate can be created. The first
check verifies that the the message has not been modified after the signature
was put and that the signer's certificate was valid at the time of the
signing. The latter should ensure that the signer is who he declare to be.
</p>

<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMECheckSignature.html">See javadocs.</a></p>
</div>

<div class="section"><h3>SMIMEDecrypt<a name="SMIMEDecrypt"></a></h3>
<p>Description: This mailet decrypts a s/mime encrypted message. It takes as input an
encrypted message and it tries to dechiper it using the key specified in its
configuration. If the decryption is successful the mail will be changed and
it will contain the decrypted message. The mail attribute
<tt>org.apache.james.SMIMEDecrypt</tt> will contain the public
certificate of the key used in the process. </p>

<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMEDecrypt.html">See javadocs.</a></p>
</div>

<div class="section"><h3>SMIMESign<a name="SMIMESign"></a></h3>
<p>Description: Puts a <i>server-side</i> SMIME signature on a message.
It is a concrete subclass of SMIMEAbstractSign, with very few modifications to it.</p>
<p>A text file with an explanation text is attached to the original message,
and the resulting message with all its attachments is signed.
The resulting appearence of the message is almost unchanged: only an extra attachment
and the signature are added.</p>

<p>Parameters: <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMESign.html">See javadocs.</a></p>
</div>

<div class="section"><h3>ToProcessor<a name="ToProcessor"></a></h3>
<p>Description: Redirects processing of the mail message to the specified processor.</p>

<p>Parameters:
</p><ul>
<li><b>processor</b> (required) - the name of the processor to which the message
is to be redirected.</li>
<li><b>noticeText</b> (optional) - a String value that, if present,
is set as the error message of the redirected message.  If this value is not
present, no error message is set.</li>
</ul>

</div>

<div class="section"><h3>ToSenderFolder<a name="ToSenderFolder"></a></h3>
  <p>
    Description: Place a copy of the mail message in a folder of the sender. It needs to be used in combination
    with the SenderIsLocal matcher
  </p>
  
  <p>Parameters:
    </p><ul>
      <li><b>folder</b> (required) - The folder name of the Sender mailbox in which the mail will be copied.</li>
      <li><b>consume</b> (optional) - flag tru or false: will tell is the mail will be further processed by the upcoming processor mailets, or not</li>
    </ul>
  
  
  <div class="source"><pre>
&lt;mailet match=&quot;SenderIsLocal&quot; class=&quot;ToSenderFolder&quot;&gt;
  &lt;folder&gt;Sent&lt;/folder&gt;
  &lt;consume&gt;false&lt;/consume&gt;
&lt;/mailet&gt;
  </pre></div>
  
</div>

<div class="section"><h3>ToMultiRepository<a name="ToMultiRepository"></a></h3>
<p>Description: Receives a Mail from JamesSpoolManager and takes care of delivery of the
message to local inboxes or a specific repository.
 
Differently from LocalDelivery this does not lookup the UserRepository This
simply store the message in a repository named like the local part of the
recipient address.
 
If no repository is specified then this fallback to MailServer.getUserInbox.
Otherwise you can add your own configuration for the repository.</p>
<p>Parameters:
</p><ul>
<li><b>repositoryUrl</b> (required) - the URL of the repository to which the message
is to be added.</li>
<li><b>addDeliveryHeader</b> (optional) - a String value which can be used specify a header which will add to the message. 
Default is to not add a header.</li>
</ul>

</div>

<div class="section"><h3>ToRepository<a name="ToRepository"></a></h3>
<p>Places a copy of the message in the specified repository.</p>

<p>Parameters:
</p><ul>
<li><b>repositoryPath</b> (required) - the URL of the repository to which the message
is to be added.</li>
<li><b>passThrough</b> (optional) - a boolean value (true/false) indicating whether
processing should continue on the message is on.  If false, the original message is GHOSTed.  Defaults to false.</li>
</ul>

</div>

<div class="section"><h3>UseHeaderRecipients<a name="UseHeaderRecipients"></a></h3>
<p>Description: Ignores the recipients associated with the Mail interface.  Instead, it regenerates the
mail recipients from the MimeMessage headers (To, Cc, Bcc) and inserts a new message at the queue root
these new recipients.  The original message is GHOSTed.</p>

<p>Parameters:
</p><ul>
<li><b>debug</b> (optional) - a boolean value (true/false) indicating whether debugging is
on.  Defaults to false.</li>
</ul>

</div>

<div class="section"><h3>UsersRepositoryAliasingForwarding<a name="UsersRepositoryAliasingForwarding"></a></h3>
<p>Receives a Mail from JamesSpoolManager and takes care of delivery of the
message to local inboxes.</p>

<p>Parameters:
</p><ul>
<li><b>enableAliases</b> (optional) - Specify wether the user aliases should 
be looked up or not. Default is false.</li>
<li><b>enableForwarding</b> (optional) -Enable the forwarding. Default to 
false.</li>
<li><b>usersRepository</b> (optional) - Specific users repository
name. Default to empty. If empty does lookup the default userRepository.
</li>
</ul>

</div>

<div class="section"><h3>WhiteListManager<a name="WhiteListManager"></a></h3>
<p>Manages for each local user a &quot;white list&quot; of remote addresses whose messages
should never be blocked as spam.</p>
<p>The normal behaviour is to check, for a local sender, if a remote recipient
is already in the list: if not, it will be automatically inserted.
This is under the interpretation that if a local sender <i>X</i> sends a message to a
remote recipient <i>Y</i>, then later on if a message is sent by <i>Y</i> to <i>X</i> it should be
considered always valid and never blocked; hence <i>Y</i> should be in the white list
of <i>X</i>.</p>
<p>Another mode of operations is when a local sender sends a message to <i>whitelistManagerAddress</i>
with one of three specific values in the subject, to
(i) send back a message displaying a list of the addresses in his own list;
(ii) insert some new addresses in his own list;
(iii) remove some addresses from his own list.
In all this cases the message will be ghosted and the postmaster will reply
to the sender.</p>
<p> The sender name is always converted to its primary name (handling aliases).</p>

<p>Parameters:
</p><ul>
<li><b>repositoryPath</b>  - The repository path.</li>
<li><b>automaticInsert</b> (optional) - If true automatically inserts the local sender to remote 
recipients entries in the whitelist. Default is false.</li>
<li><b>whitelistManagerAddress</b> (optional) -  Set this to an email address of the &quot;whitelist manager&quot; to send 
commands to (default is null).</li>
<li><b>displayFlag</b> (optional) - Set this to a unique text that you can use (by sending a 
message to the &quot;whitelist manager&quot; above) to tell the mailet to send back the contents of the white list. Default is null.</li>
<li><b>insertFlag</b> (optional) - Set this to a unique text that you can use (by sending a message to the &quot;whitelist manager&quot; above)
to tell the mailet to insert some new remote recipients to the white list. Default is null.</li>
<li><b>removeFlag</b> (optional) - Set this to a unique text that you can use (by sending a message to the &quot;whitelist manager&quot; above)
to tell the mailet to remove some remote recipients from the white list. Default is null.</li>
</ul>

</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>
