<?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; Apache James Server 3 - Develop on James</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 Web Team" />
    <meta name="Date-Revision-yyyymmdd" content="20211112" />
    <meta http-equiv="Content-Language" content="en" />
        <script type="text/javascript" src="./js/dev.js"></script>
          <!-- 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="expanded">
                          <a href="../server/index.html" title="Server">Server</a>
                    <ul>
                      <li class="none">
                          <a href="../server/advantages.html" title="Advantages">Advantages</a>
            </li>
                      <li class="none">
                          <a href="../server/objectives.html" title="Objectives">Objectives</a>
            </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <li class="expanded">
                          <a href="../server/quick-start.html" title="User Manual">User Manual</a>
                    <ul>
                                                                                                                                                                                    <li class="collapsed">
                          <a href="../server/features.html" title="1. Features">1. Features</a>
                  </li>
                      <li class="none">
                          <a href="../server/packaging.html" title="2. Packaging">2. Packaging</a>
            </li>
                                                                                                                              <li class="collapsed">
                          <a href="../server/install.html" title="3. Install James">3. Install James</a>
                  </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <li class="collapsed">
                          <a href="../server/config.html" title="4. Configure James">4. Configure James</a>
                  </li>
                                                                                                                              <li class="collapsed">
                          <a href="../server/manage.html" title="5. Manage">5. Manage</a>
                  </li>
                                                                                                            <li class="collapsed">
                          <a href="../server/monitor.html" title="6. Monitor">6. Monitor</a>
                  </li>
                                                                        <li class="collapsed">
                          <a href="../server/upgrade.html" title="7. Upgrade">7. Upgrade</a>
                  </li>
                                                                                                                                                                                                                                        <li class="expanded">
            <strong>8. Developers Corner</strong>
                  <ul>
                      <li class="none">
                          <a href="../server/dev-build.html" title="Build from source">Build from source</a>
            </li>
                      <li class="none">
                          <a href="../server/dev-database-schema.html" title="Database Schema">Database Schema</a>
            </li>
                                                                                                            <li class="collapsed">
                          <a href="../server/dev-extend.html" title="Develop Extensions">Develop Extensions</a>
                  </li>
                                                                                          <li class="collapsed">
                          <a href="../server/dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                  </li>
              </ul>
        </li>
              </ul>
        </li>
                      <li class="none">
                          <a href="../mail.html#James_Mailing_lists" title="Mailing Lists">Mailing Lists</a>
            </li>
                      <li class="none">
                          <a href="../server/release-notes.html" title="Release Notes">Release Notes</a>
            </li>
                      <li class="none">
                          <a href="../server/apidocs/index.html" title="Javadoc">Javadoc</a>
            </li>
                      <li class="none">
                          <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
                      <li class="none">
                          <a href="https://github.com/apache/james-project" title="Sources">Sources</a>
            </li>
                      <li class="none">
                          <a href="../server/rfcs.html" title="RFCs">RFCs</a>
            </li>
                      <li class="none">
                          <a href="../download.cgi#Apache_James_Server" title="Download releases">Download releases</a>
            </li>
              </ul>
        </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="High_Level_Architecture"></a>High Level Architecture</h2>
  
    <a href="images/uml/org.apache.james-package_large.png" id="high-level-arch-img-id"><img src="images/uml/org.apache.james-package_small.png" alt="" /></a>
    
<p><a href="images/uml/org.apache.james-package_large.png" id="high-level-arch-txt-id">Click to enlarge image</a></p>
    
    
<p>James is a multi-protocol message processing and storage engine. James
      currently consists of:
      </p>
<ul>
        
<li>Four mail protocol services: SMTP, POP3, IMAP4 and LMTP.</li>
        
<li>Support for SMTP Auth.</li>
        
<li>A remote administration server.</li>
        
<li>Support for TLS/SSL.</li>
        
<li>A mail processing engine that supports the Mailet API.</li>
        
<li>File-system message storage and a message storage interface to RDBMS's.</li>
        
<li>File-system user record storage and an experimental interface to LDAP directories.</li>
      </ul>
    
    
    
<p>The mail protocol services use the mailbox librairies to fetch/store mails.</p>
    
    
<p>When a mail arrives via SMTP, it gets processed by the SMTP services and is placed
       in a <a href="dev-activemq.xml">Apache ActiveMQ</a> queue (ActiveMQ  is the Java Messaging Service JMS implementation at Apache)</p>
       
    
<p>This allow to decouple mail spooling from the rest of the incoming traffic.</p>
    
    
<p>After being the put in the queue, the mailetcontainer is responsible to get the 
       next mail to process from the <a href="dev-activemq.xml">ActiveMQ queue</a>.</p>
       
    
<p>The mailets defined in mailetcontainer.xml are applied to define if the mail is to be 
       treated as a Local or Remote delivery.</p>
       
    
<p>The Local and Remote deliveries are treated by their corresponding mailet.</p>
    
    
<p>The LocalDelivery mailet uses the SieveMailet which uses the mailbox/message manager to store the mail.</p>

   
<p>The result of the mail can be either:</p>
   
<ul>
     
<li>Gets stored in the mailbox.</li>
     
<li>Gets relayed to another server.</li>
     
<li>Gets relayed to another server.</li>
     
<li>Gets bounced back if it can not be handle by the james instance (this may happen during a previous step)</li>
     
<li>Gets stored in the &quot;mailstore&quot; which is a special format for spam, virus,... (in future release, we may also store those mails in the mailbox).</li>
   </ul>
  </section>

  <section>
