You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/06/15 10:35:30 UTC

[05/15] james-site git commit: JAMES-1789 Refreshing mailet list

http://git-wip-us.apache.org/repos/asf/james-site/blob/4c2da3c0/content/server/dev-provided-mailets.html
----------------------------------------------------------------------
diff --git a/content/server/dev-provided-mailets.html b/content/server/dev-provided-mailets.html
index 921e222..4400388 100644
--- a/content/server/dev-provided-mailets.html
+++ b/content/server/dev-provided-mailets.html
@@ -67,7 +67,7 @@
                               <a href="http://www.apache.org/index.html" id="bannerRight">
               
                                         
-        <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
+        <img src="../images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
                 </a>
             <div class="clear">
         <hr/>
@@ -265,701 +265,2524 @@
  
 
 <div class="section">
-<h2>Mailets<a name="Mailets"></a></h2>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <div class="section"><h2>Mailets and Matchers Reference<a name="Mailets_and_Matchers_Reference"></a></h2>Items marked as Experimental are not yet supported by James; however, you can try 
+them.</div><table border="0" class="bodyTable"><tr class="a"><td><div class="section"><h3>Matchers<a name="Matchers"></a></h3><ul><li><a 
+href="#AbstractNetworkMatcher">AbstractNetworkMatcher</a></li><li><a href="#AbstractQuotaMatcher">AbstractQuotaMatcher (Experimental)</a></li><li><a 
+href="#AbstractSQLWhitelistMatcher">AbstractSQLWhitelistMatcher (Experimental)</a></li><li><a href="#AbstractStorageQuota">AbstractStorageQuota (Experimental)</a></li><li><a 
+href="#All">All</a></li><li><a href="#And">And</a></li><li><a href="#AnotherMatcher">AnotherMatcher</a></li><li><a href="#AttachmentFileNameIs">AttachmentFileNameIs (Experimental)</a></li><li><a 
+href="#CommandForListserv">CommandForListserv (Experimental)</a></li><li><a href="#CommandListservMatcher">CommandListservMatcher (Experimental)</a></li><li><a 
+href="#CompareNumericHeaderValue">CompareNumericHeaderValue (Experimental)</a></li><li><a href="#CompositeMatcher">CompositeMatcher</a></li><li><a href="#CustomMatcher">CustomMatcher</a></li><li><a 
+href="#FetchedFrom">FetchedFrom</a></li><li><a href="#FileRegexMatcher">FileRegexMatcher (Experimental)</a></li><li><a href="#GenericCompositeMatcher">GenericCompositeMatcher</a></li><li><a 
+href="#GenericMatcher">GenericMatcher</a></li><li><a href="#GenericRecipientMatcher">GenericRecipientMatcher</a></li><li><a href="#GenericRegexMatcher">GenericRegexMatcher</a></li><li><a 
+href="#HasAttachment">HasAttachment</a></li><li><a href="#HasHabeasWarrantMark">HasHabeasWarrantMark (Experimental)</a></li><li><a href="#HasHeader">HasHeader</a></li><li><a 
+href="#HasMailAttribute">HasMailAttribute</a></li><li><a href="#HasMailAttributeWithValue">HasMailAttributeWithValue</a></li><li><a 
+href="#HasMailAttributeWithValueRegex">HasMailAttributeWithValueRegex</a></li><li><a href="#HostIs">HostIs</a></li><li><a href="#HostIsLocal">HostIsLocal</a></li><li><a 
+href="#InSpammerBlacklist">InSpammerBlacklist (Experimental)</a></li><li><a href="#IsInWhiteList">IsInWhiteList (Experimental)</a></li><li><a href="#IsOverQuota">IsOverQuota</a></li><li><a 
+href="#IsSMIMEEncrypted">IsSMIMEEncrypted</a></li><li><a href="#IsSMIMESigned">IsSMIMESigned</a></li><li><a href="#IsSingleRecipient">IsSingleRecipient</a></li><li><a 
+href="#IsX509CertificateSubject">IsX509CertificateSubject</a></li><li><a href="#MailboxQuotaFixed">MailboxQuotaFixed (Experimental)</a></li><li><a href="#MatcherInverter">MatcherInverter</a></li><li><a 
+href="#NESSpamCheck">NESSpamCheck (Experimental)</a></li><li><a href="#NetworkIsInWhitelist">NetworkIsInWhitelist (Experimental)</a></li><li><a href="#Not">Not</a></li><li><a href="#Or">Or</a></li><li><a 
+href="#RecipientIs">RecipientIs</a></li><li><a href="#RecipientIsLocal">RecipientIsLocal</a></li><li><a href="#RecipientIsRegex">RecipientIsRegex</a></li><li><a 
+href="#RelayLimit">RelayLimit</a></li><li><a href="#RemoteAddrInNetwork">RemoteAddrInNetwork</a></li><li><a href="#RemoteAddrNotInNetwork">RemoteAddrNotInNetwork</a></li><li><a 
+href="#SMTPAuthSuccessful">SMTPAuthSuccessful</a></li><li><a href="#SMTPAuthUserIs">SMTPAuthUserIs</a></li><li><a href="#SMTPIsAuthNetwork">SMTPIsAuthNetwork (Experimental)</a></li><li><a 
+href="#SenderHostIs">SenderHostIs</a></li><li><a href="#SenderHostIsLocal">SenderHostIsLocal</a></li><li><a href="#SenderInFakeDomain">SenderInFakeDomain (Experimental)</a></li><li><a 
+href="#SenderIs">SenderIs</a></li><li><a href="#SenderIsLocal">SenderIsLocal</a></li><li><a href="#SenderIsNull">SenderIsNull</a></li><li><a href="#SenderIsRegex">SenderIsRegex</a></li><li><a 
+href="#SentByMailet">SentByMailet</a></li><li><a href="#SizeGreaterThan">SizeGreaterThan</a></li><li><a href="#SubjectIs">SubjectIs</a></li><li><a 
+href="#SubjectStartsWith">SubjectStartsWith</a></li><li><a href="#TooManyLines">TooManyLines</a></li><li><a href="#TooManyRecipients">TooManyRecipients</a></li><li><a href="#UserIs">UserIs</a></li><li><a 
+href="#Xor">Xor</a></li></ul></div></td><td><div class="section"><h3>Mailets<a name="Mailets"></a></h3><ul><li><a href="#AbstractRecipientRewriteTable">AbstractRecipientRewriteTable 
+(Experimental)</a></li><li><a href="#AbstractSign">AbstractSign</a></li><li><a href="#AddDeliveredToHeader">AddDeliveredToHeader</a></li><li><a href="#AddFooter">AddFooter</a></li><li><a 
+href="#AddHabeasWarrantMark">AddHabeasWarrantMark (Experimental)</a></li><li><a href="#AddSubjectPrefix">AddSubjectPrefix</a></li><li><a href="#AmqpForwardAttribute">AmqpForwardAttribute</a></li><li><a 
+href="#AnotherMailet">AnotherMailet</a></li><li><a href="#BayesianAnalysis">BayesianAnalysis (Experimental)</a></li><li><a href="#BayesianAnalysis">BayesianAnalysis (Experimental)</a></li><li><a 
+href="#BayesianAnalysisFeeder">BayesianAnalysisFeeder (Experimental)</a></li><li><a href="#BayesianAnalysisFeeder">BayesianAnalysisFeeder (Experimental)</a></li><li><a 
+href="#Bounce">Bounce</a></li><li><a href="#ClamAVScan">ClamAVScan (Experimental)</a></li><li><a href="#ClassifyBounce">ClassifyBounce (Experimental)</a></li><li><a href="#Counter">Counter</a></li><li><a 
+href="#CustomMailet">CustomMailet</a></li><li><a href="#DSNBounce">DSNBounce</a></li><li><a href="#DumpSystemErr">DumpSystemErr</a></li><li><a 
+href="#ExceptionThrowingMailet">ExceptionThrowingMailet</a></li><li><a href="#Forward">Forward</a></li><li><a href="#FromRepository">FromRepository (Experimental)</a></li><li><a 
+href="#GenericMailet">GenericMailet</a></li><li><a href="#HeadersToHTTP">HeadersToHTTP (Experimental)</a></li><li><a href="#ICALToHeader">ICALToHeader</a></li><li><a 
+href="#ICALToJsonAttribute">ICALToJsonAttribute</a></li><li><a href="#ICalendarParser">ICalendarParser</a></li><li><a href="#Identity">Identity</a></li><li><a href="#JDBCAlias">JDBCAlias 
+(Experimental)</a></li><li><a href="#JDBCRecipientRewriteTable">JDBCRecipientRewriteTable (Experimental)</a></li><li><a href="#LocalDelivery">LocalDelivery</a></li><li><a 
+href="#LogMessage">LogMessage</a></li><li><a href="#MailAttributesToMimeHeaders">MailAttributesToMimeHeaders</a></li><li><a href="#ManageSieveMailet">ManageSieveMailet (Experimental)</a></li><li><a 
+href="#MetricsMailet">MetricsMailet</a></li><li><a href="#MimeDecodingMailet">MimeDecodingMailet</a></li><li><a href="#NotifyPostmaster">NotifyPostmaster</a></li><li><a 
+href="#NotifySender">NotifySender</a></li><li><a href="#Null">Null</a></li><li><a href="#OnlyText">OnlyText (Experimental)</a></li><li><a href="#PostmasterAlias">PostmasterAlias</a></li><li><a 
+href="#RecipientRewriteTable">RecipientRewriteTable</a></li><li><a href="#RecipientToLowerCase">RecipientToLowerCase</a></li><li><a href="#RecoverAttachment">RecoverAttachment 
+(Experimental)</a></li><li><a href="#Redirect">Redirect</a></li><li><a href="#RedirectNotify">RedirectNotify</a></li><li><a href="#RemoteDelivery">RemoteDelivery</a></li><li><a 
+href="#RemoveAllMailAttributes">RemoveAllMailAttributes</a></li><li><a href="#RemoveMailAttribute">RemoveMailAttribute</a></li><li><a href="#RemoveMimeHeader">RemoveMimeHeader</a></li><li><a 
+href="#ReplaceContent">ReplaceContent</a></li><li><a href="#Resend">Resend</a></li><li><a href="#SMIMECheckSignature">SMIMECheckSignature</a></li><li><a href="#SMIMEDecrypt">SMIMEDecrypt</a></li><li><a 
+href="#SMIMESign">SMIMESign</a></li><li><a href="#SPF">SPF (Experimental)</a></li><li><a href="#SerialiseToHTTP">SerialiseToHTTP (Experimental)</a></li><li><a href="#ServerTime">ServerTime 
+(Experimental)</a></li><li><a href="#SetMailAttribute">SetMailAttribute</a></li><li><a href="#SetMimeHeader">SetMimeHeader</a></li><li><a href="#Sieve">Sieve</a></li><li><a 
+href="#Sign">Sign</a></li><li><a href="#SpamAssassin">SpamAssassin (Experimental)</a></li><li><a href="#StripAttachment">StripAttachment</a></li><li><a 
+href="#TerminatingMailet">TerminatingMailet</a></li><li><a href="#ToProcessor">ToProcessor</a></li><li><a href="#ToRecipientFolder">ToRecipientFolder</a></li><li><a 
+href="#ToRepository">ToRepository</a></li><li><a href="#ToSenderFolder">ToSenderFolder (Experimental)</a></li><li><a href="#UnwrapText">UnwrapText (Experimental)</a></li><li><a 
+href="#UseHeaderRecipients">UseHeaderRecipients (Experimental)</a></li><li><a href="#UsersRepositoryAliasingForwarding">UsersRepositoryAliasingForwarding (Experimental)</a></li><li><a 
+href="#WhiteListManager">WhiteListManager (Experimental)</a></li><li><a href="#WrapText">WrapText (Experimental)</a></li><li><a href="#XMLRecipientRewriteTable">XMLRecipientRewriteTable 
+(Experimental)</a></li></ul></div></td></tr></table><div class="section"><h2>Matchers<a name="Matchers"></a></h2><div class="section"><h3><a 
+name="AbstractNetworkMatcher">AbstractNetworkMatcher</a></h3><p><p>
+AbstractNetworkMatcher makes writing IP Address matchers easier.
+</p>
+<p>
+This class extends the GenericMatcher, and as such, has access to the matcher
+condition via GenericMatcher.getCondition().<br>
+On initialization, the init method retrieves the condition from the defined
+matcher and create a corresponding NetMatcher.<br>
+The marcher condition has to respect the syntax waited by the NetMacher.
+</p>
+<p>
+This abstract network matcher needs to be implemented by a concrete class.<br>
+The implementing concrete class will call the matchNetwork method.
+</p></p></div><div class="section"><h3><a name="AbstractQuotaMatcher">AbstractQuotaMatcher (Experimental)</a><a name="AbstractQuotaMatcher_Experimental"></a></h3><p><P>Abstract matcher checking whether a 
+recipient has exceeded a maximum allowed quota.</P>
+<P>"Quota" at this level is an abstraction whose specific interpretation
+will be done by subclasses.</P> 
+<P>Although extending GenericMatcher, its logic is recipient oriented.</P></p></div><div class="section"><h3><a name="AbstractSQLWhitelistMatcher">AbstractSQLWhitelistMatcher (Experimental)</a><a 
+name="AbstractSQLWhitelistMatcher_Experimental"></a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="AbstractStorageQuota">AbstractStorageQuota (Experimental)</a><a 
+name="AbstractStorageQuota_Experimental"></a></h3><p><p>
+Experimental: Abstract matcher checking whether a recipient has exceeded a
+maximum allowed <I>storage</I> quota for messages standing in his inbox.
+</p>
+<p>
+"Storage quota" at this level is still an abstraction whose specific
+interpretation will be done by subclasses (e.g. could be specific for each
+user or common to all of them).
+</p>
+<p>
+This matcher need to calculate the mailbox size every time it is called. This
+can slow down things if there are many mails in the mailbox. Some users also
+report big problems with the matcher if a JDBC based mailrepository is used.
+</p></p></div><div class="section"><h3><a name="All">All</a></h3><p>Matches all mail.</p></div><div class="section"><h3><a name="And">And</a></h3><p>This matcher performs And conjunction between the two 
+recipients</p></div><div class="section"><h3><a name="AnotherMatcher">AnotherMatcher</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="AttachmentFileNameIs">AttachmentFileNameIs (Experimental)</a><a 
+name="AttachmentFileNameIs_Experimental"></a></h3><p><P>Checks if at least one attachment has a file name which matches any
+element of a comma-separated or space-separated list of file name masks.</P>
+<P>Syntax: <CODE>match="AttachmentFileNameIs=[-d] [-z] <I>masks</I>"</CODE></P>
+<P>The match is case insensitive.</P>
+<P>File name masks may start with a wildcard '*'.</P>
+<P>Multiple file name masks can be specified, e.g.: '*.scr,*.bat'.</P>
+<P>If '<CODE>-d</CODE>' is coded, some debug info will be logged.</P>
+<P>If '<CODE>-z</CODE>' is coded, the check will be non-recursively applied
+to the contents of any attached '*.zip' file.</P></p></div><div class="section"><h3><a name="CommandForListserv">CommandForListserv (Experimental)</a><a 
+name="CommandForListserv_Experimental"></a></h3><p>Returns positive if the recipient is a command for a listserv.  For example,
+if my listserv is james@list.working-dogs.com, this matcher will return true
+for james-on@list.working-dogs.com and james-off@list.working-dogs.com.</p></div><div class="section"><h3><a name="CommandListservMatcher">CommandListservMatcher (Experimental)</a><a 
+name="CommandListservMatcher_Experimental"></a></h3><p>CommandListservMatcher is the matcher that pairs with the CommandListservManager
+It checks to see if the request is intended for the ListservManager, but doesn't guarantee that it is a valid command.
+<br />
+To configure, insert this into the config.xml inside of the root processor block.
+<pre>
+&lt;mailet match="CommandListservMatcher=announce@localhost" class="CommandListservManager"&gt;
+...
+&lt;/mailet&gt;
+</pre></p></div><div class="section"><h3><a name="CompareNumericHeaderValue">CompareNumericHeaderValue (Experimental)</a><a name="CompareNumericHeaderValue_Experimental"></a></h3><p><P>Matches mails 
+containing a header with a numeric value whose comparison with the specified value is true.
+If the header is missing in the message, there will be <I>no match</I></P>
+<P>Configuration string: The headerName, a comparison operator and the numeric headerValue
+to compare with, <I>space or tab delimited</I>.</P>
+<P>The comparison operators are: <CODE>&lt, &lt=, ==, &gt=, &gt</CODE>;
+another set of operators is: <CODE>LT, LE, EQ, GE, GT</CODE>.
+Also the following operators are accepted: <CODE>=&lt, =, =&gt</CODE>.</P>
+<P>Example:</P>
+<PRE><CODE>
+   &lt;mailet match="CompareNumericHeaderValue=X-MessageIsSpamProbability > 0.9" class="ToProcessor"&gt;
+      &lt;processor&gt; spam &lt;/processor&gt;
+   &lt;/mailet&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="CompositeMatcher">CompositeMatcher</a></h3><p>A CompositeMatcher contains child matchers that are invoked in turn and their
+recipient results are composed from the composite operation. See And, Or, Xor
+and Not. One or more children may be supplied to a composite via declaration
+inside a processor in the james-config.xml file. When the composite is the
+outter-most declaration it must be named, as in the example below. The
+composite matcher may be referenced by name and used in a subsequent mailet.
+Any matcher may be included as a child of a composite matcher, including
+another composite matcher or the Not matcher. As a consequence, the class
+names: And, Or, Not and Xor are permanently reserved.
 
