<?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-09-26 -->
<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; Download</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 Mail Server Project" />
    <meta name="Date-Revision-yyyymmdd" content="20210926" />
    <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>
      <script type="text/javascript">
    
    function startListening (obj,evnt,func) { 
      if (obj.addEventListener) {
        obj.addEventListener(evnt,func,false); 
      } else if (obj.attachEvent) {
        obj.attachEvent("on" + evnt,func); 
      } 
    } 
    
    function trackDownloads (evnt) { 
      var lnk; 
      if (evnt.srcElement) { 
        var elmnt = evnt.srcElement; 
        while (elmnt.tagName != "A") { 
          var newelmnt = elmnt.parentNode; 
          elmnt = newelmnt; 
        } 
        lnk = elmnt.hostname + "/" + elmnt.pathname + elmnt.search; 
      } else { 
        lnk = this.hostname + this.pathname + this.search; 
      } 
    
      var pos = lnk.indexOf("/james/");
      if (pos != -1) {
        lnk = lnk.substr(pos+7);
      }
      lnk = "/downloads/"+lnk;
    
      if (typeof(urchinTracker) == "function") {
        urchinTracker(lnk);
      } else if (_gaq) {
        _gaq.push(['_trackPageview', lnk]);
      }
    }
    
    $(function() {
      if (document.getElementsByTagName) { 
        var hrefs = document.getElementsByTagName('a'); 
        var extensions = ["gz","bz2","zip","jar","asc","sar"];
        for (var l = 0; l < hrefs.length; l++) {
          if (hrefs.item(l) != "") {
            var path = hrefs.item(l).pathname;
            var external = hrefs.item(l).hostname != location.host;
            if (external) {
              var splitted = path.split('.');
              var ext = splitted[ splitted.length-1 ];
              for (var e = 0; e < extensions.length; e++) {
                if (extensions[ e ] == ext) {
                  startListening(hrefs.item(l),"click",trackDownloads);
                }
              }
            }
          }
        } 
      } 
    });
    </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-09-26</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="Downloading"></a>Downloading</h2>
  
    
<p>Use the links below to download the product from one of
       our mirrors.  You <b>must</b>&#160;<a class="externalLink" href="https://www.apache.org/info/verification.html">verify the
       integrity</a> of the downloaded files using signatures <a class="externalLink" href="https://downloads.apache.org/james/KEYS">KEYS</a> downloaded from
       our main distribution directory.</p>
    
    
<ul>
      
<li><a href="#Apache_James_Server">Apache James Server</a></li>
      
<li><a href="#Apache_Mime4J">Apache James Mime4j</a></li>
      
<li><a href="#Apache_jSPF">Apache James jSPF</a></li>
      
<li><a href="#Apache_jDKIM">Apache James jDKIM</a></li>
      
<li><a href="#Apache_JSieve">Apache James JSieve</a></li>
      
<li><a href="#Apache_Mailet">Apache James Mailet</a></li>
      
<li><a href="#Apache_Mailet_Base">Apache James Mailet Base</a></li>
      
<li><a href="#Apache_Crypto_Mailets">Apache James Crypto Mailets</a></li>
      
<li><a href="#Apache_James_Protocols">Apache James Protocols</a></li>
      
<li><a href="#Apache_MPT">Apache James MPT</a></li>
      
<li>Apache MailetDoc Plugin for Maven is available from the standard Maven repositories (*)</li>
    </ul>
 
    
<p>(*) James maven repositories can be found on 
    <a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/">https://repo1.maven.org/maven2/org/apache/james/</a>.</p>

  </section>

  <section>
<h2><a name="Apache_James_Server"></a>Apache James Server</h2>

    <section>
<h3><a name="Apache_James_3.6.0_is_the_stable_version"></a>Apache James 3.6.0 is the stable version</h3>

      
<ul>
        
<li>Source code (ZIP Format):
          <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/server/3.6.0/james-project-3.6.0-source-release.zip">james-project-3.6.0-source-release.zip</a>
          [<a class="externalLink" href="https://downloads.apache.org/james/server/3.6.0/james-project-3.6.0-source-release.zip.sha512">SHA-512</a>]
          [<a class="externalLink" href="https://downloads.apache.org/james/server/3.6.0/james-project-3.6.0-source-release.zip.asc">PGP</a>]</li>

        
<li>Binary (ZIP Format) for Spring wiring:
          <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/server/3.6.0/james-server-app-3.6.0-app.zip">james-server-app-3.6.0-app.zip</a>
          [<a class="externalLink" href="https://downloads.apache.org/james/server/3.6.0/james-server-app-3.6.0-app.zip.sha512">SHA-512</a>]
          [<a class="externalLink" href="https://downloads.apache.org/james/server/3.6.0/james-server-app-3.6.0-app.zip.asc">PGP</a>]
        </li>

      </ul>

    </section>

    <section>
