<?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="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="expanded">
                          <a href="../../mailet/index.html" title="Mailets">Mailets</a>
                    <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">
            <strong>Crypto Mailets</strong>
          </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="Cryptography_Mailets"></a>Cryptography Mailets</h2>
            
<p>Mailets which encode, decode, sign and verify mail plus cryptology utilities.</p>
        </section>
        <section>
<h2><a name="S.2FMIME_Mailets"></a>S/MIME Mailets</h2>
            
<p>
                <acronym title="Secure / Multipurpose Internet Mail Extensions">S/MIME</acronym>
                provides
                cryptographic services for
                <acronym title="Multipurpose Internet Mail Extensions">
                    <a class="externalLink" href="http://james.apache.org/server/rfclist/basic/rfc2045.txt">MIME</a>
                </acronym>
                messages.
                These services include public key digital signature and encryption.
                Authentication is certificate based and so uses a hierarchical trust model.
            </p>
            
<p>
                SMIME is standardised by the
                <acronym title="Internet Engineering Task Force">
                    <a class="externalLink" href="http://www.ietf.org/mailman/listinfo/smime">IEFT</a>
                </acronym>
                .
            </p>
            
<p>
                James provides:
            </p>
            
<ul>
                
<li>
                    <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMEDecrypt.html">SMIMECheckSignature</a>
                    Verifies the S/MIME signature of a message. The s/mime signing ensure that the
                    private key owner is the real sender of the message.
                </li>
                
<li>
                    <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMEDecrypt.html">SMIMEDecrypt</a>
                    Decrypts a S/MIME encrypted message.
                </li>
                
<li>
                    <a href="apidocs/org/apache/james/transport/mailets/smime/SMIMESign.html">SMIMESign</a>
                    Puts a server-side SMIME signature on a message.
                </li>
            </ul>
        </section>
        <section>
<h2><a name="Cryptography_Notice"></a>Cryptography Notice</h2>
            
<p>
                This software uses cryptographic API. 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
                <a class="externalLink" href="http://www.wassenaar.org/">http://www.wassenaar.org</a>
                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>
            
<ul>
                
<li>This library provides high level cryptographic operations
                    based on lower level cryptographic libraries created
                    by <a class="externalLink" href="http://www.bouncycastle.org/">The Legion of the Bouncy Castle</a>.
                </li>
            </ul>
            
<p>Export classifications and source links can be found
                <a class="externalLink" href="http://www.apache.org/licenses/exports/">here</a>.
            </p>
        </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>
