http://git-wip-us.apache.org/repos/asf/james-site/blob/f81a00ef/content/server/dev-extend-mailet.html ---------------------------------------------------------------------- diff --git a/content/server/dev-extend-mailet.html b/content/server/dev-extend-mailet.html new file mode 100644 index 0000000..0cc0a9e --- /dev/null +++ b/content/server/dev-extend-mailet.html @@ -0,0 +1,523 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- Generated by Apache Maven Doxia at 2016-12-06 --> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Apache James Server 3.0 - + Apache James Server 3 - Writing a Custom Mailet</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="20161206" /> + <meta http-equiv="Content-Language" content="en" /> + +<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/> + + <!-- Google Analytics --> + <script type="text/javascript"> + + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-1384591-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); + })(); + + </script> + </head> + <body class="composite"> + <div id="banner"> + <a href="../index.html" id="bannerLeft" title="james-logo.png"> + + + <img src="images/logos/james-logo.png" alt="Apache James Server 3.0" /> + </a> + <a href="http://www.apache.org/index.html" id="bannerRight"> + + + <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" /> + </a> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + <div class="xleft"> + <span id="publishDate">Last Published: 2016-12-06</span> + </div> + <div class="xright"> <a href="../../index.html" title="Home">Home</a> + | + <a href="../index.html" title="Server">Server</a> + | + <a href="../../hupa/index.html" title="Hupa">Hupa</a> + | + <a href="../../protocols/index.html" title="Protocols">Protocols</a> + | + <a href="../../mailet/index.html" title="Mailets">Mailets</a> + | + <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a> + | + <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a> + | + <a href="../../jsieve/index.html" title="jSieve">jSieve</a> + | + <a href="../../jspf/index.html" title="jSPF">jSPF</a> + | + <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a> + | + <a href="../../mpt/index.html" title="MPT">MPT</a> + | + <a href="../../postage/index.html" title="Postage">Postage</a> + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + <h5>Overview</h5> + <ul> + <li class="none"> + <a href="index.html" title="Introduction">Introduction</a> + </li> + <li class="none"> + <a href="release-notes.html" title="Release Notes">Release Notes</a> + </li> + </ul> + <h5>Features</h5> + <ul> + <li class="none"> + <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a> + </li> + <li class="none"> + <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a> + </li> + <li class="none"> + <a href="feature-persistence.html" title="Persistence">Persistence</a> + </li> + <li class="none"> + <a href="feature-protocols.html" title="Protocols">Protocols</a> + </li> + <li class="none"> + <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a> + </li> + <li class="none"> + <a href="feature-performance.html" title="Performance">Performance</a> + </li> + <li class="none"> + <a href="feature-security.html" title="Security">Security</a> + </li> + </ul> + <h5>User Manual</h5> + <ul> + <li class="none"> + <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a> + </li> + <li class="none"> + <a href="install.html" title="2. Install James">2. Install James</a> + </li> + <li class="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="expanded"> + <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a> + <ul> + <li class="none"> + <strong>Mailet</strong> + </li> + <li class="none"> + <a href="dev-extend-matcher.html" title="Matcher">Matcher</a> + </li> + <li class="none"> + <a href="dev-extend-smtp-hook.html" title="SMTP Hook">SMTP Hook</a> + </li> + </ul> + </li> + <li class="collapsed"> + <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a> + </li> + </ul> + <h5>References</h5> + <ul> + <li class="none"> + <a href="apidocs/index.html" title="Javadoc">Javadoc</a> + </li> + <li class="none"> + <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a> + </li> + </ul> + <h5>About James</h5> + <ul> + <li class="none"> + <a href="../../index.html" title="Overview">Overview</a> + </li> + <li class="none"> + <a href="../../newsarchive.html" title="News">News</a> + </li> + <li class="none"> + <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a> + </li> + <li class="none"> + <a href="../../contribute.html" title="Contributing">Contributing</a> + </li> + <li class="none"> + <a href="../../guidelines.html" title="Guidelines">Guidelines</a> + </li> + <li class="none"> + <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a> + </li> + <li class="none"> + <a href="../../team-list.html" title="Who We Are">Who We Are</a> + </li> + <li class="none"> + <a href="../../license.html" title="License">License</a> + </li> + <li class="none"> + <a href="../../thanks.html" title="Thanks">Thanks</a> + </li> + <li class="none"> + <a href="../../support.html" title="Professional support">Professional support</a> + </li> + </ul> + <h5>Download</h5> + <ul> + <li class="none"> + <a href="../../download.cgi" title="Releases">Releases</a> + </li> + </ul> + <h5>Apache Software Foundation</h5> + <ul> + <li> + <strong> + <a title="ASF" href="http://www.apache.org/">ASF</a> + </strong> + </li> + <li> + <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> + </li> + <li> + <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> + </li> + <li> + <a title="License" href="http://www.apache.org/licenses/" >License</a> + </li> + <li> + <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> + </li> + <li> + <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> + </li> + <li> + <a title="Security" href="http://www.apache.org/security/">Security</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /> + </a> + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <!-- Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. --> + + + +<div class="section"> +<h2>Writing a Custom Mailet<a name="Writing_a_Custom_Mailet"></a></h2> + + +<p> + Implementing a custom mailet is generally a simple task, most of whose complexity + lies in coding the actual work to be done by the mailet. This is largely due to the + simplicity of the Mailet interface and the fact that a GenericMailet class is provided + as part of the Mailet package. + </p> + + +<p> + In this discussion we will assume that any mailet being implemented is a subclass of + GenericMailet. The GenericMailet class serves to abstract away of the configuration and + logging details. While it provides a noop implementation of the init() and destroy() methods, + these can be easily overridden to provide useful functionality. + </p> + + +<p> + In general, the only four methods that you should need to implement are init(), destroy(), + getMailetInfo(), and service(Mail). And only the last is required in all cases. + </p> + + +<div class="section"> +<h3>Configuration<a name="Configuration"></a></h3> + +<p> + As described in the <a href="config-mailetcontainer.html">SpoolManager configuration + section</a>, mailets are configured with a set of String (name, value) pairs. These values are + passed into the Mailet upon initialization (although the details of this process are hidden by + the GenericMailet implementation). GenericMailet provides access to this configuration + information through use of the getInitParameter(String) method. Passing in the name of the + requested configuration value will yield the value if set, and null otherwise. Configuration + values are available inside the init(), destroy(), and service(Mail) methods. + </p> + </div> + + +<div class="section"> +<h3>Logging<a name="Logging"></a></h3> + + +<p> + There is a simple logging mechanism provided by the Mailet API. It does not support + logging levels, so any log filtering will have to be implemented in the Mailet code. + Logging is done by calling one of the two logging methods on GenericMailet - log(String) + or log(String,Throwable). Logging is available inside the init(), destroy(), and service(Mail) + methods. + </p> + +<p> + Please note that the log() method logs with DEBUG level. You will need to define that DEBUG level + in the log4j.properties. + </p> + +<p> + The value of getMailetInfo() for the Mailet is prepended to the log entries for that + Mailet. So it may be desirable for you to override this method so you can distinguish mailet + log entries by Mailet. + </p> + +<p> + Alternatively, you can instanciate your own logger and log with different level, as show in the + following snippet (don't forget to update the log4j.properties so you log are taken into account). + </p> + + +<div class="source"> +<pre> +package com.test; + +import javax.mail.MessagingException; + +import org.apache.mailet.Mail; +import org.apache.mailet.base.GenericMailet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MyMailet extends GenericMailet{ + private static final Logger logger = LoggerFactory.getLogger(MyMailet.class); + @Override + public void service(Mail mail) throws MessagingException { + log("log via mailet logger with INFO level"); + logger.info("Log via slf4j with INFO level !!! Add log4j.logger.com.test=INFO, CONS, FILE in the log4j.properties"); + logger.debug("Log via slf4j with DEBUG level !!! Add log4j.logger.com.test=DEBUG, CONS, FILE in the log4j.properties"); + } +} +</pre></div> +</div> + + +<div class="section"> +<h3>Initialization<a name="Initialization"></a></h3> + +<p> + As part of the Mailet lifecycle, a Mailet is guaranteed to be initialized immediately after + being instantiated. This happens once and only once for each Mailet instance. The + Initialization phase is where configuration parsing and per-Mailet resource creation generally + take place. Depending on your Mailet, it may or may not be necessary to do any initialization + of the mailet. Initialization logic is implemented by overriding the init() method of + GenericMailet. + </p> +</div> + + +<div class="section"> +<h3>Servicing<a name="Servicing"></a></h3> + +<p> + The bulk of the Mailet logic is expected to be invoked from the service(Mail) method. This + method is invoked each time a mail message is to be processed by the mailet. The message is + passed in as an instance of the Mail interface, which is part of the Mailet API.</p> + +<p>The Mail interface is essentially a light wrapper around JavaMail's MimeMessage class with a + few important differences. See the Javadoc for the interface for a description of the additional + methods available on this wrapper. + </p> +</div> + + +<div class="section"> +<h3>Destruction<a name="Destruction"></a></h3> + +<p> + As part of the Mailet lifecycle, a Mailet is guaranteed to be destroyed when the container + cleans up the Mailet. This happens once and only once for each Mailet instance. The + Destruction phase is where per-Mailet resource release generally takes place. Depending + on your Mailet, it may or may not be necessary to do any destruction + of the mailet. Destruction logic is implemented by overriding the destroy() method of + GenericMailet. + </p> +</div> + +</div> + + +<div class="section"> +<h2>Deploying a Custom Mailet<a name="Deploying_a_Custom_Mailet"></a></h2> + + +<p> + Once a Mailet has been successfully implemented there are only a couple of + additional steps necessary to actually deploy the Mailet. + </p> + + +<div class="section"> +<h3>Adding Your Mailet to the Classpath<a name="Adding_Your_Mailet_to_the_Classpath"></a></h3> + +<p> + The Mailet must be added to James' classpath so that the Mailet can be loaded by James. There + are two ways to add a custom Mailet to the classpath so that James will be able to load the + Mailet. These are: + </p> + +<p> + 1a. Download the source distribution, add a jar file containing the custom files to the lib + directory of the unpacked source distribution, and build a new .tar.gz/zip file by following the + directions <a href="build-instructions.html">here</a>. This new tar.gz/zip file will now + include your custom classes. + </p> + +<p> + or + </p> + +<p> + 1b. Place a jar file containing the custom class files in + /path/to/james/conf/lib/ subdirectory. + </p> + +<p> + 2. The mailetpackages entity is no longer required, the class attribute of mailets and matchers now takes a fully qualified class name e.g. + +<p> +</p> +<div class="source"> +<pre> +<mailet match="All" class="com.your.company.MyMailet"/> +</pre></div> + + After that, restart James server. + + </div> + + +<div class="section"> +<h3>James Configuration<a name="James_Configuration"></a></h3> + +<p>Configuration of the processor chain is discussed + <a href="config-mailetcontainer.html">elsewhere</a> in this documentation. The + details of configuring mailet deployment is discussed at length. Here we will only comment + that it is important to add the appropriate mailet package for your custom mailet to the + <mailetpackages> list and that the name of your mailet should not conflict with any of + the mailets described <a href="dev-provided-mailets.html">here</a>. + </p> + </div> + +</div> + + + + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">Copyright © 2002-2016 + <a href="https://www.apache.org/">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html>
http://git-wip-us.apache.org/repos/asf/james-site/blob/f81a00ef/content/server/dev-extend-matcher.html ---------------------------------------------------------------------- diff --git a/content/server/dev-extend-matcher.html b/content/server/dev-extend-matcher.html new file mode 100644 index 0000000..bacc806 --- /dev/null +++ b/content/server/dev-extend-matcher.html @@ -0,0 +1,493 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- Generated by Apache Maven Doxia at 2016-12-06 --> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Apache James Server 3.0 - + Apache James Server 3 - Writing a Custom Matcher</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="20161206" /> + <meta http-equiv="Content-Language" content="en" /> + +<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/> + + <!-- Google Analytics --> + <script type="text/javascript"> + + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-1384591-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); + })(); + + </script> + </head> + <body class="composite"> + <div id="banner"> + <a href="../index.html" id="bannerLeft" title="james-logo.png"> + + + <img src="images/logos/james-logo.png" alt="Apache James Server 3.0" /> + </a> + <a href="http://www.apache.org/index.html" id="bannerRight"> + + + <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" /> + </a> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + <div class="xleft"> + <span id="publishDate">Last Published: 2016-12-06</span> + </div> + <div class="xright"> <a href="../../index.html" title="Home">Home</a> + | + <a href="../index.html" title="Server">Server</a> + | + <a href="../../hupa/index.html" title="Hupa">Hupa</a> + | + <a href="../../protocols/index.html" title="Protocols">Protocols</a> + | + <a href="../../mailet/index.html" title="Mailets">Mailets</a> + | + <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a> + | + <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a> + | + <a href="../../jsieve/index.html" title="jSieve">jSieve</a> + | + <a href="../../jspf/index.html" title="jSPF">jSPF</a> + | + <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a> + | + <a href="../../mpt/index.html" title="MPT">MPT</a> + | + <a href="../../postage/index.html" title="Postage">Postage</a> + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + <h5>Overview</h5> + <ul> + <li class="none"> + <a href="index.html" title="Introduction">Introduction</a> + </li> + <li class="none"> + <a href="release-notes.html" title="Release Notes">Release Notes</a> + </li> + </ul> + <h5>Features</h5> + <ul> + <li class="none"> + <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a> + </li> + <li class="none"> + <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a> + </li> + <li class="none"> + <a href="feature-persistence.html" title="Persistence">Persistence</a> + </li> + <li class="none"> + <a href="feature-protocols.html" title="Protocols">Protocols</a> + </li> + <li class="none"> + <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a> + </li> + <li class="none"> + <a href="feature-performance.html" title="Performance">Performance</a> + </li> + <li class="none"> + <a href="feature-security.html" title="Security">Security</a> + </li> + </ul> + <h5>User Manual</h5> + <ul> + <li class="none"> + <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a> + </li> + <li class="none"> + <a href="install.html" title="2. Install James">2. Install James</a> + </li> + <li class="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="expanded"> + <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a> + <ul> + <li class="none"> + <a href="dev-extend-mailet.html" title="Mailet">Mailet</a> + </li> + <li class="none"> + <strong>Matcher</strong> + </li> + <li class="none"> + <a href="dev-extend-smtp-hook.html" title="SMTP Hook">SMTP Hook</a> + </li> + </ul> + </li> + <li class="collapsed"> + <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a> + </li> + </ul> + <h5>References</h5> + <ul> + <li class="none"> + <a href="apidocs/index.html" title="Javadoc">Javadoc</a> + </li> + <li class="none"> + <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a> + </li> + </ul> + <h5>About James</h5> + <ul> + <li class="none"> + <a href="../../index.html" title="Overview">Overview</a> + </li> + <li class="none"> + <a href="../../newsarchive.html" title="News">News</a> + </li> + <li class="none"> + <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a> + </li> + <li class="none"> + <a href="../../contribute.html" title="Contributing">Contributing</a> + </li> + <li class="none"> + <a href="../../guidelines.html" title="Guidelines">Guidelines</a> + </li> + <li class="none"> + <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a> + </li> + <li class="none"> + <a href="../../team-list.html" title="Who We Are">Who We Are</a> + </li> + <li class="none"> + <a href="../../license.html" title="License">License</a> + </li> + <li class="none"> + <a href="../../thanks.html" title="Thanks">Thanks</a> + </li> + <li class="none"> + <a href="../../support.html" title="Professional support">Professional support</a> + </li> + </ul> + <h5>Download</h5> + <ul> + <li class="none"> + <a href="../../download.cgi" title="Releases">Releases</a> + </li> + </ul> + <h5>Apache Software Foundation</h5> + <ul> + <li> + <strong> + <a title="ASF" href="http://www.apache.org/">ASF</a> + </strong> + </li> + <li> + <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> + </li> + <li> + <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> + </li> + <li> + <a title="License" href="http://www.apache.org/licenses/" >License</a> + </li> + <li> + <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> + </li> + <li> + <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> + </li> + <li> + <a title="Security" href="http://www.apache.org/security/">Security</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /> + </a> + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <!-- Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. --> + + + +<div class="section"> +<h2>Writing a Custom Matcher<a name="Writing_a_Custom_Matcher"></a></h2> + + +<p>Implementing a custom matcher is generally a simple task, most of whose complexity +lies in coding the actual work to be done by the matcher. This is largely due to the +simplicity of the Matcher interface and the fact that a couple of abstract Matcher template +classes are provided in the Mailet package. These two classes, GenericMatcher and +GenericRecipientMatcher, greatly simplfy the task of Matcher authoring.</p> + +<p>As discussed elsewhere in this manual, the Matcher interface does not simply match +or not match a particular message. Rather, it returns some subset of the original message +recipients as a result of the match(Mail) method. This leads to the two different abstract +Matcher implementations.</p> + +<p>The first, GenericMatcher, is intended for matchers where recipient evaluation is not +necessary. Basically, you should subclass this implementation if your matcher is going to +return all or none of the recipients.</p> + +<p>When subclassing this class, there are four methods that potentially need to be +overridden. These are getMatcherInfo(), init(), match(Mail), and destroy(). More on these +anon.</p> + +<p>The second implementation, GenericRecipientMatcher, is intended for those matchers where +each recipient is evaluated individually. It is a subclass of GenericMatcher, and inherits +most of its behavior from that class. The only major difference is that subclasses are +expected to override matchRecipient(MailAddress) rather than match(Mail).</p> + + +<div class="section"> +<h3>Configuration<a name="Configuration"></a></h3> + +<p>Matchers are passed a single String as part of their configuration. Interpretation of this +list is left entirely to the body of the Matcher. This String value is available in +the body of the Matcher through use of the getCondition() method of the +GenericMatcher class. This method returns the String value passed to the Matcher, and returns +null if no value is set. The method getCondition() is available inside the init(), destroy(), match(Mail), +and matchRecipient(MailAddress) methods.</p> +</div> + + +<div class="section"> +<h3>Logging<a name="Logging"></a></h3> + +<p>There is a simple logging mechanism provided by the Mailet API. It does not support +logging levels, so any log filtering will have to be implemented in the Matcher code. +Logging is done by calling one of the two logging methods on GenericMatcher/GenericRecipientMatcher - log(String) +or log(String,Throwable). Logging is available inside the init(), destroy(), match(Mail), +and matchRecipient(MailAddress) methods.</p> + +<p>The value of getMatcherInfo() for the Matcher is prepended to the log entries for that +Matcher. So it may be desirable for you to override this method so you can distinguish Matcher +log entries by Matcher.</p> +</div> + + +<div class="section"> +<h3>Initialization<a name="Initialization"></a></h3> + +<p>As part of the Matcher lifecycle, a Matcher is guaranteed to be initialized immediately after +being instantiated. This happens once and only once for each Matcher instance. The +Initialization phase is where configuration parsing and per-Matcher resource creation generally +take place. Depending on your Matcher, it may or may not be necessary to do any initialization +of the Matcher. Initialization logic is implemented by overriding the init() method of +GenericMatcher/GenericRecipientMatcher.</p> +</div> + + +<div class="section"> +<h3>Matching<a name="Matching"></a></h3> + +<p>It is the matching phase where the Matcher's work is done. The exact form of this phase largely +depends on which Matcher superclass is subclassed.</p> + +<p>If GenericMatcher is being subclassed, it is the match(Mail) that is implemented. As described +above, this method returns a Collection of MailAddresses that is a subset of the original +recipients for the Mail object.</p> + +<p>If it is a purely recipient-filtering Matcher, then the GenericRecipientMatcher should be +subclassed. In this case, developers must provide an implementation of the +matchRecipient(MailAddress) method. This method returns true if the recipient matches, +and false otherwise.</p> +</div> + + +<div class="section"> +<h3>Destruction<a name="Destruction"></a></h3> + +<p>As part of the Matcher lifecycle, a Matcher is guaranteed to be destroyed when the container +cleans up the Matcher. This happens once and only once for each Matcher instance. The +Destruction phase is where per-Matcher resource release generally takes place. Depending +on your Matcher, it may or may not be necessary to do any destruction +of the Matcher. Destruction logic is implemented by overriding the destroy() method of +GenericMatcher/GenericRecipientMatcher.</p> +</div> + +</div> + + +<div class="section"> +<h2>Deploying a Custom Matcher<a name="Deploying_a_Custom_Matcher"></a></h2> + +<p>Once a Matcher has been successfully implemented there are only a couple of +additional steps necessary to actually deploy the Matcher.</p> + +<div class="section"> +<h3>Adding Your Matcher to the Classpath<a name="Adding_Your_Matcher_to_the_Classpath"></a></h3> + +<p> +The Matcher must be added to James' classpath so that the Matcher can be loaded by James. There +are two ways to add a custom Matcher to the classpath so that James will be able to load the +Matcher. These are: +</p> + +<p> +1a. Download the source distribution, add a jar file containing the custom files to the lib +directory of the unpacked source distribution, and build a new .sar file by following the +directions <a href="build-instructions.html">here</a>. This new .sar file will now +include your custom classes. +</p> + +<p> +or +</p> + +<p> +1b. Place a jar file containing the custom class files in the lib subdirectory of the James +installation. It will also be necessary to unpack the JavaMail and James jar files from +the provided .sar file and add them to this directory. +</p> + +<p> +or +</p> + +<p> +1c. Place a jar file containing the custom class files in +/path/to/james/conf/lib/ subdirectory. +</p> + +<p> +2. After this is done get sure you add the matcher package to the mailetcontainer.xml. For example: + +<p> +</p> +<div class="source"> +<pre> +<!-- Set the Java packages from which to load mailets and matchers --> +<matcherpackages> + <matcherpackage>org.apache.james.transport.matchers</matcherpackage> + <matcherpackage>org.apache.james.transport.matchers.smime</matcherpackage> + <matcherpackage>your.costum.package.transport-matchers</matcherpackage> +</matcherpackages> +</pre></div> + +After that restart james. + +</div> + + +<div class="section"> +<h3>James Configuration<a name="James_Configuration"></a></h3> + +<p>Configuration of the processor chain is discussed +<a href="config-mailetcontainer.html">elsewhere</a> in this documentation. The +details of configuring matcher deployment is discussed at length. Here we will only comment +that it is important to add the appropriate matcher package for your custom matcher to the +<matcherpackages> list and that the name of your matcher should not conflict with any of +the matchers described <a href="dev-provided-matchers.html">here</a>. +</p> +</div> + +</div> + + + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">Copyright © 2002-2016 + <a href="https://www.apache.org/">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/james-site/blob/f81a00ef/content/server/dev-extend-smtp-hook.html ---------------------------------------------------------------------- diff --git a/content/server/dev-extend-smtp-hook.html b/content/server/dev-extend-smtp-hook.html new file mode 100644 index 0000000..a2a327f --- /dev/null +++ b/content/server/dev-extend-smtp-hook.html @@ -0,0 +1,385 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- Generated by Apache Maven Doxia at 2016-12-06 --> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Apache James Server 3.0 - + Apache James Server 3 - James - Extend James - SMTP Hooks</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="20161206" /> + <meta http-equiv="Content-Language" content="en" /> + +<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/> + + <!-- Google Analytics --> + <script type="text/javascript"> + + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-1384591-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); + })(); + + </script> + </head> + <body class="composite"> + <div id="banner"> + <a href="../index.html" id="bannerLeft" title="james-logo.png"> + + + <img src="images/logos/james-logo.png" alt="Apache James Server 3.0" /> + </a> + <a href="http://www.apache.org/index.html" id="bannerRight"> + + + <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" /> + </a> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + <div class="xleft"> + <span id="publishDate">Last Published: 2016-12-06</span> + </div> + <div class="xright"> <a href="../../index.html" title="Home">Home</a> + | + <a href="../index.html" title="Server">Server</a> + | + <a href="../../hupa/index.html" title="Hupa">Hupa</a> + | + <a href="../../protocols/index.html" title="Protocols">Protocols</a> + | + <a href="../../mailet/index.html" title="Mailets">Mailets</a> + | + <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a> + | + <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a> + | + <a href="../../jsieve/index.html" title="jSieve">jSieve</a> + | + <a href="../../jspf/index.html" title="jSPF">jSPF</a> + | + <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a> + | + <a href="../../mpt/index.html" title="MPT">MPT</a> + | + <a href="../../postage/index.html" title="Postage">Postage</a> + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + <h5>Overview</h5> + <ul> + <li class="none"> + <a href="index.html" title="Introduction">Introduction</a> + </li> + <li class="none"> + <a href="release-notes.html" title="Release Notes">Release Notes</a> + </li> + </ul> + <h5>Features</h5> + <ul> + <li class="none"> + <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a> + </li> + <li class="none"> + <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a> + </li> + <li class="none"> + <a href="feature-persistence.html" title="Persistence">Persistence</a> + </li> + <li class="none"> + <a href="feature-protocols.html" title="Protocols">Protocols</a> + </li> + <li class="none"> + <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a> + </li> + <li class="none"> + <a href="feature-performance.html" title="Performance">Performance</a> + </li> + <li class="none"> + <a href="feature-security.html" title="Security">Security</a> + </li> + </ul> + <h5>User Manual</h5> + <ul> + <li class="none"> + <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a> + </li> + <li class="none"> + <a href="install.html" title="2. Install James">2. Install James</a> + </li> + <li class="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="expanded"> + <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a> + <ul> + <li class="none"> + <a href="dev-extend-mailet.html" title="Mailet">Mailet</a> + </li> + <li class="none"> + <a href="dev-extend-matcher.html" title="Matcher">Matcher</a> + </li> + <li class="none"> + <strong>SMTP Hook</strong> + </li> + </ul> + </li> + <li class="collapsed"> + <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a> + </li> + </ul> + <h5>References</h5> + <ul> + <li class="none"> + <a href="apidocs/index.html" title="Javadoc">Javadoc</a> + </li> + <li class="none"> + <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a> + </li> + </ul> + <h5>About James</h5> + <ul> + <li class="none"> + <a href="../../index.html" title="Overview">Overview</a> + </li> + <li class="none"> + <a href="../../newsarchive.html" title="News">News</a> + </li> + <li class="none"> + <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a> + </li> + <li class="none"> + <a href="../../contribute.html" title="Contributing">Contributing</a> + </li> + <li class="none"> + <a href="../../guidelines.html" title="Guidelines">Guidelines</a> + </li> + <li class="none"> + <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a> + </li> + <li class="none"> + <a href="../../team-list.html" title="Who We Are">Who We Are</a> + </li> + <li class="none"> + <a href="../../license.html" title="License">License</a> + </li> + <li class="none"> + <a href="../../thanks.html" title="Thanks">Thanks</a> + </li> + <li class="none"> + <a href="../../support.html" title="Professional support">Professional support</a> + </li> + </ul> + <h5>Download</h5> + <ul> + <li class="none"> + <a href="../../download.cgi" title="Releases">Releases</a> + </li> + </ul> + <h5>Apache Software Foundation</h5> + <ul> + <li> + <strong> + <a title="ASF" href="http://www.apache.org/">ASF</a> + </strong> + </li> + <li> + <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> + </li> + <li> + <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> + </li> + <li> + <a title="License" href="http://www.apache.org/licenses/" >License</a> + </li> + <li> + <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> + </li> + <li> + <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> + </li> + <li> + <a title="Security" href="http://www.apache.org/security/">Security</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /> + </a> + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <!-- Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. --> + + + + <div class="section"> +<h2>Custom SMTP Hooks Implementations<a name="Custom_SMTP_Hooks_Implementations"></a></h2> + + +<div class="section"> +<h3>Why a Custom SMTP Hook<a name="Why_a_Custom_SMTP_Hook"></a></h3> + + +<p>What to do if the Hook API is not enough for you ? You want for example + to write a code which handles a new command like "YOURCOOLCOMMAND: whatever@example".</p> + + +<p>For this kind of needs you should implement the CommandHandler interface. + This gives you a lower-level API to handle this kind of tasks. If you want + to support a custom Hook in your <tt>CommandHandler</tt> its the best + to just extend <tt>AbstractHookableCmdHandler</tt>.</p> + + </div> + + +<div class="section"> +<h3>Things to Remember <a name="Things_to_Remember"></a></h3> + + +<p>Be aware that your implementation needs to be thread-safe as it will get used as singleton. + If you need to store temporary informations within the SMTP Transaction/Session you should + use the <tt>SMTPSession.getState().put(...)</tt> + and <tt>SMTPSession.getConnectionState().put(...)</tt> methods.</p> + + +<p>For a more explanation see the <a class="externalLink" href="http://james.apache.org/protocols/apidocs/index.html">apidocs</a> + for the protocols library which is used by James SMTP Server.</p> + + </div> + + +<div class="section"> +<h3>Get your Hook implementations loaded<a name="Get_your_Hook_implementations_loaded"></a></h3> + + +<p>Just create a jar file which contains your code and put it in /path/to/james/conf/lib/ + folder. The jar will get picked up by the ClassLoader automatic then.</p> + + +<p>After that open the smtpserver.xml file and add your hook to the <tt><handlers></handlers></tt> block in the order you + want to have it executed. So if you have 2 MailHook implementation make sure the first one + which is listed in smtpserver.xml is the one you want to call first.</p> + + </div> + + +<div class="section"> +<h3>Return-Codes<a name="Return-Codes"></a></h3> + + +<p>Each of the Hooks need to return a HookResult to tell the SMTPServer + if the next registered Hook should get called or not.</p> + + +<p>For this the HookReturnCode is used.</p> + + </div> + + </div> + + + + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">Copyright © 2002-2016 + <a href="https://www.apache.org/">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/james-site/blob/f81a00ef/content/server/dev-extend.html ---------------------------------------------------------------------- diff --git a/content/server/dev-extend.html b/content/server/dev-extend.html new file mode 100644 index 0000000..7768748 --- /dev/null +++ b/content/server/dev-extend.html @@ -0,0 +1,383 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- Generated by Apache Maven Doxia at 2016-12-06 --> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Apache James Server 3.0 - + Apache James Server 3 - Extend James</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="20161206" /> + <meta http-equiv="Content-Language" content="en" /> + +<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/> + <script type="text/javascript" src="./js/dev-extend.js"></script> + <!-- Google Analytics --> + <script type="text/javascript"> + + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-1384591-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s); + })(); + + </script> + </head> + <body class="composite"> + <div id="banner"> + <a href="../index.html" id="bannerLeft" title="james-logo.png"> + + + <img src="images/logos/james-logo.png" alt="Apache James Server 3.0" /> + </a> + <a href="http://www.apache.org/index.html" id="bannerRight"> + + + <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" /> + </a> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + <div class="xleft"> + <span id="publishDate">Last Published: 2016-12-06</span> + </div> + <div class="xright"> <a href="../../index.html" title="Home">Home</a> + | + <a href="../index.html" title="Server">Server</a> + | + <a href="../../hupa/index.html" title="Hupa">Hupa</a> + | + <a href="../../protocols/index.html" title="Protocols">Protocols</a> + | + <a href="../../mailet/index.html" title="Mailets">Mailets</a> + | + <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a> + | + <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a> + | + <a href="../../jsieve/index.html" title="jSieve">jSieve</a> + | + <a href="../../jspf/index.html" title="jSPF">jSPF</a> + | + <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a> + | + <a href="../../mpt/index.html" title="MPT">MPT</a> + | + <a href="../../postage/index.html" title="Postage">Postage</a> + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + <h5>Overview</h5> + <ul> + <li class="none"> + <a href="index.html" title="Introduction">Introduction</a> + </li> + <li class="none"> + <a href="release-notes.html" title="Release Notes">Release Notes</a> + </li> + </ul> + <h5>Features</h5> + <ul> + <li class="none"> + <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a> + </li> + <li class="none"> + <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a> + </li> + <li class="none"> + <a href="feature-persistence.html" title="Persistence">Persistence</a> + </li> + <li class="none"> + <a href="feature-protocols.html" title="Protocols">Protocols</a> + </li> + <li class="none"> + <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a> + </li> + <li class="none"> + <a href="feature-performance.html" title="Performance">Performance</a> + </li> + <li class="none"> + <a href="feature-security.html" title="Security">Security</a> + </li> + </ul> + <h5>User Manual</h5> + <ul> + <li class="none"> + <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a> + </li> + <li class="none"> + <a href="install.html" title="2. Install James">2. Install James</a> + </li> + <li class="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="expanded"> + <strong>Develop Extensions</strong> + <ul> + <li class="none"> + <a href="dev-extend-mailet.html" title="Mailet">Mailet</a> + </li> + <li class="none"> + <a href="dev-extend-matcher.html" title="Matcher">Matcher</a> + </li> + <li class="none"> + <a href="dev-extend-smtp-hook.html" title="SMTP Hook">SMTP Hook</a> + </li> + </ul> + </li> + <li class="collapsed"> + <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a> + </li> + </ul> + <h5>References</h5> + <ul> + <li class="none"> + <a href="apidocs/index.html" title="Javadoc">Javadoc</a> + </li> + <li class="none"> + <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a> + </li> + </ul> + <h5>About James</h5> + <ul> + <li class="none"> + <a href="../../index.html" title="Overview">Overview</a> + </li> + <li class="none"> + <a href="../../newsarchive.html" title="News">News</a> + </li> + <li class="none"> + <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a> + </li> + <li class="none"> + <a href="../../contribute.html" title="Contributing">Contributing</a> + </li> + <li class="none"> + <a href="../../guidelines.html" title="Guidelines">Guidelines</a> + </li> + <li class="none"> + <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a> + </li> + <li class="none"> + <a href="../../team-list.html" title="Who We Are">Who We Are</a> + </li> + <li class="none"> + <a href="../../license.html" title="License">License</a> + </li> + <li class="none"> + <a href="../../thanks.html" title="Thanks">Thanks</a> + </li> + <li class="none"> + <a href="../../support.html" title="Professional support">Professional support</a> + </li> + </ul> + <h5>Download</h5> + <ul> + <li class="none"> + <a href="../../download.cgi" title="Releases">Releases</a> + </li> + </ul> + <h5>Apache Software Foundation</h5> + <ul> + <li> + <strong> + <a title="ASF" href="http://www.apache.org/">ASF</a> + </strong> + </li> + <li> + <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> + </li> + <li> + <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a> + </li> + <li> + <a title="License" href="http://www.apache.org/licenses/" >License</a> + </li> + <li> + <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> + </li> + <li> + <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a> + </li> + <li> + <a title="Security" href="http://www.apache.org/security/">Security</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /> + </a> + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <!-- Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. --> + + + + +<div class="section"> +<h2>Extend James<a name="Extend_James"></a></h2> + + +<div class="section"> +<h3>Custom Mailet<a name="Custom_Mailet"></a></h3> + + +<p>See the <a href="dev-extend-mailet.html">mailet</a> page for more information.</p> + + </div> + + +<div class="section"> +<h3>Custom Matcher<a name="Custom_Matcher"></a></h3> + + +<p>See the <a href="dev-extend-mailet.html">matcher</a> page for more information.</p> + + </div> + + +<div class="section"> +<h3>SMTP Hook<a name="SMTP_Hook"></a></h3> + + +<p>See the <a href="dev-extend-hook-smtp.html">SMTP Hook</a> page for more information.</p> + + </div> + + +<div class="section"> +<h3>Mailbox Store<a name="Mailbox_Store"></a></h3> + + +<p>See the <a class="externalLink" href="http://james.apache.org/mailbox">mailbox</a> project for more information.</p> + + </div> + + +<div class="section"> +<h3>Mailbox Listeners<a name="Mailbox_Listeners"></a></h3> + + +<p>See the <a class="externalLink" href="http://james.apache.org/mailbox">mailbox</a> project for more information.</p> + + </div> + + +<div class="section"> +<h3>Queue<a name="Queue"></a></h3> + + </div> + + +<div class="section"> +<h3>Queue Listeners<a name="Queue_Listeners"></a></h3> + + </div> + +</div> + + + + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">Copyright © 2002-2016 + <a href="https://www.apache.org/">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
