<?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 2024-06-17 -->
<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 Mailbox Introduction</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="Apache James Mailbox" />
    <meta name="Date-Revision-yyyymmdd" content="20240617" />
    <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: 2024-06-17</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="expanded">
            <strong>Mailbox</strong>
                  <ul>
                      <li class="none">
                          <a href="../mailbox/source-code.html" title="Source Code">Source Code</a>
            </li>
                      <li class="none">
                          <a href="../mailbox/apidocs/index.html" title="Javadoc">Javadoc</a>
            </li>
                      <li class="none">
                          <a href="https://issues.apache.org/jira/browse/MAILBOX" title="Issue Tracker">Issue Tracker</a>
            </li>
                                                                                    <li class="expanded">
                          <a href="../mailbox/mailbox-api.html" title="Framework">Framework</a>
                    <ul>
                      <li class="none">
                          <a href="../mailbox/mailbox-store.html" title="Mailbox Store">Mailbox Store</a>
            </li>
                      <li class="none">
                          <a href="../mailbox/mailbox-tool.html" title="Mailbox Tool">Mailbox Tool</a>
            </li>
              </ul>
        </li>
                                                                                                          <li class="expanded">
            <strong>Implementations</strong>
                  <ul>
                      <li class="none">
                          <a href="../mailbox/mailbox-memory.html" title="Mailbox Memory">Mailbox Memory</a>
            </li>
                      <li class="none">
                          <a href="../mailbox/mailbox-cassandra.html" title="Mailbox Cassandra">Mailbox Cassandra</a>
            </li>
                      <li class="none">
                          <a href="../mailbox/mailbox-jpa.html" title="Mailbox JPA">Mailbox JPA</a>
            </li>
              </ul>
        </li>
                      <li class="none">
                          <a href="../mailbox/mailbox-spring.html" title="Wiring">Wiring</a>
            </li>
                      <li class="none">
                          <a href="../download.cgi" title="Download releases">Download releases</a>
            </li>
              </ul>
        </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="What_Is_Apache_James_Mailbox.3F"></a>What Is Apache James Mailbox?</h2>
    
<p>The Apache James Mailbox is a library providing a flexible Mailbox storage accessible by mail 
       protocols (IMAP4, POP3, SMTP,...) and other protocols.
    </p>
    
<p>It can also be embedded into your application to implement for example 
       the <a class="externalLink" href="http://www.mindspring.com/~mgrand/pattern_synopses3.htm#Mailbox">Mailbox Pattern</a>.
    </p>
    
<p>The prime usage of this library is clearly to serve as mailbox persistence 
       for IMAP protocol. The API and implementations rely on  
       <a class="externalLink" href="http://james.apache.org/server/rfclist/imap4/rfc2060.txt">RFC 2060 IMAP4rev1</a>
       definitions and requirements but can perfectly be used in any other (non mail server) context. 
    </p>
    
<p>The mailbox library supports different persistence mechanisms: SQL Database via Apache OpenJPA or in-memory implementation.
    </p>
    
<p>You can <a class="externalLink" href="http://james.apache.org/download.cgi">download</a> current 0.4 release. 
       The <a href="apidocs/">API</a> as the schemas for the different implementations are susceptible to evolve.
    </p>
      
<ul>Here are the different implementations of the mailbox we propose :
          
<li><a href="mailbox-memory.html">Memory</a> for testing purposes</li>
          
<li><a href="mailbox-cassandra.html">Cassandra</a></li>
          
<li><a href="mailbox-jpa.html">JPA</a> </li>
      </ul>
  </section>

  <section>
<h2><a name="Apache_James_Mailbox_in_Server"></a>Apache James Mailbox in Server</h2>
    
<p><a class="externalLink" href="http://james.apache.org/server/3">Apache James Server 3</a> uses this library to implement its user mailboxes.</p>
    
<p>Apache James Mailbox is tested and fully compatible with other Apache James libraries
       such as the <a class="externalLink" href="http://james.apache.org/imap">Apache James IMAP</a> 
       (see <a class="externalLink" href="http://james.apache.org/mpt/index.html">this link</a> 
       for the Mailbox/IMAP integration tests source code) </p>
  </section>

  <section>
<h2><a name="Develop_on_Apache_James_Mailbox"></a>Develop on Apache James Mailbox</h2>
    
<p>Go to the <a href="source-code.html">source code</a> page to get more information on how to 
       develop on Apache James Mailbox.</p>
    <img src="images/uml/org-apache-james-mailbox-package.png" alt="" />
  </section>
  
  <section>
<h2><a name="Apache_James_Mailbox_logging"></a>Apache James Mailbox logging</h2>
    
<p>Apache James Mailbox uses <a class="externalLink" href="http://slf4j.org/">SLF4J</a> as logging facade. For specific bindings one needs to add
    a particular <a class="externalLink" href="http://slf4j.org/faq.html#where_is_binding">SLF4J binding</a>.</p>
  </section>
  



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