+<pre>
+  &lt;matcher name=&quot;a-composite&quot; match=&quot;Or&quot;&gt;
+     &lt;matcher match=&quot;And&quot;&gt;
+         &lt;matcher match=&quot;Not&quot;&gt;
+             &lt;matcher match=&quot;HostIs=65.55.116.84&quot;/&gt;
+         &lt;/matcher&gt;
+         &lt;matcher match=&quot;HasHeaderWithRegex=X-Verify-SMTP,Host(.*)sending to us was not listening&quot;/&gt;
+     &lt;/matcher&gt;
+     &lt;matchwe match=&quot;HasHeaderWithRegex=X-DNS-Paranoid,(.*)&quot;/&gt;
+  &lt;/matcher&gt;
+  
+  &lt;mailet match=&quot;a-composite&quot; class=&quot;ToProcessor&quot;&gt;
+      &lt;processor&gt;spam&lt;/processor&gt;
+  &lt;/mailet&gt;
+*
+</pre></p></div><div class="section"><h3><a name="CustomMatcher">CustomMatcher</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="FetchedFrom">FetchedFrom</a></h3><p>Matches mail with a header set by Fetchpop X-fetched-from 
+<br>
+fetchpop sets X-fetched-by to the "name" of the fetchpop fetch task.<br>
+This is used to match all mail fetched from a specific pop account.
+Once the condition is met the header is stripped from the message to prevent looping if the mail is re-inserted into the spool.
+
+$Id$</p></div><div class="section"><h3><a name="FileRegexMatcher">FileRegexMatcher (Experimental)</a><a name="FileRegexMatcher_Experimental"></a></h3><p>Initializes RegexMatcher with regular expressions 
+from a file.</p></div><div class="section"><h3><a name="GenericCompositeMatcher">GenericCompositeMatcher</a></h3><p>Abstract base class for CompositeMatchers. This class handles the child
+collection of Matchers associated with the CompositeMatcher.</p></div><div class="section"><h3><a name="GenericMatcher">GenericMatcher</a></h3><p><p>GenericMatcher implements the Matcher and 
+MatcherConfig interfaces.</p>
+<p>GenericMatcher makes writing matchers easier. It provides simple versions of
+the lifecycle methods init and destroy and of the methods in the MatcherConfig
+interface. GenericMatcher also implements the log method, declared in the
+MatcherContext interface.</p>
+
+<p>To write a generic matcher, you need only override the abstract match method.</p></p></div><div class="section"><h3><a name="GenericRecipientMatcher">GenericRecipientMatcher</a></h3><p>GenericMatcher 
+makes writing recipient based matchers easier. It provides
+simple versions of the lifecycle methods init and destroy and of the methods
+in the MatcherConfig interface. GenericMatcher also implements the log method,
+declared in the MatcherContext interface.</p></div><div class="section"><h3><a name="GenericRegexMatcher">GenericRegexMatcher</a></h3><p>This is a generic matcher that uses regular expressions.  If any 
+of
+the regular expressions match, the matcher is considered to have
+matched.  This is an abstract class that must be subclassed to feed
+patterns.  Patterns are provided by calling the compile method.  A
+subclass will generally call compile() once during init(), but it
+could subclass match(), and call it as necessary during message
+processing (e.g., if a file of expressions changed).</p></div><div class="section"><h3><a name="HasAttachment">HasAttachment</a></h3><p>Checks whether this message has an attachment</p></div><div 
+class="section"><h3><a name="HasHabeasWarrantMark">HasHabeasWarrantMark (Experimental)</a><a name="HasHabeasWarrantMark_Experimental"></a></h3><p>Matcher Info: <b>Habeas Warrant Mark Matcher (see 
+http://www.habeas.com for details).</b><br /></p><p><p>This matcher tests for the Hebeas Warrant Mark.
+For details see: http://www.hebeas.com</p>
+
+<p>Usage: Place this matcher</p>
+<pre><code>
+&lt;mailet match="HasHabeasWarrantMark" class="ToProcessor"&gt;
+    &lt;processor&gt; transport &lt;/processor&gt;
+&lt;/mailet&gt;
+</code></pre>
+<p>in the root processs before the DNSRBL block lists (the InSpammerBlacklist matcher).</p>
 
-<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>
+<p>Because the Habeas Warrant Mark is copyright material, I have asked for and
+received the following explicit statement from Habeas:</p>
+<pre>
+-----------------------------------
+From: Lindsey Pettit [mailto:support@habeas.com]
+Sent: Sunday, September 29, 2002 5:51
+To: Noel J. Bergman
+Subject: RE: Habeas and Apache James
+
+Dear Noel,
+
+> I guess that since your Warrant Mark is copyright, I should ask for
+> something from you to explicitly authorize that Hebeas will permit
+> this code to be included and distributed as part of Apache James
+> under the Apache Software License.  As we have established, the use
+> of the Habeas Warrant Mark for filtering is not restricted, but I
+> would like something to confirm that, so that Apache will be happy.
+
+I can hereby confirm to you that there is no license necessary in 
+order to use the Habeas mark for filtering.  That said, however, we 
+do insist that it not ever be used as a basis for rejecting email which 
+bears the Habeas mark.
+-----------------------------------
+</pre></p></div><div class="section"><h3><a name="HasHeader">HasHeader</a></h3><p>use: <pre><code>&lt;mailet match="HasHeader={&lt;header&gt;[=value]}+" class="..." /&gt;</code></pre>
+<p/>
+<p>This matcher checks if the header named is present. If complements the
+AddHeader mailet.</p></p></div><div class="section"><h3><a name="HasMailAttribute">HasMailAttribute</a></h3><p>Matcher Info: <b>Has Mail Attribute Matcher</b><br /></p><p><P>This Matcher determines if 
+the mail contains the attribute specified in the
+condition, and returns all recipients if it is the case.</P>
+<P>Sample configuration:</P>
+<PRE><CODE>
+&lt;mailet match="HasMailAttribute=whatever" class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="HasMailAttributeWithValue">HasMailAttributeWithValue</a></h3><p>Matcher Info: <b>Has Mail Attribute With Value Matcher</b><br /></p><p><p>This 
+Matcher determines if the mail contains the attribute specified in
+the condition and if the value answered when the method toString() is 
+invoked on the attribute is equal to the String value specified in the
+condition. If both tests are true, all recipients are returned, else null.
+</p>
 
+<p>Notes:</p>
+<p>The current matcher implementation expects a single String value to match
+on. This matcher requires two values, the attribute name and attribute
+value. This requires some implicit rules to govern how the single value
+supplied to the matcher is parsed into two values.</p> 
+<ul>
+<li>In the match condition, the split between the attribute name and the
+attribute value is made at the first comma. Attribute names that include
+a comma will parse incorrectly and therefore are not supported by this
+matcher.
+</li>
+<li>Leading and trailing spaces are removed from both the attribute name and
+attribute value specified in the condition and the tested attribute value in
+the mail prior to matching. Therefore, "abc" , " abc", "abc " and " abc " 
+are considered equivalent.
+</li>
+<li>To test for an empty string, do not specify an attribute value after the
+comma.
+</li>
+</ul>
 
-<div class="section">
-<h3>AddFooter<a name="AddFooter"></a></h3>
+<p>Sample configuration:</p>
+<pre><code>
+&lt;mailet match="HasMailAttributeWithValue=name, value" class=&quot;&lt;any-class&gt;&quot;&gt;
+</code></pre></p></div><div class="section"><h3><a name="HasMailAttributeWithValueRegex">HasMailAttributeWithValueRegex</a></h3><p>Matcher Info: <b>Has Mail Attribute Value Matcher</b><br 
+/></p><p><P>This Matcher determines if the mail contains the attribute specified in the
+condition and that attribute matches the supplied regular expression,
+it returns all recipients if that is the case.</P>
+<P>Sample configuration:</P>
+<PRE><CODE>
+&lt;mailet match="HasMailAttributeWithValueRegex=whatever,<regex>" class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE>
+Note: as it is not possible to put arbitrary objects in the configuration,
+toString() is called on the attribute value, and that is the value matched against.</p></div><div class="section"><h3><a name="HostIs">HostIs</a></h3><p>Matches mail to given hosts.</p></div><div 
+class="section"><h3><a name="HostIsLocal">HostIsLocal</a></h3><p>Matches mail to Domains which are local
+.</p></div><div class="section"><h3><a name="InSpammerBlacklist">InSpammerBlacklist (Experimental)</a><a name="InSpammerBlacklist_Experimental"></a></h3><p>Checks the network IP address of the sending 
+server against a blacklist of
+spammers. There are 3 lists that support this...
+<ul>
+<li><b>blackholes.mail-abuse.org</b>: Rejected - see
+http://www.mail-abuse.org/rbl/
+<li><b>dialups.mail-abuse.org</b>: Dialup - see
+http://www.mail-abuse.org/dul/
+<li><b>relays.mail-abuse.org</b>: Open spam relay - see
+http://www.mail-abuse.org/rss/
+</ul>
 
-<p>Description: This mailet adds a text footer to the message.</p>
+Example:
 
+<pre>
+&lt;mailet match="InSpammerBlacklist=blackholes.mail-abuse.org." class="ToProcessor"&gt;
+  &lt;processor&gt;spam&lt;/processor&gt;
+&lt;/mailet&gt;
+</pre></p></div><div class="section"><h3><a name="IsInWhiteList">IsInWhiteList (Experimental)</a><a name="IsInWhiteList_Experimental"></a></h3><p><p>
+Matches recipients having the mail sender in the recipient's private
+whitelist .
+</p>
+<p>
+The recipient name is always converted to its primary name (handling
+aliases).
+</p>
+<p>
+Configuration string: The database name containing the white list table.
+</p>
+<p>
+Example:
 
-<p>Parameters:
+<pre>
+ &lt;mailet match=&quot;IsInWhiteList=db://maildb&quot; class=&quot;ToProcessor&quot;&gt;
+    &lt;processor&gt; transport &lt;/processor&gt;
+ &lt;/mailet&gt;
+</pre>
+
+</p></p></div><div class="section"><h3><a name="IsOverQuota">IsOverQuota</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="IsSMIMEEncrypted">IsSMIMEEncrypted</a></h3><p>Checks if a mail is smime encrypted.</p></div><div 
+class="section"><h3><a name="IsSMIMESigned">IsSMIMESigned</a></h3><p>checks if a mail is smime signed.</p></div><div class="section"><h3><a name="IsSingleRecipient">IsSingleRecipient</a></h3><p>Matches 
+mail where the number of recipiants is exactly one.</p></div><div class="section"><h3><a name="IsX509CertificateSubject">IsX509CertificateSubject</a></h3><p><p>
+Checks if the subject of a X509Certificate contains the supplied string. The
+certificate is read from the specified mail attribute.
+</p><p>
+If the specified attribute contains more than one certificate the matcher matches if at
+least one of the certificates contains the given string.
 </p>
+<p>
+Configuration string:
 <ul>
-
-<li><b>text</b> (required) - the text that will be added as a footer to the message.</li>
+<li>mailAttribute;string</li>
+</ul></p></div><div class="section"><h3><a name="MailboxQuotaFixed">MailboxQuotaFixed (Experimental)</a><a name="MailboxQuotaFixed_Experimental"></a></h3><p>Matcher which can be used to set a quota for 
+users Mailbox. This
+{@link Matcher} need to recalculate the used space of users mailbox on every
+call. So use it with caution!</p></div><div class="section"><h3><a name="MatcherInverter">MatcherInverter</a></h3><p>This class can be used as a wrapper for getting the "not matched" 
+recipients</p></div><div class="section"><h3><a name="NESSpamCheck">NESSpamCheck (Experimental)</a><a name="NESSpamCheck_Experimental"></a></h3><p>This is based on a sample filter.cfg for a Netscape Mail 
+Server to stop
+spam.</p></div><div class="section"><h3><a name="NetworkIsInWhitelist">NetworkIsInWhitelist (Experimental)</a><a name="NetworkIsInWhitelist_Experimental"></a></h3><p><p>
+Matcher which lookup whitelisted networks in a database. The networks can be
+specified via netmask.
+</p>
+<p>
+For example: <code>192.168.0.0/24</code>
+</p>
+<p>
+Th whitelisting is done per recipient
+</p></p></div><div class="section"><h3><a name="Not">Not</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="Or">Or</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="RecipientIs">RecipientIs</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="RecipientIsLocal">RecipientIsLocal</a></h3><p>Matches mail where the recipient is 
+local.</p></div><div class="section"><h3><a name="RecipientIsRegex">RecipientIsRegex</a></h3><p><P>Matches recipients whose address matches a regular expression.</P>
+<P>Is equivalent to the {@link SenderIsRegex} matcher but matching on the recipient.</P>
+<P>Configuration string: a regular expression.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;RecipientIsRegex=&lt;regular-expression&gt;&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE>
+<P>The example below will match any recipient in the format user@log.anything</P>
+<PRE><CODE>
+&lt;mailet match=&quot;RecipientIsRegex=(.*)@log\.(.*)&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+&lt;/mailet&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="RelayLimit">RelayLimit</a></h3><p>Matches mail which has been relayed more than a given number of times.</p></div><div class="section"><h3><a 
+name="RemoteAddrInNetwork">RemoteAddrInNetwork</a></h3><p><p>
+Checks the IP address of the sending server against a comma- delimited list
+of IP addresses, domain names or sub-nets.
+</p>
+<p>
+See AbstractNetworkMatcher for details on how to specify entries.
+</p></p></div><div class="section"><h3><a name="RemoteAddrNotInNetwork">RemoteAddrNotInNetwork</a></h3><p><p>
+Checks the IP address of the sending server against a comma- delimited list
+of IP addresses, domain names or sub-nets.
+</p>
+<p>
+See AbstractNetworkMatcher for details on how to specify entries.
+</p></p></div><div class="section"><h3><a name="SMTPAuthSuccessful">SMTPAuthSuccessful</a></h3><p><P>Matches mails that are sent by an SMTP authenticated user.</P>
+<P>If the sender was not authenticated it will not match.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SMTPAuthSuccessful&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="SMTPAuthUserIs">SMTPAuthUserIs</a></h3><p><P>Matches mails that are sent by an SMTP authenticated user present in a supplied list.</P>
+<P>If the sender was not authenticated it will not match.</P>
+<P>Configuration string: a comma, tab or space separated list of James users.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SMTPAuthUserIs=&lt;list-of-user-names&gt;&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="SMTPIsAuthNetwork">SMTPIsAuthNetwork (Experimental)</a><a name="SMTPIsAuthNetwork_Experimental"></a></h3><p><P>
+Matches mails that are sent by an client which is allowed to relay.
+</P>
+
+<PRE><CODE> &lt;mailet match=&quot;SMTPIsAuthNetwork&quot;
+class=&quot;&lt;any-class&gt;&quot;&gt; </CODE></PRE></p></div><div class="section"><h3><a name="SenderHostIs">SenderHostIs</a></h3><p><p>Checkes the sender's displayed domain name against a supplied 
+list.</p>
+
+<p>Sample configuration:</p>
+<pre><code>
+&lt;mailet match="SenderHostIs=domain.com" class="ToProcessor"&gt;
+  &lt;processor> spam &lt;/processor&gt;
+&lt;/mailet&gt;
+</code></pre></p></div><div class="section"><h3><a name="SenderHostIsLocal">SenderHostIsLocal</a></h3><p>Checks the sender's displayed domain name against a the hosts serviced by
+this mail context. <br>
+<br>
+Sample Configuration: <br>
+<br>
+&lt;mailet match="SenderHostIsLocal" class="SpamAssassin"&gt; &lt;/mailet&gt;
+<br>
+<br></p></div><div class="section"><h3><a name="SenderInFakeDomain">SenderInFakeDomain (Experimental)</a><a name="SenderInFakeDomain_Experimental"></a></h3><p>Does a DNS lookup (MX and A/CNAME records) 
+on the sender's domain. If there
+are no entries, the domain is considered fake and the match is successful.</p></div><div class="section"><h3><a name="SenderIs">SenderIs</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="SenderIsLocal">SenderIsLocal</a></h3><p>Matches mail where the sender is local.</p></div><div 
+class="section"><h3><a name="SenderIsNull">SenderIsNull</a></h3><p><P>Matches mails that are sent by a null sender.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SenderIsNull&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="SenderIsRegex">SenderIsRegex</a></h3><p><P>Matches mails that are sent by a sender whose address matches a regular expression.</P>
+<P>Is equivalent to the {@link RecipientIsRegex} matcher but matching on the sender.</P>
+<P>Configuration string: a regular expression.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SenderIsRegex=&lt;regular-expression&gt;&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+</CODE></PRE>
+<P>The example below will match any sender in the format user@log.anything</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SenderIsRegex=(.*)@log\.(.*)&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+&lt;/mailet&gt;
+</CODE></PRE>
+<P>Another example below will match any sender having some variations of the string
+<I>mp3</I> inside the username part.</P>
+<PRE><CODE>
+&lt;mailet match=&quot;SenderIsRegex=(.*)(mp3|emmepitre)(.*)@&quot; class=&quot;&lt;any-class&gt;&quot;&gt;
+&lt;/mailet&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="SentByMailet">SentByMailet</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="SizeGreaterThan">SizeGreaterThan</a></h3><p>Checks whether the message (entire message, not just 
+content) is greater
+than a certain number of bytes.  You can use 'k' and 'm' as optional postfixes.
+In other words, "1m" is the same as writing "1024k", which is the same as
+"1048576".</p></div><div class="section"><h3><a name="SubjectIs">SubjectIs</a></h3><p>Matches mail where the subject is contained in a configurable list.</p></div><div class="section"><h3><a 
+name="SubjectStartsWith">SubjectStartsWith</a></h3><p>Matches mail where the subject starts with a given phrase.</p></div><div class="section"><h3><a name="TooManyLines">TooManyLines</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="TooManyRecipients">TooManyRecipients</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="UserIs">UserIs</a></h3><p>Matches mail where the user is contained in a configurable 
+list.</p></div><div class="section"><h3><a name="Xor">Xor</a></h3><p>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.                                           *</p></div></div><div class="section"><h2>Mailets<a name="Mailets"></a></h2><div class="section"><h3><a 
+name="AbstractRecipientRewriteTable">AbstractRecipientRewriteTable (Experimental)</a><a name="AbstractRecipientRewriteTable_Experimental"></a></h3><p>Provides an abstraction of common functionality 
+needed for implementing a
+Virtual User Table. Override the <code>mapRecipients</code> method to map
+virtual recipients to real recipients.</p></div><div class="section"><h3><a name="AbstractSign">AbstractSign</a></h3><p><P>Abstract mailet providing common SMIME signature services.
+It can be subclassed to make authoring signing mailets simple.
+By extending it and overriding one or more of the following methods a new behaviour can
+be quickly created without the author having to address any issue other than
+the relevant one:</P>
+<ul>
+<li>{@link #initDebug}, {@link #setDebug} and {@link #isDebug} manage the debugging mode.</li>
+<li>{@link #initExplanationText}, {@link #setExplanationText} and {@link #getExplanationText} manage the text of
+an attachment that will be added to explain the meaning of this server-side signature.</li>
+<li>{@link #initKeyHolder}, {@link #setKeyHolder} and {@link #getKeyHolder} manage the {@link KeyHolder} object that will
+contain the keys and certificates and will do the crypto work.</li>
+<li>{@link #initPostmasterSigns}, {@link #setPostmasterSigns} and {@link #isPostmasterSigns}
+determines whether messages originated by the Postmaster will be signed or not.</li>
+<li>{@link #initRebuildFrom}, {@link #setRebuildFrom} and {@link #isRebuildFrom}
+determines whether the "From:" header will be rebuilt to neutralize the wrong behaviour of
+some MUAs like Microsoft Outlook Express.</li>
+<li>{@link #initSignerName}, {@link #setSignerName} and {@link #getSignerName} manage the name
+of the signer to be shown in the explanation text.</li>
+<li>{@link #isOkToSign} controls whether the mail can be signed or not.</li>
+<li>The abstract method {@link #getWrapperBodyPart} returns the massaged {@link javax.mail.internet.MimeBodyPart}
+that will be signed, or null if the message has to be signed "as is".</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>Handles the following init parameters:</P>
+<ul>
+<li>&lt;keyHolderClass&gt;: Sets the class of the KeyHolder object that will handle the cryptography functions,
+for example org.apache.james.security.SMIMEKeyHolder for SMIME.</li>
+<li>&lt;debug&gt;: if <CODE>true</CODE> some useful information is logged.
+The default is <CODE>false</CODE>.</li>
+<li>&lt;keyStoreFileName&gt;: the {@link java.security.KeyStore} full file name.</li>
+<li>&lt;keyStorePassword&gt;: the <CODE>KeyStore</CODE> password.
+     If given, it is used to check the integrity of the keystore data,
+     otherwise, if null, the integrity of the keystore is not checked.</li>
+<li>&lt;keyAlias&gt;: the alias name to use to search the Key using {@link java.security.KeyStore#getKey}.
+The default is to look for the first and only alias in the keystore;
+if zero or more than one is found a {@link java.security.KeyStoreException} is thrown.</li>
+<li>&lt;keyAliasPassword&gt;: the alias password. The default is to use the <CODE>KeyStore</CODE> password.
+     At least one of the passwords must be provided.</li>
+<li>&lt;keyStoreType&gt;: the type of the keystore. The default will use {@link java.security.KeyStore#getDefaultType}.</li>
+<li>&lt;postmasterSigns&gt;: if <CODE>true</CODE> the message will be signed even if the sender is the Postmaster.
+The default is <CODE>false</CODE>.</li></li>
+<li>&lt;rebuildFrom&gt;: If <CODE>true</CODE> will modify the "From:" header.
+For more info see {@link #isRebuildFrom}.
+The default is <CODE>false</CODE>.</li>
+<li>&lt;signerName&gt;: the name of the signer to be shown in the explanation text.
+The default is to use the "CN=" property of the signing certificate.</li>
+<li>&lt;explanationText&gt;: the text of an explanation of the meaning of this server-side signature.
+May contain the following substitution patterns (see also {@link #getReplacedExplanationText}):
+<CODE>[signerName]</CODE>, <CODE>[signerAddress]</CODE>, <CODE>[reversePath]</CODE>, <CODE>[headers]</CODE>.
+It should be included in the signature.
+The actual presentation of the text depends on the specific concrete mailet subclass:
+see for example {@link SMIMESign}.
+The default is to not have any explanation text.</li>
+</ul></p></div><div class="section"><h3><a name="AddDeliveredToHeader">AddDeliveredToHeader</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="AddFooter">AddFooter</a></h3><p>Mailet Info: <b>AddFooter Mailet</b><br /></p><p>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.                                           *</p></div><div class="section"><h3><a name="AddHabeasWarrantMark">AddHabeasWarrantMark (Experimental)</a><a 
+name="AddHabeasWarrantMark_Experimental"></a></h3><p>Mailet Info: <b>Add Habeas Warrant Mark.  Must be used in accordance with a license from Habeas (see http://www.habeas.com for details).</b><br 
+/></p><p><p>This matcher adds the Hebeas Warrant Mark to a message.
+For details see: http://www.hebeas.com</p>
 
-<p>Parameters: None.</p>
-</div>
+<p>
+Usage:
+</p>
 
+<pre><code>
+&lt;mailet match="&lt;suitable-matcher&gt;" class="AddHabeasWarrantMark" /&gt;
+</code></pre>
 
-<div class="section">
-<h3>AddHeader<a name="AddHeader"></a></h3>
+<p>
+NOTE: Although this mailet is covered by the Apache Software License,
+the Habeas Warrant Mark is copyright.  A separate license from Habeas
+is required in order to legally attach the Habeas Warrant Mark to
+e-mail messages.  Each James Administrator is responsible for
+ensuring that James is configured to attach the Habeas Warrant Mark
+only to e-mail covered by a suitable license received from Habeas.
+
+Because the Habeas Warrant Mark is copyright material, I have asked
+for and received the following explicit statement from Habeas:
+</p>
+<pre>
+-----------------------------------
+From: Lindsey Pettit [mailto:support@habeas.com]
+Sent: Sunday, September 29, 2002 5:51
+To: Noel J. Bergman
+Subject: RE: Habeas and Apache James
+
+Dear Noel,
+
+> FURTHERMORE, if James is to be capable of sending Habeas SWE, I need
+> to write a Mailet that attaches the headers.  As with any MTA, it
+> would be up to the administrator to properly configure James and make
+> sure that licenses are acquired.  Since the Habeas Warrant Mark is
+> copyright, I believe that I require authorization from you for that
+> Mailet, especially since it attaches the Habeas Warrant Mark.  For my
+> own protection, please show me why such authorization is unnecessary,
+> send me a digitally signed e-mail, or FAX a signed authorization
+
+You do not yourself need the authorization to build the functionality 
+into the [mailet];  what one needs authorization, in the form of a 
+license, for, is to use the mark *in headers*, in outgoing email.
+However, please let me know if you would like something more 
+formal, and I can try to have something faxed to you.
+
+> The Mailet docs would reference the Habeas website, and inform
+> administrators that in order to USE the mailet, they need to ensure
+> that they have whatever licenses are required from you as appropriate
+> to your licensing terms.
+
+That's absolutely perfect!
+-----------------------------------
+</pre></p></div><div class="section"><h3><a name="AddSubjectPrefix">AddSubjectPrefix</a></h3><p>Mailet Info: <b>AddSubjectPrefix Mailet</b><br /></p><p>Add an prefix (tag) to the subject of a message 
+<br>
+<br>
+<p/>
+Sample Configuration: <br>
+<pre><code>
+&lt;mailet match="RecipientIs=robot@james.apache.org" class="TagMessage"&gt;
+&lt;subjectPrefix&gt;[robot]&lt;/subjectPrefix&gt; &lt;/mailet&gt; <br>
+</code></pre></p></div><div class="section"><h3><a name="AmqpForwardAttribute">AmqpForwardAttribute</a></h3><p>Mailet Info: <b>AmqpForwardAttribute</b><br /></p><p>This mailet forwards the attributes 
+values to a AMPQ.
+<br />
+It takes 4 parameters:
+<ul>
+<li>attribute (mandatory): content to be forwarded, expected to be a Map&lt;String, byte[]&gt;
+where the byte[] content is issued from a MimeBodyPart.
+It is typically generated from the StripAttachment mailet.</li>
+<li>uri (mandatory): AMQP URI defining the server where to send the attachment.</li>
+<li>exchange (mandatory): name of the AMQP exchange.</li>
+<li>routing_key (optional, default to empty string): name of the routing key on this exchange.</li>
+</ul>
 
-<p>Description: This mailet is <b>deprecated</b> .Please use SetMimeHeader .</p>
-</div>
+This mailet will extract the attachment content from the MimeBodyPart byte[] before
+sending it.</p></div><div class="section"><h3><a name="AnotherMailet">AnotherMailet</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="BayesianAnalysis">BayesianAnalysis (Experimental)</a><a 
+name="BayesianAnalysis_Experimental"></a></h3><p>Mailet Info: <b>BayesianAnalysis Mailet</b><br /></p><p><p>
+Spam detection mailet using bayesian analysis techniques.
+</p>
 
+<p>
+Sets an email message header indicating the probability that an email message
+is SPAM.
+</p>
 
-<div class="section">
-<h3>AvalonListserv<a name="AvalonListserv"></a></h3>
+<p>
+Based upon the principals described in: <a
+href="http://www.paulgraham.com/spam.html">A Plan For Spam</a> by Paul
+Graham. Extended to Paul Grahams' <a
+href="http://paulgraham.com/better.html">Better Bayesian Filtering</a>.
+</p>
 
-<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>
+The analysis capabilities are based on token frequencies (the <i>Corpus</i>)
+learned through a training process (see {@link BayesianAnalysisFeeder}) and
+stored in a JDBC database. After a training session, the Corpus must be
+rebuilt from the database in order to acquire the new frequencies. Every 10
+minutes a special thread in this mailet will check if any change was made to
+the database by the feeder, and rebuild the corpus if necessary.
+</p>
 
+<p>
+A <code>org.apache.james.spam.probability</code> mail attribute will be
+created containing the computed spam probability as a
+{@link java.lang.Double}. The <code>headerName</code> message header string
+will be created containing such probability in floating point representation.
+</p>
 
-<p>Parameters:
+<p>
+Sample configuration:
 </p>
-<ul>
 
-<li><b>repositoryName</b> (required) - the name of the user repository that contains the users 
-for this list.</li>
+<pre>
+<code>
+&lt;mailet match="All" class="BayesianAnalysis"&gt;
+  &lt;repositoryPath&gt;db://maildb&lt;/repositoryPath&gt;
+  &lt;!--
+    Set this to the header name to add with the spam probability
+    (default is "X-MessageIsSpamProbability").
+  --&gt;
+  &lt;headerName&gt;X-MessageIsSpamProbability&lt;/headerName&gt;
+  &lt;!--
+    Set this to true if you want to ignore messages coming from local senders
+    (default is false).
+    By local sender we mean a return-path with a local server part (server listed
+    in &lt;servernames&gt; in config.xml).
+  --&gt;
+  &lt;ignoreLocalSender&gt;true&lt;/ignoreLocalSender&gt;
+  &lt;!--
+    Set this to the maximum message size (in bytes) that a message may have
+    to be considered spam (default is 100000).
+  --&gt;
+  &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;!--
+    Set this to false if you not want to tag the message if spam is detected (Default is true).
+  --&gt;
+  &lt;tagSubject&gt;true&lt;/tagSubject&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
 
-<li><b>membersonly</b> (optional) - whether only members of the list can send messages to this 
-list.  Defaults to false.</li>
+<p>
+The probability of being spam is pre-pended to the subject if it is &gt; 0.1
+(10%).
+</p>
 
-<li><b>attachmentsallowed</b> (optional) - whether attachments are allowed in messages sent to this 
-list.  Defaults to true.</li>
+<p>
+The required tables are automatically created if not already there (see
+sqlResources.xml). The token field in both the ham and spam tables is <b>case
+sensitive</b>.
+</p></p></div><div class="section"><h3><a name="BayesianAnalysis">BayesianAnalysis (Experimental)</a><a name="BayesianAnalysis_Experimental"></a></h3><p>Mailet Info: <b>BayesianAnalysis Mailet</b><br 
+/></p><p><p>
+Spam detection mailet using bayesian analysis techniques.
+</p>
 
-<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>
+<p>
+Sets an email message header indicating the probability that an email message
+is SPAM.
+</p>
 
-<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>
+<p>
+Based upon the principals described in: <a
+href="http://www.paulgraham.com/spam.html">A Plan For Spam</a> by Paul
+Graham. Extended to Paul Grahams' <a
+href="http://paulgraham.com/better.html">Better Bayesian Filtering</a>.
+</p>
 
-<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>
+<p>
+The analysis capabilities are based on token frequencies (the <i>Corpus</i>)
+learned through a training process (see {@link BayesianAnalysisFeeder}) and
+stored in a JDBC database. After a training session, the Corpus must be
+rebuilt from the database in order to acquire the new frequencies. Every 10
+minutes a special thread in this mailet will check if any change was made to
+the database by the feeder, and rebuild the corpus if necessary.
+</p>
 
-</div>
+<p>
+A <code>org.apache.james.spam.probability</code> mail attribute will be
+created containing the computed spam probability as a
+{@link java.lang.Double}. The <code>headerName</code> message header string
+will be created containing such probability in floating point representation.
+</p>
 
+<p>
+Sample configuration:
+</p>
 
-<div class="section">
-<h3>AvalonListservManager<a name="AvalonListservManager"></a></h3>
+<pre>
+<code>
+&lt;mailet match="All" class="BayesianAnalysis"&gt;
+  &lt;repositoryPath&gt;db://maildb&lt;/repositoryPath&gt;
+  &lt;!--
+    Set this to the header name to add with the spam probability
+    (default is "X-MessageIsSpamProbability").
+  --&gt;
+  &lt;headerName&gt;X-MessageIsSpamProbability&lt;/headerName&gt;
+  &lt;!--
+    Set this to true if you want to ignore messages coming from local senders
+    (default is false).
+    By local sender we mean a return-path with a local server part (server listed
+    in &lt;servernames&gt; in config.xml).
+  --&gt;
+  &lt;ignoreLocalSender&gt;true&lt;/ignoreLocalSender&gt;
+  &lt;!--
+    Set this to the maximum message size (in bytes) that a message may have
+    to be considered spam (default is 100000).
+  --&gt;
+  &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;!--
+    Set this to false if you not want to tag the message if spam is detected (Default is true).
+  --&gt;
+  &lt;tagSubject&gt;true&lt;/tagSubject&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
 
-<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>
+The probability of being spam is pre-pended to the subject if it is &gt; 0.1
+(10%).
+</p>
 
+<p>
+The required tables are automatically created if not already there (see
+sqlResources.xml). The token field in both the ham and spam tables is <b>case
+sensitive</b>.
+</p></p></div><div class="section"><h3><a name="BayesianAnalysisFeeder">BayesianAnalysisFeeder (Experimental)</a><a name="BayesianAnalysisFeeder_Experimental"></a></h3><p>Mailet Info: 
+<b>BayesianAnalysisFeeder Mailet</b><br /></p><p><p>
+Feeds ham OR spam messages to train the {@link BayesianAnalysis} mailet.
+</p>
 
-<p>Parameters:
+<p>
+The new token frequencies will be stored in a JDBC database.
 </p>
-<ul>
 
-<li><b>repositoryName</b> (required) - the name of the user repository that contains the users 
-for this list.</li>
-</ul>
+<p>
+Sample configuration:
+</p>
 
-</div>
+<pre>
+<code>
+&lt;processor name="root"&gt;
+
+  &lt;mailet match="RecipientIs=not.spam@thisdomain.com" class="BayesianAnalysisFeeder"&gt;
+    &lt;repositoryPath&gt; db://maildb &lt;/repositoryPath&gt;
+    &lt;feedType&gt;ham&lt;/feedType&gt;
+    &lt;!--
+      Set this to the maximum message size (in bytes) that a message may have
+      to be analyzed (default is 100000).
+    --&gt;
+    &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;/mailet&gt;
+
+  &lt;mailet match="RecipientIs=spam@thisdomain.com" class="BayesianAnalysisFeeder"&gt;
+    &lt;repositoryPath&gt; db://maildb &lt;/repositoryPath&gt;
+    &lt;feedType&gt;spam&lt;/feedType&gt;
+    &lt;!--
+      Set this to the maximum message size (in bytes) that a message may have
+      to be analyzed (default is 100000).
+    --&gt;
+    &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;/mailet&gt;
+
+&lt;processor&gt;
+</code>
+</pre>
 
+<p>
+The previous example will allow the user to send messages to the server and
+use the recipient email address as the indicator for whether the message is
+ham or spam.
+</p>
 
-<div class="section">
-<h3>BayesianAnalysis<a name="BayesianAnalysis"></a></h3>
+<p>
+Using the example above, send good messages (ham not spam) to the email
+address "not.spam@thisdomain.com" to pump good messages into the feeder, and
+send spam messages (spam not ham) to the email address "spam@thisdomain.com"
+to pump spam messages into the feeder.
+</p>
 
-<p>Description: Spam detection mailet using bayesian analysis techniques.</p>
+<p>
+The bayesian database tables will be updated during the training reflecting
+the new data
+</p>
 
+<p>
+At the end the mail will be destroyed (ghosted).
+</p>
 
-<p>Parameters:
+<p>
+<b>The correct approach is to send the original ham/spam message as an
+attachment to another message sent to the feeder; all the headers of the
+enveloping message will be removed and only the original message's tokens
+will be analyzed.</b>
 </p>
-<ul>
 
-<li><b>repositoryPath</b> (required) - The repositoryPath which is used.</li>
+<p>
+After a training session, the frequency <i>Corpus</i> used by
+<code>BayesianAnalysis</code> must be rebuilt from the database, in order to
+take advantage of the new token frequencies. Every 10 minutes a special
+thread in the <code>BayesianAnalysis</code> mailet will check if any change
+was made to the database, and rebuild the corpus if necessary.
+</p>
 
-<li><b>headerName</b> - The HeaderName which get adds to holds the Probalitity. Default is <i>X-MessageIsSpamProbability</i>.</li>
+<p>
+Only one message at a time is scanned (the database update activity is
+<i>synchronized</i>) in order to avoid too much database locking, as
+thousands of rows may be updated just for one message fed.
+</p></p></div><div class="section"><h3><a name="BayesianAnalysisFeeder">BayesianAnalysisFeeder (Experimental)</a><a name="BayesianAnalysisFeeder_Experimental"></a></h3><p>Mailet Info: 
+<b>BayesianAnalysisFeeder Mailet</b><br /></p><p><p>
+Feeds ham OR spam messages to train the {@link BayesianAnalysis} mailet.
+</p>
 
-<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>
+<p>
+The new token frequencies will be stored in a JDBC database.
+</p>
 
-<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>
+<p>
+Sample configuration:
+</p>
 
-</div>
+<pre>
+<code>
+&lt;processor name="root"&gt;
+
+  &lt;mailet match="RecipientIs=not.spam@thisdomain.com" class="BayesianAnalysisFeeder"&gt;
+    &lt;repositoryPath&gt; db://maildb &lt;/repositoryPath&gt;
+    &lt;feedType&gt;ham&lt;/feedType&gt;
+    &lt;!--
+      Set this to the maximum message size (in bytes) that a message may have
+      to be analyzed (default is 100000).
+    --&gt;
+    &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;/mailet&gt;
+
+  &lt;mailet match="RecipientIs=spam@thisdomain.com" class="BayesianAnalysisFeeder"&gt;
+    &lt;repositoryPath&gt; db://maildb &lt;/repositoryPath&gt;
+    &lt;feedType&gt;spam&lt;/feedType&gt;
+    &lt;!--
+      Set this to the maximum message size (in bytes) that a message may have
+      to be analyzed (default is 100000).
+    --&gt;
+    &lt;maxSize&gt;100000&lt;/maxSize&gt;
+  &lt;/mailet&gt;
+
+&lt;processor&gt;
+</code>
+</pre>
 
+<p>
+The previous example will allow the user to send messages to the server and
+use the recipient email address as the indicator for whether the message is
+ham or spam.
+</p>
 
-<div class="section">
-<h3>BayesianAnalysisFeeder<a name="BayesianAnalysisFeeder"></a></h3>
+<p>
+Using the example above, send good messages (ham not spam) to the email
+address "not.spam@thisdomain.com" to pump good messages into the feeder, and
+send spam messages (spam not ham) to the email address "spam@thisdomain.com"
+to pump spam messages into the feeder.
+</p>
 
-<p>Description: Feeds ham OR spam messages to train the BayesianAnalysis mailet.</p>
+<p>
+The bayesian database tables will be updated during the training reflecting
+the new data
+</p>
 
+<p>
+At the end the mail will be destroyed (ghosted).
+</p>
 
-<p>Parameters:
+<p>
+<b>The correct approach is to send the original ham/spam message as an
+attachment to another message sent to the feeder; all the headers of the
+enveloping message will be removed and only the original message's tokens
+will be analyzed.</b>
 </p>
-<ul>
 
-<li><b>repositoryPath</b> (required) - The repositoryPath which is used.</li>
+<p>
+After a training session, the frequency <i>Corpus</i> used by
+<code>BayesianAnalysis</code> must be rebuilt from the database, in order to
+take advantage of the new token frequencies. Every 10 minutes a special
+thread in the <code>BayesianAnalysis</code> mailet will check if any change
+was made to the database, and rebuild the corpus if necessary.
+</p>
 
-<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>
+<p>
+Only one message at a time is scanned (the database update activity is
+<i>synchronized</i>) in order to avoid too much database locking, as
+thousands of rows may be updated just for one message fed.
+</p></p></div><div class="section"><h3><a name="Bounce">Bounce</a></h3><p><p>
+Generates a response to the reverse-path address. Note that this is different
+than a mail-client's reply, which would use the Reply-To or From header.
+</p>
+<p>
+Bounced messages are attached in their entirety (headers and content) and the
+resulting MIME part type is "message/rfc822".<br>
+The reverse-path and the Return-Path header of the response is set to "null"
+("<>"), meaning that no reply should be sent.
+</p>
+<p>
+A sender of the notification message can optionally be specified. If one is
+not specified, the postmaster's address will be used.<br>
+A notice text can be specified, and in such case will be inserted into the
+notification inline text.<br>
+If the notified message has an "error message" set, it will be inserted into
+the notification inline text. If the <code>attachError</code> init
+parameter is set to true, such error message will be attached to the
+notification message.<br>
+<p>
+Supports the <code>passThrough</code> init parameter (true if missing).
+</p>
+<p/>
+<p>
+Sample configuration:
+</p>
+<p/>
+<pre>
+<code>
+&lt;mailet match="All" class="Bounce">
+  &lt;sender&gt;<i>an address or postmaster or sender or unaltered, default=postmaster</i>&lt;/sender&gt;
+  &lt;attachError&gt;<i>true or false, default=false</i>&lt;/attachError&gt;
+  &lt;message&gt;<i>notice attached to the original message text (optional)</i>&lt;/message&gt;
+  &lt;prefix&gt;<i>optional subject prefix prepended to the original message</i>&lt;/prefix&gt;
+  &lt;inline&gt;<i>see {@link Resend}, default=none</i>&lt;/inline&gt;
+  &lt;attachment&gt;<i>see {@link Resend}, default=message</i>&lt;/attachment&gt;
+  &lt;passThrough&gt;<i>true or false, default=true</i>&lt;/passThrough&gt;
+  &lt;fakeDomainCheck&gt;<i>true or false, default=true</i>&lt;/fakeDomainCheck&gt;
+  &lt;debug&gt;<i>true or false, default=false</i>&lt;/debug&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
+<p/>
+<p>
+The behaviour of this mailet is equivalent to using Resend with the following
+configuration:
+</p>
+<p/>
+<pre>
+<code>
+&lt;mailet match="All" class="Resend">
+  &lt;sender&gt;<i>an address or postmaster or sender or unaltered</i>&lt;/sender&gt;
+  &lt;attachError&gt;<i>true or false</i>&lt;/attachError&gt;
+  &lt;message&gt;<i><b>dynamically built</b></i>&lt;/message&gt;
+  &lt;prefix&gt;<i>a string</i>&lt;/prefix&gt;
+  &lt;passThrough&gt;true or false&lt;/passThrough&gt;
+  &lt;fakeDomainCheck&gt;<i>true or false</i>&lt;/fakeDomainCheck&gt;
+  &lt;recipients&gt;<b>sender</b>&lt;/recipients&gt;
+  &lt;reversePath&gt;null&lt;/reversePath&gt;
+  &lt;inline&gt;see {@link Resend}&lt;/inline&gt;
+  &lt;attachment&gt;see {@link Resend}&lt;/attachment&gt;
+  &lt;isReply&gt;true&lt;/isReply&gt;
+  &lt;debug&gt;<i>true or false</i>&lt;/debug&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
+<p>
+<i>notice</i> and <i>sendingAddress</i> can be used instead of <i>message</i>
+and <i>sender</i>; such names are kept for backward compatibility.
+</p></p></div><div class="section"><h3><a name="ClamAVScan">ClamAVScan (Experimental)</a><a name="ClamAVScan_Experimental"></a></h3><p>Mailet Info: <b>Antivirus Check using ClamAV (CLAMD)</b><br 
+/></p><p><P>Does an antivirus scan check using a ClamAV daemon (CLAMD)</P>
+<p/>
+<P> Interacts directly with the daemon using the "stream" method,
+which should have the lowest possible overhead.</P>
+<P>The CLAMD daemon will typically reside on <I>localhost</I>, but could reside on a
+different host.
+It may also consist on a set of multiple daemons, each residing on a different
+server and on different IP number.
+In such case a DNS host name with multiple IP addresses (round-robin load sharing)
+is supported by the mailet (but on the same port number).</P>
+<p/>
+<P>Handles the following init parameters:</P>
+<UL>
+<LI><CODE>&lt;debug&gt;</CODE>.</LI>
+<LI><CODE>&lt;host&gt;</CODE>: the host name of the server where CLAMD runs. It can either be
+a machine name, such as
+"<code>java.sun.com</code>", or a textual representation of its
+IP address. If a literal IP address is supplied, only the
+validity of the address format is checked.
+If the machine name resolves to multiple IP addresses, <I>round-robin load sharing</I> will
+be used.
+The default is <CODE>localhost</CODE>.</LI>
+<LI><CODE>&lt;port&gt;</CODE>: the port on which CLAMD listens. The default is <I>3310</I>.</LI>
+<LI><CODE>&lt;maxPings&gt;</CODE>: the maximum number of connection retries during startup.
+If the value is <I>0</I> no startup test will be done.
+The default is <I>6</I>.</LI>
+<LI><CODE>&lt;pingIntervalMilli&gt;</CODE>: the interval (in milliseconds)
+between each connection retry during startup.
+The default is <I>30000</I> (30 seconds).</LI>
+<LI><CODE>&lt;streamBufferSize&gt;</CODE>: the BufferedOutputStream buffer size to use
+writing to the <I>stream connection</I>. The default is <I>8192</I>.</LI>
+</UL>
+<p/>
+<P>The actions performed are as follows:</P>
+<UL>
+<LI>During initialization:</LI>
+<OL>
+<LI>Gets all <CODE>config.xml</CODE> parameters, handling the defaults;</LI>
+<LI>resolves the <CODE>&lt;host&gt;</CODE> parameter, creating the round-robin IP list;</LI>
+<LI>connects to CLAMD at the first IP in the round-robin list, on
+the specified <CODE>&lt;port&gt;</CODE>;</LI>
+<LI>if unsuccessful, retries every <CODE>&lt;pingIntervalMilli&gt;</CODE> milliseconds up to
+<CODE>&lt;maxPings&gt;</CODE> times;</LI>
+<LI>sends a <CODE>PING</CODE> request;</LI>
+<LI>waits for a <CODE>PONG</CODE> answer;</LI>
+<LI>repeats steps 3-6 for every other IP resolved.
+</OL>
+<LI>For every mail</LI>
+<OL>
+<LI>connects to CLAMD at the "next" IP in the round-robin list, on
+the specified <CODE>&lt;port&gt;</CODE>, and increments the "next" index;
+if the connection request is not accepted tries with the next one
+in the list unless all of them have failed;</LI>
+<LI>sends a "<CODE>STREAM</CODE>" request;</LI>
+<LI>parses the "<CODE>PORT <I>streamPort</I></CODE>" answer obtaining the port number;</LI>
+<LI>makes a second connection (the <I>stream connection</I>) to CLAMD at the same host (or IP)
+on the <I>streamPort</I> just obtained;</LI>
+<LI>sends the mime message to CLAMD (using {@link MimeMessage#writeTo(java.io.OutputStream)})
+through the <I>stream connection</I>;</LI>
+<LI>closes the <I>stream connection</I>;</LI>
+<LI>gets the "<CODE>OK</CODE>" or "<CODE>... FOUND</CODE>" answer from the main connection;</LI>
+<LI>closes the main connection;</LI>
+<LI>sets the "<CODE>org.apache.james.infected</CODE>" <I>mail attribute</I> to either
+"<CODE>true</CODE>" or "<CODE>false</CODE>";</LI>
+<LI>adds the "<CODE>X-MessageIsInfected</CODE>" <I>header</I> to either
+"<CODE>true</CODE>" or "<CODE>false</CODE>";</LI>
+</OL>
+</UL>
+<p/>
+<P>Some notes regarding <a href="http://www.clamav.net/">clamav.conf</a>:</p>
+<UL>
+<LI><CODE>LocalSocket</CODE> must be commented out</LI>
+<LI><CODE>TCPSocket</CODE> must be set to a port# (typically 3310)</LI>
+<LI><CODE>StreamMaxLength</CODE> must be &gt;= the James config.xml parameter
+&lt;<CODE>maxmessagesize</CODE>&gt; in SMTP &lt;<CODE>handler</CODE>&gt;</LI>
+<LI><CODE>MaxThreads</CODE> should? be &gt;= the James config.xml parameter
+&lt;<CODE>threads</CODE>&gt; in &lt;<CODE>spoolmanager</CODE>&gt;</LI>
+<LI><CODE>ScanMail</CODE> must be uncommented</LI>
+</UL>
+<p/>
+<P>Here follows an example of config.xml definitions deploying CLAMD on localhost,
+and handling the infected messages:</P>
+<PRE><CODE>
+<p/>
+...
+<p/>
+&lt;!-- Do an antivirus scan --&gt;
+&lt;mailet match="All" class="ClamAVScan" onMailetException="ignore"/&gt;
+<p/>
+&lt;!-- If infected go to virus processor --&gt;
+&lt;mailet match="HasMailAttributeWithValue=org.apache.james.infected, true" class="ToProcessor"&gt;
+&lt;processor&gt; virus &lt;/processor&gt;
+&lt;/mailet&gt;
+<p/>
+&lt;!-- Check attachment extensions for possible viruses --&gt;
+&lt;mailet match="AttachmentFileNameIs=-d -z *.exe *.com *.bat *.cmd *.pif *.scr *.vbs *.avi *.mp3 *.mpeg *.shs" class="ToProcessor"&gt;
+&lt;processor&gt; bad-extensions &lt;/processor&gt;
+&lt;/mailet&gt;
+<p/>
+...
+<p/>
+&lt;!-- Messages containing viruses --&gt;
+&lt;processor name="virus"&gt;
+<p/>
+&lt;!-- To avoid a loop while bouncing --&gt;
+&lt;mailet match="All" class="SetMailAttribute"&gt;
+&lt;org.apache.james.infected&gt;true, bouncing&lt;/org.apache.james.infected&gt;
+&lt;/mailet&gt;
+<p/>
+&lt;mailet match="SMTPAuthSuccessful" class="Bounce"&gt;
+&lt;sender&gt;bounce-admin@xxx.com&lt;/sender&gt;
+&lt;inline&gt;heads&lt;/inline&gt;
+&lt;attachment&gt;none&lt;/attachment&gt;
+&lt;notice&gt; Warning: We were unable to deliver the message below because it was found infected by virus(es). &lt;/notice&gt;
+&lt;/mailet&gt;
+<p/>
+&lt;!--
+&lt;mailet match="All" class="ToRepository"&gt;
+&lt;repositoryPath&gt;file://var/mail/infected/&lt;/repositoryPath&gt;
+&lt;/mailet&gt;
+--&gt;
+<p/>
+&lt;mailet match="All" class="Null" /&gt;
+&lt;/processor&gt;
+</CODE></PRE></p></div><div class="section"><h3><a name="ClassifyBounce">ClassifyBounce (Experimental)</a><a name="ClassifyBounce_Experimental"></a></h3><p>Mailet Info: <b>SetMimeHeader Mailet</b><br 
+/></p><p>Assesses the message to determine if it was a hard or soft bounce, and if it was a soft bounce, something of its nature..
+<p/>
+Sample configuration:
+<p/>
+<mailet match="All" class="ClassifyBounce">
+<headerName>X-MailetHeader</headerName>
+</mailet></p></div><div class="section"><h3><a name="Counter">Counter</a></h3><p>Mailet Info: <b>Counter Mailet</b><br /></p><p>A simple in memory counter.  Designed to count messages sent to this 
+recipient
+for debugging purposes.</p></div><div class="section"><h3><a name="CustomMailet">CustomMailet</a></h3><p>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.                                           *</p></div><div class="section"><h3><a name="DSNBounce">DSNBounce</a></h3><p><p>
+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.
+</p>
+<p>
+Bounced messages are attached in their entirety (headers and content) and the
+resulting MIME part type is "message/rfc822".<br>
+The reverse-path and the Return-Path header of the response is set to "null"
+("<>"), meaning that no reply should be sent.
+</p>
+<p>
+A sender of the notification message can optionally be specified. If one is
+not specified, the postmaster's address will be used.<br>
+<p>
+Supports the <code>passThrough</code> init parameter (true if missing).
+</p>
+<p/>
+<p>
+Sample configuration:
+</p>
+<p/>
+<pre>
+<code>
+&lt;mailet match="All" class="DSNBounce">
+  &lt;sender&gt;<i>an address or postmaster or sender or unaltered,
+ default=postmaster</i>&lt;/sender&gt;
+  &lt;prefix&gt;<i>optional subject prefix prepended to the original
+ message</i>&lt;/prefix&gt;
+  &lt;attachment&gt;<i>message, heads or none, default=message</i>&lt;/attachment&gt;
+  &lt;messageString&gt;<i>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] ... </i>&lt;/messageString&gt;
+  &lt;passThrough&gt;<i>true or false, default=true</i>&lt;/passThrough&gt;
+  &lt;debug&gt;<i>true or false, default=false</i>&lt;/debug&gt;
+&lt;/mailet&gt;
+</code>
+</pre></p></div><div class="section"><h3><a name="DumpSystemErr">DumpSystemErr</a></h3><p>Mailet Info: <b>Dumps message to System.err</b><br /></p><p>Debugging purpose Mailet.  Sends the message to 
+System.err</p></div><div class="section"><h3><a name="ExceptionThrowingMailet">ExceptionThrowingMailet</a></h3><p>Mailet Info: <b>ExceptionThrowingMailet Mailet</b><br /></p><p>Debugging purpose Mailet. 
+Just throws an exception.</p></div><div class="section"><h3><a name="Forward">Forward</a></h3><p><p>
+Replaces incoming recipients with those specified, and resends the message
+unaltered.
+</p>
+<p>
+Can be totally replaced by an equivalent usage of {@link Resend} (see below),
+simply replacing <i>&lt;forwardto&gt;</i> with <i>&lt;recipients&gt</i>.
 
-<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>
+<p>
+Sample configuration:
+</p>
 
-</div>
+<pre>
+<code>
+&lt;mailet match="All" class="Forward">
+  &lt;forwardTo&gt;<i>comma delimited list of email addresses</i>&lt;/forwardTo&gt;
+  &lt;passThrough&gt;<i>true or false, default=false</i>&lt;/passThrough&gt;
+  &lt;fakeDomainCheck&gt;<i>true or false, default=true</i>&lt;/fakeDomainCheck&gt;
+  &lt;debug&gt;<i>true or false, default=false</i>&lt;/debug&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
 
+<p>
+The behaviour of this mailet is equivalent to using Resend with the following
+configuration:
+</p>
 
-<div class="section">
-<h3>Bounce<a name="Bounce"></a></h3>
+<pre>
+<code>
+&lt;mailet match="All" class="Resend">
+  &lt;recipients&gt;comma delimited list of email addresses&lt;/recipients&gt;
+  &lt;passThrough&gt;true or false&lt;/passThrough&gt;
+  &lt;fakeDomainCheck&gt;<i>true or false</i>&lt;/fakeDomainCheck&gt;
+  &lt;debug&gt;<i>true or false</i>&lt;/debug&gt;
+&lt;/mailet&gt;
+</code>
+</pre>
+<p>
+<i>forwardto</i> can be used instead of <i>forwardTo</i>; such name is kept
+for backward compatibility.
+</p></p></div><div class="section"><h3><a name="FromRepository">FromRepository (Experimental)</a><a name="FromRepository_Experimental"></a></h3><p>Mailet Info: <b>FromRepository Mailet</b><br 
+/></p><p>Re-spools Mail found in the specified Repository.
 
-<p>Description: Generates a response to the reverse-path address.</p>
+<pre>
+&lt;mailet match="RecipientIs=respool@localhost" class="FromRepository"&gt;
+   &lt;repositoryPath&gt; <i>repository path</i> &lt;/repositoryPath&gt;
+   &lt;processor&gt; <i>target processor</i> &lt;/repositoryPath&gt;
+   &lt;delete&t; [true|<b>false</b>] &lt;/delete&gt;
+&lt;/mailet&gt;
+</pre></p></div><div class="section"><h3><a name="GenericMailet">GenericMailet</a></h3><p>GenericMailet makes writing mailets easier. It provides simple
+versions of the lifecycle methods init and destroy and of the methods
+in the MailetConfig interface. GenericMailet also implements the log
+method, declared in the MailetContext interface.
+<p>
+To write a generic mailet, you need only override the abstract service
+method.</p></div><div class="section"><h3><a name="HeadersToHTTP">HeadersToHTTP (Experimental)</a><a name="HeadersToHTTP_Experimental"></a></h3><p>Mailet Info: <b>HTTP POST serialised message</b><br 
+/></p><p>Serialise the email and pass it to an HTTP call
 
+Sample configuration:
 
-<p>Parameters:
-</p>
-<ul>
+<mailet match="All" class="HeadersToHTTP">
+<url>http://192.168.0.252:3000/alarm</url>
+<parameterKey>Test</parameterKey>
+<parameterValue>ParameterValue</parameterValue>
+<passThrough>true</passThrough>
+</mailet></p></div><div class="section"><h3><a name="ICALToHeader">ICALToHeader</a></h3><p>Mailet Info: <b>ICALToHeader Mailet</b><br /></p><p>ICALToHeader takes a Map of filenames to ICAL4J calendars, 
+will pick the first Calendar,
+and add it to the headers of the e-mail.
 
-<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>
+The following headers will be added : X_MEETING_UID, X_MEETING_METHOD, X_MEETING_RECURRENCE_ID, X_MEETING_SEQUENCE,
+X_MEETING_DTSTAMP
 
-<li><b>attachError</b> - Attach error. Default is false.</li>
+The only configuration parameter for this mailet is the attribute the ICAL4J Calendar map should be attached to,
+named <b>attribute</b>.
 
-<li><b>message</b> - Set the message which get included in the bounce.</li>
+Configuration example :
 
-<li><b>prefix</b> - Optional subject prefix prepended to the original message.</li>
+<pre>
+    <code>
+        &lt;mailet matcher=??? class=ICALToHeader&gt;
+            &lt;attribute&gt;icalendars&lt;/attribute&gt;
+        &lt;/mailet&gt;
+    </code>
+</pre></p><

<TRUNCATED>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org