<?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 2021-11-12 -->
<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 Project &#x2013; Overview</title>
    <style type="text/css" media="all">
      @import url("../css/james.css");
      @import url("../css/maven-base.css");
      @import url("../css/maven-theme.css");
      @import url("../css/site.css");
      @import url("../js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
      @import url("../js/jquery/css/print.css");
      @import url("../js/fancybox/jquery.fancybox-1.3.4.css");
    </style>
    <script type="text/javascript" src="../js/jquery/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="../js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
    <script type="text/javascript" src="../js/fancybox/jquery.fancybox-1.3.4.js"></script>
    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
      <meta name="author" content="Mailet API Project" />
    <meta name="Date-Revision-yyyymmdd" content="20211112" />
    <meta http-equiv="Content-Language" content="en" />
        
          <!-- Google Analytics -->
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1384591-1']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
      })();

    </script>
    </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../index.html" id="bannerLeft" title="james-logo.png">
              
                                                                            
        <img src="../images/logos/james-logo.png" alt="James Project" />
                </a>
                              <a href="https://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: 2021-11-12</span>
                      </div>
            <div class="xright">                    <a href="../index.html" title="Home">Home</a>
            |
                        <a href="../documentation.html" title="James">James</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>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>James components</h5>
                  <ul>
                                                                                                                                                                                                                    <li class="collapsed">
                          <a href="../documentation.html" title="About James">About James</a>
                  </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  <li class="collapsed">
                          <a href="../server/index.html" title="Server">Server</a>
                  </li>
                                                                                                                                                                                                                                                                              <li class="expanded">
            <strong>Mailets</strong>
                  <ul>
                      <li class="none">
                          <a href="../mailet/quickstart.html" title="Quick Start">Quick Start</a>
            </li>
                      <li class="none">
                          <a href="../mailet/api/index.html" title="Mailet API">Mailet API</a>
            </li>
                      <li class="none">
                          <a href="../mailet/base/index.html" title="Basic Mailet Toolkit">Basic Mailet Toolkit</a>
            </li>
                      <li class="none">
                          <a href="../mailet/standard/index.html" title="Standard Mailets">Standard Mailets</a>
            </li>
                      <li class="none">
                          <a href="../mailet/crypto/index.html" title="Crypto Mailets">Crypto Mailets</a>
            </li>
                      <li class="none">
                          <a href="../mailet/ai/index.html" title="Mailet AI">Mailet AI</a>
            </li>
                      <li class="none">
                          <a href="../mailet/mailetdocs-maven-plugin/index.html" title="MailetDocs">MailetDocs</a>
            </li>
                      <li class="none">
                          <a href="../mail.html#Mailet_API_List" title="Mailing Lists">Mailing Lists</a>
            </li>
                      <li class="none">
                          <a href="../mailet/release-notes.html" title="Release Notes">Release Notes</a>
            </li>
                      <li class="none">
                          <a href="../mailet/apidocs" title="Java Docs">Java Docs</a>
            </li>
                      <li class="none">
                          <a href="https://issues.apache.org/jira/browse/MAILET" title="Issue Tracker">Issue Tracker</a>
            </li>
                      <li class="none">
                          <a href="httsp://james.apache.org/download.cgi#Apache_Mailet" title="Download releases">Download releases</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                                                                                                                                      <li class="collapsed">
                          <a href="../mailbox/index.html" title="Mailbox">Mailbox</a>
                  </li>
                                                                                                                                                                                <li class="collapsed">
                          <a href="../protocols/index.html" title="Protocols">Protocols</a>
                  </li>
                                                                                                                                                                                      <li class="collapsed">
                          <a href="../mpt/index.html" title="MPT">MPT</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">
        

    
        <section>
<h2><a name="Introduction"></a>Introduction</h2>
            <section>
<h3><a name="What_Is_A_Mailet.3F"></a>What Is A Mailet?</h3>
                
<p>
                    A mailet is an email processing agent described by the
                    <a class="externalLink" href="http://james.apache.org/mailet/api/index.html">Mailet API</a>.
                </p>
                
<p>
                    Mailets are both flexible and powerful. So they can be used for a very wide range of purposes.
                    The
                    <a class="externalLink" href="http://james.apache.org/server/index.html">James email server</a>
                    factors most of it's mail processing functionality into mailets. These mailets can be used
                    independently in any compatible Mailet container.
                </p>
                
<p>
                    Apache Mailet 2.5.0 is the latest release and can be downloaded
                    <a class="externalLink" href="http://james.apache.org/download.cgi">here</a>.
                </p>
            </section>
        </section>
        <section>
<h2><a name="Further_Information"></a>Further Information</h2>
            
<ul>
                
<li>
                    <a href="api/index.html">Mailet API</a>
                    describes the API implemented by Mailets
                </li>
                
<li>
                    <a href="base/index.html">Mailet Base</a>
                    is a basic toolkit aimed at developers of Mailet implementations
                </li>
                
<li>
                    <a href="standard/index.html">Standard Mailets</a>
                    is a collection of basic Mailets with minimal dependencies
                </li>
                
<li>
                    <a href="crypto/index.html">Crypto Mailets</a>
                    contains cryptographic Mailets which can be used to sign and verify signatures
                </li>
                
<li>
                    <a class="externalLink" href="http://james.apache.org/jsieve/mailet/index.html">JSieve</a>
                    contains mailets using the
                    <a class="externalLink" href="http://www.ietf.org/rfc/rfc3028.txt">Sieve</a>
                    mail filter language
                </li>
                
<li>
                    <a href="mailetdocs-maven-plugin/index.html">Mailetdocs</a>
                    generates catalogs and documentation for mailets.
                </li>
            </ul>
        </section>
    

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