<?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 - Objectives</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="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="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">
            <strong>Objectives</strong>
          </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <li class="collapsed">
                          <a href="../server/quick-start.html" title="User Manual">User Manual</a>
                  </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="Design_goals"></a>Design goals</h2>
    
<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.3 API.
    </p>
    
<p>
      <i>
        <b>Protocol abstraction</b>
      </i>  Unlike other mail engines, protocols are seen only
      like &quot;communication languages&quot; ruling communications 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="/index.html">server documentation</a>).</p>
    
<p>
      <i>
        <b>Resource abstraction</b>
      </i>  Like protocols, resources are abstracted and,
      accessed through defined interfaces (like JPA for
      mailbox or user accounts in RDBMS's). The server is
      highly modular and reuse solutions from other projects.</p>

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

  </section>

  <section>
<h2><a name="Standard_compliance"></a>Standard compliance</h2>
    
<p>It is the existence of published &quot;open&quot; standards which
      allows independent teams to develop interoperable software.
      <br />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.
      <br />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.
      <br />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 guaranteed 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 acquire these secrets, and interoperability
      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 inter-operation.
    </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 reference to an <i>internet draft</i> or
      other public document) and users can be clear about what to expect from James.
    </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>
