<?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 12, 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>James Server - 
  James - RFC Directory</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="20120412" />
    <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-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="James Server" />
                </a>
                              <a href="http://www.apache.org/" 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-12</span>
                  &nbsp;| <span id="projectVersion">Version: 1.6</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>James Server</h5>
                  <ul>
                  <li class="none">
                          <a href="index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="design_objectives.html" title="Objectives">Objectives</a>
            </li>
                  <li class="none">
                          <a href="FAQ.html" title="Server FAQ">Server FAQ</a>
            </li>
                  <li class="none">
            <strong>Useful RFCs</strong>
          </li>
                  <li class="none">
                          <a href="http://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
                  <li class="none">
                          <a href="http://svn.apache.org/viewvc/james/server/" title="Source">Source</a>
            </li>
          </ul>
                       <h5>Documentation</h5>
                  <ul>
                  <li class="none">
                          <a href="3/index.html" title="Server v3">Server v3</a>
            </li>
                  <li class="none">
                          <a href="2/index.html" title="Server v2">Server v2</a>
            </li>
                  <li class="none">
                          <a href="archive/document_archive.html" title="Archive">Archive</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="../weare.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="http://people.apache.org/builds/james/nightly/" 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. -->

 
<div class="section"><h2>RFC Directory<a name="RFC_Directory"></a></h2>
<p>This document contains a list of and links to RFCs relevant to James.</p>
<div class="section"><h3>General RFCs<a name="General_RFCs"></a></h3>
<a href="rfclist/basic/rfc0822.txt">RFC 822: Mail Message Format</a><br />
<a href="rfclist/basic/rfc1123.txt">RFC 1123: Requirements for Internet Hosts -- Application and Support (updated by RFC 2821)</a><br />
<a href="rfclist/basic/rfc2045.txt">RFC 2045: Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</a><br />
<a href="rfclist/basic/rfc2822.txt">RFC 2822: Internet Message Format</a><br />
</div>
<div class="section"><h3>SMTP RFCs<a name="SMTP_RFCs"></a></h3>
<a href="rfclist/smtp/rfc0821.txt">RFC 821: SMTP Protocol</a><br />
<a href="rfclist/smtp/rfc0974.txt">RFC 974: Mail Routing and the Domain System</a><br />
<a href="rfclist/smtp/rfc1652.txt">RFC 1652: SMTP Service Extension for 8bit-MIMEtransport (elective, but widely adopted)</a><br />
<a href="rfclist/smtp/rfc1830.txt">RFC 1830: SMTP Service Extensions for Transmission of Large and Binary MIME Messages (experimental, but cool idea)</a><br />
<a href="rfclist/smtp/rfc1869.txt">RFC 1869: SMTP Service Extensions</a><br />
<a href="rfclist/smtp/rfc1870.txt">RFC 1870: SMTP Service Extension for Message Size Declaration</a><br />
<a href="rfclist/smtp/rfc1891.txt">RFC 1891: SMTP Service Extension for Delivery Status Notifications (elective)</a><br />
<a href="rfclist/smtp/rfc1893.txt">RFC 1893: Enhanced Mail System Status Codes (experimental)</a><br />
<a href="rfclist/smtp/rfc1985.txt">RFC 1985: SMTP Service Extension for Remote Message Queue Starting (elective)</a><br />
<a href="rfclist/smtp/rfc2034.txt">RFC 2034: SMTP Service Extension for Returning Enhanced Error Codes (elective)</a><br />
<a href="rfclist/smtp/rfc2142.txt">RFC 2142: Mailbox Names For Common Services, Roles And Functions</a><br />
<a href="rfclist/smtp/rfc2197.txt">RFC 2197: SMTP Service Extension for Command Pipelining (elective)</a><br />
<a href="rfclist/smtp/rfc2554.txt">RFC 2554: SMTP Service Extension for Authentication</a><br />
<a href="rfclist/smtp/rfc2821.txt">RFC 2821: Simple Mail Transfer Protocol (obsoletes RFC 821)</a><br />
</div>
<div class="section"><h3>LMTP RFCs<a name="LMTP_RFCs"></a></h3>
<a href="rfclist/lmtp/rfc2033.txt">RFC 2033 : LMTP Local Mail Transfer Protocol</a><br />
</div>
<div class="section"><h3>POP3 RFCs<a name="POP3_RFCs"></a></h3>
<a href="rfclist/pop3/rfc1725.txt">RFC 1725: POP3 Protocol</a><br />
<a href="rfclist/pop3/rfc1734.txt">RFC 1734: POP3 AUTHentication command</a><br />
<a href="rfclist/pop3/rfc1939.txt">RFC 1939: POP3 Protocol (obsoletes RFC 1725)</a><br />
<!-- Add RFC 1082, 2449, 2595, 3206 -->
</div>
<div class="section"><h3>IMAP RFCs<a name="IMAP_RFCs"></a></h3>
<a href="rfclist/imap4/rfc1731.txt">RFC 1731: IMAP4 Authentication Mechanisms</a><br />
<a href="rfclist/imap4/rfc2060.txt">RFC 2060: IMAP Version 4rev1</a><br />
<a href="rfclist/imap4/rfc2086.txt">RFC 2086: IMAP4 ACL extension</a><br />
<a href="rfclist/imap4/rfc2087.txt">RFC 2087: IMAP4 QUOTA extension</a><br />
<a href="rfclist/imap4/rfc2088.txt">RFC 2088: IMAP4 non-synchronizing literals</a><br />
<a href="rfclist/imap4/rfc2177.txt">RFC 2177: IMAP4 IDLE command</a><br />
<a href="rfclist/imap4/rfc2180.txt">RFC 2180: IMAP4 Multi-accessed Mailbox Practice</a><br />
<a href="rfclist/imap4/rfc2192.txt">RFC 2192: IMAP URL Scheme</a><br />
<a href="rfclist/imap4/rfc2193.txt">RFC 2193: IMAP4 Mailbox Referrals</a><br />
<a href="rfclist/imap4/rfc2195.txt">RFC 2195: IMAP/POP AUTHorize Extension for Simple Challenge/Response</a><br />
<a href="rfclist/imap4/rfc2221.txt">RFC 2221: IMAP4 Login Referrals</a><br />
<a href="rfclist/imap4/rfc2342.txt">RFC 2342: IMAP4 Namespace (elective)</a><br />
<a href="rfclist/imap4/rfc2359.txt">RFC 2359: IMAP4 UIDPLUS extension (elective)</a><br />
<a href="rfclist/imap4/rfc2595.txt">RFC 2595: Using TLS with IMAP, POP and ACAP</a><br />
<a href="rfclist/imap4/rfc2683.txt">RFC 2683: IMAP4 Implementation Recommendations</a><br />
<a href="rfclist/imap4/rfc5256.txt">RFC 5256: IMAP4 SORT and THREAD Extensions</a><br />
</div>
<div class="section"><h3>NNTP RFCs<a name="NNTP_RFCs"></a></h3>
<a href="rfclist/nntp/rfc0977.txt">RFC 977: NNTP Protocol</a><br />
<a href="rfclist/nntp/rfc1036.txt">RFC 1036: Format of News Messages</a><br />
<a href="rfclist/nntp/rfc2980.txt">RFC 2980: Common NNTP Extensions</a><br />
<a class="externalLink" href="http://www.academ.com/academ/nntp/">NNTP Working Group</a><br />
</div>
<div class="section"><h3>LDAP RFCs<a name="LDAP_RFCs"></a></h3>
<a href="rfclist/ldap/rfc3377.txt">RFC 3377 : Lightweight Directory Access Protocol (v3): Technical Specification</a><br />
<a href="rfclist/ldap/rfc2251.txt">RFC 2251 : Lightweight Directory Access Protocol (v3)</a><br />
<a href="rfclist/ldap/rfc2252.txt">RFC 2252 : Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions</a><br />
<a href="rfclist/ldap/rfc2253.txt">RFC 2253 : Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names</a><br />
<a href="rfclist/ldap/rfc2254.txt">RFC 2254 : The String Representation of LDAP Search Filters</a><br />
<a href="rfclist/ldap/rfc2255.txt">RFC 2255 : The LDAP URL Format</a><br />
<a href="rfclist/ldap/rfc2256.txt">RFC 2256 : A Summary of the X.500(96) User Schema for use with LDAPv3</a><br />
<a href="rfclist/ldap/rfc2829.txt">RFC 2829 : Authentication Methods for LDAP</a><br />
<a href="rfclist/ldap/rfc2830.txt">RFC 2830 : Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security</a><br />
</div>
</div>

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