<?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; 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="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>
      <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-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="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>
