<?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; Old Release Notes (aggregated)</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="Apache JAMES Project Team" />
    <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="collapsed">
                          <a href="../mailet/index.html" title="Mailets">Mailets</a>
                  </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="AI_Mailets_Release_Notes"></a>AI Mailets Release Notes</h2>
<p>Apache James AI Mailets 0.1 is expect to be the first independent release of this code.</p>
<p>Previously released in <a class="externalLink" href="http://james.apache.org/server/index.html&apos;">Apache James Server</a> 2.</p>
<p><a class="externalLink" href="http://maven.apache.org">Maven 3</a> is used to build this project.</p></section><section>
<h2><a name="MailetDocs_Release_Notes_.282009-01-17.29"></a>MailetDocs Release Notes (2009-01-17)</h2>
<p>The MailetDocs plugin for <a class="externalLink" href="http://maven.apache.org">Apache Maven</a> documents implementations of the <a class="externalLink" href="http://james.apache.org/mailet/api">Apache Mailet API</a>. A mailet is an independent mail processor designed to be run in a mailet container. A catalog of mailets and matchers is created, together with reports on each one.</p></section><section>
<h2><a name="a0.1"></a>0.1</h2>
<p>0.1 is the first release of this plugin. Basic function is complete but the API may change as the code is developed. Feedback to server-dev@james.apache.org is appreciated.</p></section><section>
<h2><a name="Apache_James_Mailet_Base_Release_Notes_.282009-04-01.29"></a>Apache James Mailet Base Release Notes (2009-04-01)</h2>
<p>Apache James Mailets Base collects a number of utilites and lightweight frameworks useful when working with the <a class="externalLink" href="http://james.apache.org/mailet"> Apache Mailet API</a> (a framework assisting the rapid development of email processing functionality). Mailets base is used as the basis for the email processing functions shipped with the <a class="externalLink" href="http://james.apache.org/server"> Apache James server</a> (an advanced mail server) but is not dependent on that server.</p>
<p>Version 1.0</p>
<p>This is the first independent release of these mature components last shipped with Apache James 2.3.</p>
<p>Earlier Releases</p>
<p>Previous versions of the components in base shipped with Apache James server. This product contains repackaged versions which are otherwise compatible with these versions. All classes are package org.apache.mailet.base except test helpers (which are now packaged in org.apache.mailet.base.test).</p>
<p>It is recommended that anyone using these older versions updates to the new library.</p>
<p>Apache James Mailet Crypto Release Notes (2009-02-09)</p>
<p>Apache James Cryptographic Mailets encode, decode, sign and verify mail, together with related cryptology utilities. Mailets are defined by the <a class="externalLink" href="http://james.apache.org/mailet">Apache Mailet API</a> (a framework assisting the rapid development of email processing functionality).</p>
<p><a class="externalLink" href="http://maven.apache.org">Maven 2</a> is used to build this project.</p>
<p>1.1 (In Preparation)</p>
<p>Is a JRE update release upgrading dependencies and code to Java 1.5</p>
<ul>
<li>Upgrading to BouncyCastle 1.43 from 1.29 adds numerous features, resolves many defects and addresses some security advisories. See the <a class="externalLink" href="http://www.bouncycastle.org/releasenotes.html"> release notes</a> for more details.</li>
<li>The secondary Ant build has now been removed. Maven should be used to build. The Maven build now inherits and uses the Apache standard pom.</li></ul>
<p>1.0</p>
<p>This is the first independent release of this code. Previously it was shipped as part of the <a class="externalLink" href="http://james.apache.org/mailet">Apache James Mail Server</a> (an advanced mail server). This release is not dependent on that server but can be used in any Mailet container.</p>
<p>Cryptography Notice</p>
<p>This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org for more information.</p>
<p>The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.</p>
<p>The following provides more details on the included cryptographic software:</p>
<p>This library provides high level crytographic operations based on lower level crytographic libraries created by The Legion of the Bouncy Castle (http://www.bouncycastle.org/).</p>
<p>Export classifications and source links can be found at http://www.apache.org/licenses/exports/.</p></section><section>
<h2><a name="Apache_James_Standard_Mailet_Release_Notes_.282009-02-09.29"></a>Apache James Standard Mailet Release Notes (2009-02-09)</h2>
<p>Apache James Standard Mailets are a collection of general purpose mail processing agents with minimal dependencies. Mailets are defined by the <a class="externalLink" href="http://james.apache.org/mailet">Apache Mailet API</a> (a framework assisting the rapid development of email processing functionality).</p></section><section>
<h2><a name="a1.0"></a>1.0</h2>
<p>This is the first independent release of this code. Previously it was shipped as part of the <a class="externalLink" href="http://james.apache.org/mailet">Apache James Mail Server</a> (an advanced mail server). This release is not dependent on that server but can be used in any Mailet container.</p><section>
<h3><a name="Since_James_Server_2.3.1"></a>Since James Server 2.3.1</h3>
<ul>
<li>Upgrade to Apache Mailet API 2.4 and Apache Mailets Base 1.0</li>
<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/JAMES-728">JAMES-728</a>] - ClamAV and IOUtil updates to close streams/readers/writers and sockets</li>
<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/JAMES-733">JAMES-733</a>] - Fix javadoc</li>
<li>[<a class="externalLink" href="https://issues.apache.org/jira/browse/JAMES-579">JAMES-579</a>] - Update license headers and NOTICE to follow the latest ASF requirements</li></ul></section></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>
