<?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; Configuration</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="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="James_Configuration"></a>James Configuration</h2>
            
<p>
                To use cryptography mailets, the required
                <a class="externalLink" href="http://www.bouncycastle.org">Bouncy Castle</a>
                libraries must be installed in
                james/lib
                . It is recommended that the correct versions for the JVM are
                used.
            </p>
            
<p>
                To use the mailets, the package
                org.apache.james.mailet.crypto.mailet
                must be available.
                To use the matchers,
                org.apache.james.mailet.crypto.matcher
                must be.
                For example:
            </p>
            
<div class="source">
<pre>
                
<div>
<pre>
                    &lt;mailetpackages&gt;
                    ...
                    &lt;mailetpackage&gt;org.apache.james.mailet.crypto.mailet&lt;/mailetpackage&gt;
                    &lt;/mailetpackages&gt;
                    &lt;matcherpackages&gt;
                    ...
                    &lt;matcherpackage&gt;org.apache.james.mailet.crypto.matcher&lt;/matcherpackage&gt;
                    &lt;/matcherpackages&gt;
                </pre></div>
            </pre></div>
            
<p>Example SMIME mailet configurations:</p>
            
<div class="source">
<pre>
                
<div>
<pre>
                    &lt;mailet match=&quot;IsSMIMEEncrypted&quot; class=&quot;SMIMEDecrypt&quot;&gt;
                    &lt;keyStoreType&gt;pkcs12&lt;/keyStoreType&gt;
                    &lt;keyStoreFileName&gt;c:/path.pfx&lt;/keyStoreFileName&gt;
                    &lt;keyStorePassword&gt;myKeyStorePass&lt;/keyStorePassword&gt;
                    &lt;keyAlias&gt;myKeyAlias&lt;/keyAlias&gt;
                    &lt;keyAliasPassword&gt;myKeyPass&lt;/keyAliasPassword&gt;
                    &lt;/mailet&gt;

                    &lt;mailet match=&quot;IsSMIMESigned&quot; class=&quot;SMIMECheckSignature&quot;&gt;
                    &lt;keyStoreType&gt;pkcs12&lt;/keyStoreType&gt;
                    &lt;keyStoreFileName&gt;c:/path.pfx&lt;/keyStoreFileName&gt;
                    &lt;keyStorePassword&gt; myKeyStorePass
                    &lt;/keyStorePassword&gt; &lt;strip&gt;false&lt;/strip&gt;
                    &lt;onlyTrusted&gt;true&lt;/onlyTrusted&gt;
                    &lt;/mailet&gt;
                </pre></div>
            </pre></div>
            <br />
            Matcher example: messages signed by trusted users never are spam
            Messages with valid signatures will never be considered spam. This
            can be a valid policy *if* SMIMECheckSignature was invoked with
            true
            set
            
<div class="source">
<pre>
                
<div>
<pre>
                    &lt;mailet
                    match=&quot;HasMailAttribute=org.apache.james.SMIMECheckSignature&quot;
                    class=&quot;ToProcessor&quot;&gt;
                    &lt;processor&gt;transport&lt;/processor&gt;
                    &lt;/mailet&gt;
                </pre></div>
            </pre></div>
            
<p>Signing example: Add a server-side signature to all mail.</p>
            
<div class="source">
<pre>
                
<div>
<pre>
                    &lt;mailet
                    match=&quot;HasMailAttribute=org.apache.james.SMIMECheckSignature&quot;
                    class=&quot;SetMimeHeader&quot;&gt;
                    &lt;name&gt;X-WasSigned&lt;/name&gt;
                    &lt;value&gt;true&lt;/value&gt;
                    &lt;/mailet&gt;

                    &lt;mailet match=&quot;All&quot; class=&quot;SMIMESign&quot; onMailetException=&quot;ignore&quot;&gt;
                    &lt;keyStoreType&gt;jks&lt;/keyStoreType&gt;
                    &lt;keyStoreFileName&gt;path.keystore&lt;/keyStoreFileName&gt;
                    &lt;keyStorePassword&gt;myKeyStorePass&lt;/keyStorePassword&gt;
                    &lt;keyAlias&gt;myKeyAlias&lt;/keyAlias&gt;
                    &lt;keyAliasPassword&gt;myKeyPass&lt;/keyAliasPassword&gt;
                    &lt;signerName&gt;XXX Trusted Server&lt;/signerName&gt;
                    &lt;rebuildFrom&gt;true&lt;/rebuildFrom&gt;
                    &lt;postmasterSigns&gt;true&lt;/postmasterSigns&gt;
                    &lt;debug&gt;true&lt;/debug&gt;
                    &lt;/mailet&gt;
                </pre></div>
            </pre></div>
        </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>
