<?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 Apr 17, 2012 -->
<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 Server 3 - Index</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="20120417" />
    <meta http-equiv="Content-Language" content="en" />
                                                    
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
                      <script type="text/javascript" src="./js/index.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-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="Apache James Server 3.0" />
                </a>
                              <a href="http://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2012-04-17</span>
                      </div>
            <div class="xright">                    <a href="../../index.html" title="Home">Home</a>
            |
                        <a href="../index.html" title="Server">Server</a>
            |
                        <a href="../../hupa/index.html" title="Hupa">Hupa</a>
            |
                        <a href="../../protocols/index.html" title="Protocols">Protocols</a>
            |
                        <a href="../../imap/index.html" title="IMAP">IMAP</a>
            |
                        <a href="../../mailet/index.html" title="Mailets">Mailets</a>
            |
                        <a href="../../mailbox/index.html" title="Mailbox">Mailbox</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>
            |
                        <a href="../../mpt/index.html" title="MPT">MPT</a>
            |
                        <a href="../../postage/index.html" title="Postage">Postage</a>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>Overview</h5>
                  <ul>
                  <li class="none">
            <strong>Introduction</strong>
          </li>
                  <li class="none">
                          <a href="release-notes.html" title="Release Notes">Release Notes</a>
            </li>
          </ul>
                       <h5>Features</h5>
                  <ul>
                  <li class="none">
                          <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
            </li>
                  <li class="none">
                          <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a>
            </li>
                  <li class="none">
                          <a href="feature-persistence.html" title="Persistence">Persistence</a>
            </li>
                  <li class="none">
                          <a href="feature-protocols.html" title="Protocols">Protocols</a>
            </li>
                  <li class="none">
                          <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
            </li>
                  <li class="none">
                          <a href="feature-performance.html" title="Performance">Performance</a>
            </li>
                  <li class="none">
                          <a href="feature-security.html" title="Security">Security</a>
            </li>
          </ul>
                       <h5>User Manual</h5>
                  <ul>
                  <li class="none">
                          <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a>
            </li>
                  <li class="none">
                          <a href="install.html" title="2. Install James">2. Install James</a>
            </li>
                                                                                                                                                                                                                                                                                                                                <li class="collapsed">
                          <a href="config.html" title="3. Configure James">3. Configure James</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="manage.html" title="4. Manage">4. Manage</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="monitor.html" title="5. Monitor">5. Monitor</a>
                  </li>
                                                                                      <li class="collapsed">
                          <a href="upgrade.html" title="6. Upgrade">6. Upgrade</a>
                  </li>
          </ul>
                       <h5>Developers Corner</h5>
                  <ul>
                  <li class="none">
                          <a href="dev.html" title="Architecture">Architecture</a>
            </li>
                  <li class="none">
                          <a href="dev-build.html" title="Build from source">Build from source</a>
            </li>
                  <li class="none">
                          <a href="dev-database-schema.html" title="Database Schema">Database Schema</a>
            </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                  </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/apache-james/" title="Nightly builds">Nightly builds</a>
            </li>
          </ul>
                       <h5>References</h5>
                  <ul>
                  <li class="none">
                          <a href="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>
          </ul>
                       <h5>About James</h5>
                  <ul>
                  <li class="none">
                          <a href="../../index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../../newsarchive.html" title="News">News</a>
            </li>
                  <li class="none">
                          <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../../contribute.html" title="Contributing">Contributing</a>
            </li>
                  <li class="none">
                          <a href="../../guidelines.html" title="Guidelines">Guidelines</a>
            </li>
                  <li class="none">
                          <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
            </li>
                  <li class="none">
                          <a href="../../team-list.html" title="Who We Are">Who We Are</a>
            </li>
                  <li class="none">
                          <a href="../../license.html" title="License">License</a>
            </li>
          </ul>
                       <h5>Download</h5>
                  <ul>
                  <li class="none">
                          <a href="../../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></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">
        <!-- 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. -->

  

  <table border="0" class="bodyTable"><tr class="a"><td>

    <div id="tabs" style="min-width:550px;">
    
      <ul>
        <li><a href="#tabs-1">Apache James Server 3</a></li>
        <li><a href="#tabs-2">Advantages</a></li>
      </ul>

     <div id="tabs-1">
     
        <div class="ui-widget">
			<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;"> 
				<p>
                  <span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
				  <span style="font-weight:bold; color:white;">Hey! Apache James Server 3.0-beta4 is out - <a href="quick-start.html" style="color:white;">Click here to Quick Start Apache James Server!.</a>
                  Some issues are identified in some use cases with clients such as Outlook Express,...
                  You are kindly invited to report any issue on <a class="externalLink" href="https://issues.apache.org/jira/browse/JAMES" style="color:white;">https://issues.apache.org/jira/browse/JAMES</a>
                  or on our mailing list (<a class="externalLink" href="http://james.apache.org/mail.html" style="color:white;">http://james.apache.org/mail.html</a>)</span>
                </p>
			</div>
		</div>
      
	    <p>The Apache Java Mail Server Version 3.0
	      is a 100% pure Java SMTP, IMAP4 and POP3 Mail 
	      server designed to be a complete and portable enterprise mail engine solution.  
	      Apache James Server is based on currently available open protocols.</p>
	    
	    <p>This documentation is intended to be an introduction to the concepts behind the Apache James Server usage, as well 
	      as a guide to <a href="install.html">install</a>, <a href="config.html">configure</a> , 
	      <a href="manage.html">manage</a>, <a href="monitor.html">monitor</a> 
	      and <a href="dev.html">develop</a> Apache James Server.</p>
	      
        <p>Download Apache James Mail Server 3.0-beta4 and <a href="quick-start.html">quick-start</a> it!</p>
        <p>
          <span class="minibutton btn-download">
            <a class="externalLink" href="http://james.apache.org/download.cgi#Apache_James_Server">
              <span><span class="icon"></span>Early Apache James Server 3.0-beta4</span>
            </a>
          </span>
        </p>
        <p>We also have snapshot builds for the braves (no guarantee!).</p>
        <p>
          <span class="minibutton btn-download">
            <a class="externalLink" href="http://people.apache.org/builds/james/nightly/">
              <span><span class="icon"></span>Snapshot Apache James Server 3.0</span>
            </a>
          </span>
        </p>
	
        <p>Apache James Server 3.0 represents the leading edge of development. This codestream has many more
          features than the 2.3 code, but is not as well tested in production. Reasonable
          configuration compatibility has been retained with 2.3.2.</p>
          
        <p>Apache James Server 3.0 requires Java 1.5 but Java 1.6 is recommended. A migration guide for 
           users willing to upgrade from 2.3 to 3.0 is <a href="upgrade-2.3.html">available</a>.</p>
           
         <p>The NNTP News server and the Mailing List Manager present in Apache James Server 2.3 have been 
            temporary removed from the 3.0 release line.</p>
    
     </div>
     
     <div id="tabs-2">
     
        <table border="0" class="bodyTable">
        
         <tr class="b"><td width="50%">

          <div class="section"><h3>Standard<a name="Standard"></a></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 and IMAP4.</p>
	         
	        <p>Apache James Server is able to store user and message data either in a file-system (Maildir), 
	           any JPA-compatible database and even JCR, allowing fast, reliable, 
	           even real-time replicated storage.</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>
	           
	      </div>
		      
         </td><td width="50%">

          <div class="section"><h3>Configureable<a name="Configureable"></a></h3>
          
            <p>Configure the stores,... via the well-known Spring framework - <a href="config.html">read more</a>.</p>
        
            <p><img src="images/conf/config-example.png" alt="" /></p>
        
          </div>
          
         </td></tr>
        
         <tr class="a"><td width="50%">

          <div class="section"><h3>Manageable<a name="Manageable"></a></h3>
        
            <p>Manage domains, users,... via well-known JMX tools - <a href="manage.html">read more</a>.</p>
            
            <p><img src="images/jmx-management/jmx-user-part.png" alt="" /></p>

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

  	      <div class="section"><h3>Extensible<a name="Extensible"></a></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>
	 
	      </div>

         </td></tr>
        
        <tr class="b"><td width="50%">
        
 	      <div class="section"><h3>Developer-Friendly<a name="Developer-Friendly"></a></h3>
	    
	        <p>Apache James Server 3.0 is now built on top of Spring 3.0 in replacement of trunk version 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>The internal and exposed APIs for this 3.0-beta4 release are under current validation and are 
	          expected to be subject to change - <a href="dev.html">read more</a>.</p>
	         
            <p><img src="images/uml/org.apache.james-package-small.png" width="400px" alt="" /></p>
        
  	      </div>
  	      
  	    </td><td width="50%">
	
          <div class="section"><h3>Performant<a name="Performant"></a></h3>
           
            <p>A special focuss 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>	
        
          </div>
         
  	    </td></tr>
  	      
        <tr class="a"><td width="50%">
        
          <div class="section"><h3>Secured<a name="Secured"></a></h3>
        
            <p>Apache James Server is a secured mail server by default - <a href="feature-security.html">read more</a>.</p>
        
          </div>

  	    </td><td width="50%">
	
  	    </td></tr>
  	      
   	    </table>
   	    
   	 </div>
   	 
   </div>

  </td></tr></table>




      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2002-2012
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