<h3><a name="Earlier_Releases"></a>Earlier Releases</h3>

      
<p>Are now <a class="externalLink" href="https://archive.apache.org/dist/james/server/">archived (discouraged)</a></p>

    </section>

  </section>

  <section>
<h2><a name="Apache_Mime4J"></a>Apache Mime4J</h2>
  
    
<p>Apache Mime4J 0.8.6 is the latest stable version.</p>


    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mime4j/0.8.6/james-mime4j-sources-0.8.6.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/james-mime4j-sources-0.8.6.zip.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/james-mime4j-sources-0.8.6.zip.asc">PGP</a>]
    </p>

    
<p>You can directly use the core library with maven:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mime4j-core&lt;/artifactId&gt;
    &lt;version&gt;0.8.6&lt;/version&gt;
  &lt;/dependency&gt;
     
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mime4j/0.8.6/apache-mime4j-core-0.8.6.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-core-0.8.6.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-core-0.8.6.jar.asc">PGP</a>]
      </p>

    
<p>In order to use Mime-4j DOM:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mime4j-dom&lt;/artifactId&gt;
    &lt;version&gt;0.8.6&lt;/version&gt;
  &lt;/dependency&gt;
     
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mime4j/0.8.6/apache-mime4j-dom-0.8.6.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-dom-0.8.6.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-dom-0.8.6.jar.asc">PGP</a>]
    </p>

    
<p>An aggregator project is also available:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mime4j&lt;/artifactId&gt;
    &lt;version&gt;0.8.6&lt;/version&gt;
  &lt;/dependency&gt;
     
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mime4j/0.8.6/apache-mime4j-0.8.6-bin.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-0.8.6-bin.zip.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mime4j/0.8.6/apache-mime4j-0.8.6-bin.zip.asc">PGP</a>]
    </p>
  
  </section>

  <section>
<h2><a name="Apache_jSPF"></a>Apache jSPF</h2>
  
    
<p>Apache James jSPF 1.0.1 is the latest jSPF stable version.</p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jspf/1.0.1/apache-jspf-sources-1.0.1.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jspf/1.0.1/apache-jspf-sources-1.0.1.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jspf/1.0.1/apache-jspf-sources-1.0.1.zip.asc">PGP</a>]
    </p>

    
<p>You can directly use it with maven:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james.jspf&lt;/groupId&gt;
    &lt;artifactId&gt;apache-jspf&lt;/artifactId&gt;
    &lt;version&gt;1.0.1&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jspf/1.0.1/apache-jspf-1.0.1-bin.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jspf/1.0.1/apache-jspf-1.0.1-bin.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jspf/1.0.1/apache-jspf-1.0.1-bin.zip.asc">PGP</a>]
    </p>
  
  </section>
  
  <section>
<h2><a name="Apache_jDKIM"></a>Apache jDKIM</h2>
  
    
<p>Apache James jDKIM 0.2 is the latest jDKIM stable version.</p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jdkim/apache-jdkim-project-0.2-source-release.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jdkim/apache-jdkim-project-0.2-source-release.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jdkim/apache-jdkim-project-0.2-source-release.zip.asc">PGP</a>]
    </p>

    
<p>You can directly use it with maven:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james.jdkim&lt;/groupId&gt;
    &lt;artifactId&gt;apache-jdkim&lt;/artifactId&gt;
    &lt;version&gt;0.2&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jdkim/apache-jdkim-0.2-bin.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jdkim/apache-jdkim-0.2-bin.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jdkim/apache-jdkim-0.2-bin.zip.asc">PGP</a>]
    </p>
  
  </section>
  
  <section>
<h2><a name="Apache_JSieve"></a>Apache JSieve</h2>
  
    
<p>Apache JSieve 0.7 is the latest stable version.</p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jsieve/0.7/apache-jsieve-sources-0.7.zip">(Zip)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-sources-0.7.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-sources-0.7.zip.asc">PGP</a>]
    </p>

    
<p>You can directly use it with maven:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-jsieve-core&lt;/artifactId&gt;
    &lt;version&gt;0.7&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jsieve/0.7/apache-jsieve-core-0.7.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-core-0.7.jar.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-core-0.7.jar.asc">PGP</a>]
    </p>

    
<p>An aggregator project is also available:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-jsieve-all&lt;/artifactId&gt;
    &lt;version&gt;0.7&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/jsieve/0.7/apache-jsieve-0.7-all.tar.gz">(Tar Gz)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-0.7-all.tar.gz.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/jsieve/0.7/apache-jsieve-0.7-all.tar.gz.asc">PGP</a>]
    </p>

  
  </section>

  <section>