<h2><a name="Technical_Architecture"></a>Technical Architecture</h2>
  
    <a href="images/uml/org.apache.james-package-detail_large.png" id="arch-img-id"><img src="images/uml/org.apache.james-package-detail_small.png" alt="" /></a>
    
<p><a href="images/uml/org.apache.james-package-detail_large.png" id="arch-txt-id">Click to enlarge image</a></p>
    
    
<p>James uses many other components: Spring, ActiveMQ, OpenJPA, Netty, Jackrabbit, Derby...</p>
    
    
<p>The modules can be classified into 3 categories:</p>
    
<ul>
      
<li>API: They do not include implementation details, they do not have dependencies (or at most they have very common dependencies like mailet-api, javamail, commons-logging).</li>
      
<li>Library: They only depend on API modules or external jars. They don't depend on other internal libraries. These libraries should be shared by functions (no need to have a Library when it is used only by a function).</li>
      
<li>Functions: Everything else. It is harder to see a case of &quot;direct&quot; reuse of a function jar. Most times we'll only have code reuse. It is preferable to limit Function to Functions dependencies.</li>
    </ul>
    
  </section>
    
  <section>
<h2><a name="Server_Coding_Guidelines"></a>Server Coding Guidelines</h2>
    
    
<p>LogEnabled interface as the preferred way, except for non-server code and classes that have no bean definition.
       LogEnabled should be used wherever logging is needed and no &quot;session-scoped&quot; Log is provided.</p>
  
  </section>
    
  <section>
<h2><a name="Design_Objectives"></a>Design Objectives</h2>
      
      <section>
<h3><a name="Features"></a>Features</h3>
      
        
<p>These are some of the currently implemented features:</p>

        
<p><i><b>Complete portability</b></i> Apache James is be a 100% pure Java application
           based on the Java 2 platform and the JavaMail 1.4 API.</p>

        
<p><i><b>Protocol abstraction</b></i> Unlike other mail engines, protocols are seen only
           like &quot;communication languages&quot; ruling comunications between clients and
           the server. Apache James is not be tied to any particular protocol but
           follow an abstracted server design (like JavaMail did on the
           client side)</p>

        
<p><i><b>Complete solution</b></i> The mail system is able to handle both mail
           transport and storage in a single server application. Apache James
           works alone without the need for any other server or solution.</p>

        
<p><i><b>Mailet support</b></i> Apache James supports the Apache Mailet API. A Mailet
               is a discrete piece of mail-processing logic which is incorporated into
               a Mailet-compliant mail-server's processing. This easy-to-write,
               easy-to-use pattern allows developers to build powerful customized mail
               systems. Examples of the services a Mailet might provide include: a
               mail-to-fax or mail-to-phone transformer, a filter, a language translator, a mailing
               list manager, etc. Several Mailets are included in the James
               distribution (see <a href="dev-provided-mailets.html">documentation</a>).</p>

        
<p><i><b>Resource abstraction</b></i> Like protocols, resources are abstracted and,
           accessed through defined interfaces (JavaMail for transport, JDBC for
           spool storage or user accounts in RDBMS's, Apache Mailet API). The server is
           highly modular and reuse solutions from other projects.</p>

        
<p><i><b>Secure and multi-threaded design</b></i> Based on well known
           frameworks such as Spring, ActiveMQ, OpenJPA, Netty,..., Apache James has a careful,
           security-oriented, full multi-threaded design, to allow performance,
           scalability and mission-critical use.</p>

        
<p>Anything else you may want if you help us write it :-)</p>

      </section>

      <section>
<h3><a name="Standards_Compliance"></a>Standards Compliance</h3>

        
<p>It is the existence of published &quot;open&quot; standards which 
           allows independant teams to develop interoperable software.</p>
      
        
<p>James attempts to support a number of these standards most of which are 
          IETF RFC's and in the areas covered by these standards the published standard 
          is our requirements document.</p>
        
        
<p>This sometimes leads to confusion where behaviour is not 
          the subject of a relevant standard, or conflict where common 
          (de-facto) behaviour is actually at odds with a supported standard.</p>
        
        
<p>We believe that it is our responsibility to adhere to the published standard. 
          If we allow our implementation to deviate it means that we are tacitly encouraging 
          the situation whereby interoperability is no longer guarenteed by standards 
          compliance alone, but also requires access to undocumented and possibly 
          even commercially licenced technology. There is no easy route for a 
          newcomer to aquire these secrets, and interoperabilty 
          becomes something only available to the elite.</p>
        
        
<p>The James policy for issues of non-compliance tries to tread the fine line
          between a pragmatic acceptance of other people's misinterpretation of the
          RFC's and an evangelical defence of open standards as the key to freedom of interoperation.</p>
        
        
<p>In practice this policy is that certain well argued of cases of
          non-compliance which can be *safely* worked around, will be tolerated by
          James.</p>
      
        
<p>In cases (like jira issue JAMES-344) where variance from a published standard is
           required it is desirable that this functionality is disabled in James by default,
           it must be prominently and clearly documented that this causes James 
           to violate the relevant standard, and should be enabled by explicit 
           configuration, making its use a conscious decision of the user rather 
           than an decision taken by the James team.</p>
        
        
<p>In cases where the required behaviour is not within the scope of any standard which
           James claims to support (such as behaviour which is a de-facto standard or
           an <i>internet draft</i> RFC but not yet subject of a <i>standards track</i> RFC) it is
           acceptable to implement the behaviour so long as it is adequately
           documented (for instance by refrence to an <i>internet draft</i> or 
           other public document) and users can be clear about what to expect from James.</p>

      </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>
