<?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; Mailbox API</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="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">
                          <a href="../mailbox/index.html" title="Mailbox">Mailbox</a>
                    <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">
            <strong>Framework</strong>
                  <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">
                          <a href="../mailbox/index.html" title="Implementations">Implementations</a>
                    <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="Mailbox_API_Responsibility"></a>Mailbox API Responsibility</h2>
    
<p>This module contains the interfaces and exceptions to be used by the 
       mailbox clients. It represents the &quot;external view&quot; of the mailbox
       library client.</p>
    
<p>The services the mailbox library provides can be summarized as &quot;store/retrieve/search/delete mails&quot; 
       and update the mails metadata (via uid and flags)</p>
    
<p>The main entrance interfaces are represented by 3 managers, each responsible
       for a specific area: the mailbox manager, the message manager and the
       subscription manager.</p>
    
<p>For example, Apache James Server injects the managers in the POP3, SMTP, IMAP4 servers
       and in the Mailet container.</p>
     
<p>Each implementation <a href="mailbox-memory.html">Memory</a>,
        <a href="mailbox-jpa.html">JPA</a>) is responsible
        to implement the management interfaces. All &quot;common/util&quot; implementations
        reside in the <a href="mailbox-store.html">Mailbox Store</a> module.</p>
  </section>

  <section>
<h2><a name="Manager_Interfaces"></a>Manager Interfaces</h2>
  
    <section>
<h3><a name="Mailbox_Manager"></a>Mailbox Manager</h3>
      
<p>The Mailbox Manager is responsible for session creation, operations on mailbox (create, delete, search)
         and to return a Message Manager. It also allows to copy and list messages.
      </p>

        
<ul>
            Mailbox manager capabilities represents which operations a mailbox manager is able to support. For now the list is :
            
<li>Basic: supports all basic operations</li>
            
<li>Move: implements the move capability</li>
        </ul>


    </section>
    
    <section>
<h3><a name="Message_Manager"></a>Message Manager</h3>
      
<p>The Message Manager is responsible to create, delete message and its associated metadata (the uid and the flags).</p>

    </section>

    <section>
<h3><a name="Subscription_Manager"></a>Subscription Manager</h3>
      
<p>The Subscription Manager is responsible for the (un)subscription between a user and a mailbox.</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>