<h2><a name="Apache_Mailet"></a>Apache Mailet</h2>
  
    
<p>Apache Mailet 3.6.0 is the latest stable version. </p>


    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-api-3.6.0-sources.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-api-3.6.0-sources.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-api-3.6.0-sources.jar.asc">PGP</a>]
    </p>

    
<p>You can use the mailet API using this maven dependency:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mailet-api&lt;/artifactId&gt;
    &lt;version&gt;3.6.0&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-api-3.6.0.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-api-3.6.0.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-api-3.6.0.jar.asc">PGP</a>]
    </p>
    
  </section>

  <section>
<h2><a name="Apache_Mailet_Base"></a>Apache Mailet Base</h2>

    
<p>Apache Mailet Base 3.6.0 is the latest stable version.</p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-base-3.6.0-sources.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-base-3.6.0-sources.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-base-3.6.0-sources.jar.asc">PGP</a>]
    </p>

    
<p>You can use the mailet Base using this maven dependency:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mailet-base&lt;/artifactId&gt;
    &lt;version&gt;3.6.0&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-base-3.6.0.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-base-3.6.0.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-base-3.6.0.jar.asc">PGP</a>]
    </p>

  </section>

  <section>
<h2><a name="Apache_Mailet_Standard"></a>Apache Mailet Standard</h2>

    
<p>Apache Mailet Standard 3.6.0 is the latest stable version. </p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-standard-3.6.0-sources.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-standard-3.6.0-sources.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-standard-3.6.0-sources.jar.asc">PGP</a>]
    </p>

    
<p>You can use mailet Standard content using this maven dependency:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mailet-standard&lt;/artifactId&gt;
    &lt;version&gt;3.6.0&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-standard-3.6.0.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-standard-3.6.0.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-standard-3.6.0.jar.asc">PGP</a>]
    </p>

  </section>

  <section>
<h2><a name="Apache_Crypto_Mailets"></a>Apache Crypto Mailets</h2>
  
    
<p>Apache Crypto Mailets 3.6.0 is the latest stable version.</p>

    
<p>Sources:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-crypto-3.6.0-sources.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-crypto-3.6.0-sources.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0//apache-mailet-crypto-3.6.0-sources.jar.asc">PGP</a>]
    </p>

    
<p>You can use Mailet Crypto content using this maven dependency:</p>

    
<div>
<pre>
      
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.james&lt;/groupId&gt;
    &lt;artifactId&gt;apache-mailet-crypto&lt;/artifactId&gt;
    &lt;version&gt;3.6.0&lt;/version&gt;
  &lt;/dependency&gt;
      
    </pre></div>

    
<p>Direct download link:
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mailets/3.6.0/apache-mailet-crypto-3.6.0.jar">(Jar)</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-crypto-3.6.0.jar.sha512">SHA-512</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mailets/3.6.0/apache-mailet-crypto-3.6.0.jar.asc">PGP</a>]
    </p>
    
  </section>

  <section>
<h2><a name="Apache_James_Protocols"></a>Apache James Protocols</h2>
  
    
<p>Apache James Protocols 3.6.0 is the latest stable version.</p>

    
<ul>
      You can get the James implementation of various protocols using maven:
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-api/3.6.0">API</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-netty/3.6.0">NETTY</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-smtp/3.6.0">SMTP</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-lmtp/3.6.0">LMTP</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-imap/3.6.0">IMAP</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-pop3/3.6.0">POP3</a></li>
      
<li><a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/protocols/protocols-managesieve/3.6.0">MANAGESIEVE</a></li>
    </ul>
  
  </section>

  <section>
<h2><a name="Apache_MPT"></a>Apache MPT</h2>
  
    
<p>Apache MPT 0.1 is the latest stable version:</p>
    
<ul>
    
    
<li>Source (Unix TAR):
      <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mpt/0.1/apache-james-mpt-0.1-src.tar.gz">apache-james-mpt-0.1-src.tar.gz</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mpt/0.1/apache-james-mpt-0.1-src.tar.gz.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mpt/0.1/apache-james-mpt-0.1-src.tar.gz.asc">PGP</a>]
    </li>
    
    
<li>Source (ZIP Format): <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/james/mpt/0.1/apache-james-mpt-0.1-src.zip">apache-james-mpt-0.1-src.zip</a>
      [<a class="externalLink" href="https://downloads.apache.org/james/mpt/0.1/apache-james-mpt-0.1-src.zip.sha1">SHA-1</a>]
      [<a class="externalLink" href="https://downloads.apache.org/james/mpt/0.1/apache-james-mpt-0.1-src.zip.asc">PGP</a>]
    </li>
    
    
<li>Jars (including source and javadocs) for the modules are distributed through the standard 
    <a class="externalLink" href="https://maven.apache.org">Maven</a> repositories on <a class="externalLink" href="https://repo1.maven.org/maven2/org/apache/james/">https://repo1.maven.org/maven2/org/apache/james/</a>.</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>
