<?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 - Advantages</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">
            <strong>Advantages</strong>
          </li>
                      <li class="none">
                          <a href="../server/objectives.html" title="Objectives">Objectives</a>
            </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">
        

 

    <table border="0" class="bodyTable">

      
<tr class="a">
<td width="50%">

        <section>
<h3><a name="Standard"></a>Standard</h3>

          
<p>100% pure Java Mail server designed to be a complete and portable enterprise
            mail engine solution.</p>

          
<p>Supports currently available IETF protocols, including SMTP, LMTP, POP3, IMAP4, ManageSIEVE. We also plan to support JMAP.</p>

          
<p>Apache James Server is able to store user and message data either in any JPA-compatible database,
            in Cassandra (allowing fast, reliable, even real-time replicated storage) and on a file-system (Maildir).</p>

          
<p>Provides a powerful, flexible mail application engine through support for the Apache Mailet
            API.  With its Mailet pipeline architecture, Apache James Server can be used not only to provide standard e-mail
            services, but also to implement custom e-mail applications.</p>

        </section>

      </td>
<td width="50%">

        <section>
<h3><a name="Configurable"></a>Configurable</h3>

          
<p>Configure the stores,...</p>
          
<p>via the well-known Spring framework - <a href="config.html">read more</a>.</p>

          
<p><img src="images/conf/config-example.png" alt="" /></p>

          
<p>or via the Guice module - <a href="config-guice.html">read more</a>.</p>
        </section>

      </td></tr>

      
<tr class="b">
<td width="50%">

        <section>
<h3><a name="Manageable"></a>Manageable</h3>

          
<p>Manage domains, users,... via a <a href="manage-cli.html">command line client</a>, a <a href="manage-webadmin.html">
            REST interface</a> or a well-known JMX tools - <a href="manage.html">read more</a>.See also <a href="metrics.html">
            metrics</a> in live with Grafana.</p>

          
<p><img src="images/jmx-management/jmx-user-part.png" alt="" /></p>

        </section>

      </td>
<td width="50%">

        <section>
<h3><a name="Extensible"></a>Extensible</h3>

          
<p>Apache James Server serves as a mail application platform.</p>

          
<p>The Apache James Project hosts the Apache Mailet API,
            and provides the Mailet container. These features makes it easy
            to design, write, and deploy custom applications for mail processing.</p>

          
<p>This modularity and ease of customization is one of Apache James'
            strengths, and can allow administrators to produce powerful
            applications surprisingly easily. - <a href="dev-extend.html">read more</a></p>

        </section>

      </td></tr>

      
<tr class="a">
<td width="50%">

        <section>
<h3><a name="Developer-Friendly"></a>Developer-Friendly</h3>

          
<p>Apache James Server 3.0 is now built on top of Spring 3.0 or Guice in replacement of
            the <a class="externalLink" href="http://avalon.apache.org/">Avalon</a> Application Framework.
            With Spring, We keep the good development practices introduced by Avalon such as
            Component Oriented Programming and  Inversion of Control. The stable and robust
            Spring container provides a strong foundation for the Apache James Server.</p>

          
<p><img src="images/uml/org.apache.james-package-small.png" width="400px" alt="" /></p>

        </section>

      </td>
<td width="50%">

        <section>
<h3><a name="Performant"></a>Performant</h3>

          
<p>A special focus has been brought to the performance: Apache James Server can process more than
            100 mails per second. Deployed in production environments and has proven itself
            to be a robust  and high performance mail solution. Tests indicate that
            version 3.0 is able to maintain a constant mail throughput rate of thousands of
            messages/minute for continuous periods  - <a href="feature-performance.html">read more</a></p>

          
<p><img src="images/jmx-monitoring/jmx-process-root.png" alt="" /></p>

        </section>

      </td></tr>

      
<tr class="b">
<td width="50%">

        <section>
<h3><a name="Secured"></a>Secured</h3>

          
<p>Apache James Server is a secured mail server by default - <a href="feature-security.html">read more</a>.</p>

        </section>

      </td>
<td width="50%">

      </td></tr>

    </table>




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