<?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; Mailing lists</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="James Project Web Team" />
    <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="expanded">
                          <a href="documentation.html" title="About James">About James</a>
                    <ul>
                      <li class="none">
            <strong>Mailing Lists</strong>
          </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="https://issues.apache.org/jira/browse/JAMES" title="Issue tracker">Issue tracker</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>
                      <li class="none">
                          <a href="thanks.html" title="Thanks">Thanks</a>
            </li>
                      <li class="none">
                          <a href="support.html" title="Professional support">Professional support</a>
            </li>
                      <li class="none">
                          <a href="download.cgi" title="Download releases">Download releases</a>
            </li>
              </ul>
        </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="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">
        

  

    <section>
<h2><a name="James_Mailing_lists"></a>James Mailing lists</h2>
      
<p>
        <i>Please read the <a href="#Guidelines">guidelines</a> below</i> before subscribing to our lists and join our 
community.</p>
      <section>
<h3><a name="Server_User_List"></a>Server User List</h3>
        
<p>
          <b>Low Traffic</b>&#160;
          <a class="externalLink" href="mailto:server-user-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:server-user-unsubscribe@james.apache.org">Unsubscribe</a>
          <a class="externalLink" href="http://www.mail-archive.com/server-user@james.apache.org/">Archive</a>
        </p>
        
<p> This is the list where users of the Apache James 
(Server) meet and discuss issues. Developers are also expected to be 
subscribed to this list to offer support to users of Apache James 
(Server). </p>
      </section>
      <section>
<h3><a name="Server_Developer_List"></a>Server Developer List</h3>
        
<p>
          <b>High Traffic</b>&#160;
          <a class="externalLink" href="mailto:server-dev-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:server-dev-unsubscribe@james.apache.org">Unsubscribe</a>
          <a class="externalLink" href="http://www.mail-archive.com/server-dev@james.apache.org/">Archive</a>
        </p>
        
<p> This is the list where participating developers of 
the the Apache James Project meet and discuss issues, code 
changes/additions, etc. Subscribers to this list get notices of each and 
every code change, build results, testing notices, etc. <b>Do not send 
mail to this list with usage questions or configuration problems</b> -- 
that's what server-user@james is for. </p>
      </section>
      <section>
<h3><a name="Mime4j"></a>Mime4j</h3>
        
<p>
          <b>Medium Traffic</b>&#160;
          <a class="externalLink" href="mailto:mime4j-dev-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:mime4j-dev-unsubscribe@james.apache.org">Unsubscribe</a>
          <a class="externalLink" href="http://mail-archives.apache.org/mod_mbox/james-mime4j-dev">Archive</a>
        </p>
        
<p>Discussions on the <a class="externalLink" href="http://james.apache.org/mime4j">Mime4j</a> 
        parser library.</p>
      </section>
      <section>
<h3><a name="Site_Developer_List"></a>Site Developer List</h3>
        
<p>
          <b>Very Low Traffic</b>&#160;
          <a class="externalLink" href="mailto:site-dev-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:site-dev-unsubscribe@james.apache.org">Unsubscribe</a>
          <a class="externalLink" href="http://www.mail-archive.com/site-dev@james.apache.org/">Archive</a>
        </p>
        
<p> This is the list where participating developers of 
the the Apache James project discuss changes/additions to the James 
websites etc. Subscribers to this list get notifications of every commit 
of the website reaources<b>Do not send mail to this list with James 
software problems</b> -- that's what server-user@james is for. </p>
      </section>
      <section>
<h3><a name="James_General_List"></a>James General List</h3>
        
<p>
          <b>Low Traffic</b>&#160;
          <a class="externalLink" href="mailto:general-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:general-unsubscribe@james.apache.org">Unsubscribe</a>
          
        </p>
        
<p> This is the list for general discussions 
relating to the running of the project, it is the public list of the 
James project management committee (PMC) and is a public list open to 
all. <b>Do not send mail to this list with James software problems</b> 
-- that's what server-user@james is for. </p>
      </section>
      <section>
<h3><a name="Mailet_API_List"></a>Mailet API List</h3>
        
<p>
          <b>Very Low Traffic</b>&#160;
          <a class="externalLink" href="mailto:mailet-api-subscribe@james.apache.org">Subscribe</a>
          <a class="externalLink" href="mailto:mailet-api-unsubscribe@james.apache.org">Unsubscribe</a>
        </p>
        
<p> This is the public list for the Mailet API subproject, discussing all <a class="externalLink" href="http://james.apache.org/mailet/index.html">Mailet API</a> design and implementation related topics. Questions about using Mailets and their configuration should be addressed to the server-user list.</p>
      </section>
    </section>

    <section>
<h2><a name="How_to_unsubscribe_your_old_email_address"></a>How to unsubscribe your old email address</h2>
        
<p>
        First, find out the particular email adress to which ezmlm is sending.
        The email headers are visible in Microsoft Outlook via the messages menu
        &quot;View | Options&quot;.
        </p>
        
<div>
<pre>
        Microsoft Mail Internet Headers Version 2.0
        ...
        List-Unsubscribe: &lt;mailto:server-user-unsubscribe@james.apache.org&gt;
        List-Help: &lt;mailto:server-user-help@james.apache.org&gt;
        List-Post: &lt;mailto:server-user@james.apache.org&gt;
        List-Id: &quot;James Server Users List&quot; &lt;server-user.james.apache.org&gt;
        Reply-To: &quot;James Server Users List&quot; &lt;server-user@james.apache.org&gt;
        Delivered-To: mailing list server-user@james.apache.org
        ...
        Return-Path: server-user-return-12345-<i>john=host.domain</i>@james.apache.org
        ...
        </pre></div>
        
<p>
        The <i>Return-Path</i> header contains the email address which is subscribed. 
        </p>      
        
<p>To stop subscription for the address john@host.domain , send an email to </p>
<div>
<pre>server-dev-unsubscribe-john=host.domain@james.apache.org</pre></div>
          or to  
<div>
<pre>server-user-unsubscribe-john=host.domain@james.apache.org</pre></div>.
          
    </section>

    <section>
<h2><a name="Archives"></a>Archives</h2>
      
<p> There are several sites on the net that archive and 
provide searching for our mailing lists in HTML readable format.
</p>
      
<p>
        </p>
<ul>
          
<li>Archives with many Jakarta lists: 
<ul>
              
<li>
                <a class="externalLink" href="http://mail-archives.apache.org/mod_mbox/#james">List 
Index on mail-archives.apache.org</a>
              </li>
              
<li>
                <a href="/mail/">Full mbox archives of all lists.</a>
              </li>
              
<li>
                <a class="externalLink" href="http://www.mail-archive.com/">Mail-Archive</a>
              </li>
              
<li>
                <a class="externalLink" href="http://geocrawler.com/">Geocrawler</a>
              </li>
              
<li>
                <a class="externalLink" href="http://marc.theaimsgroup.com/">Mailing list Archives</a>
              </li>
              
<li>
                <a class="externalLink" href="http://www.servlets.com/archive/">Servlets.com 
servlet and JSP list archives</a>
              </li>
            </ul>
          </li>
        </ul>
      
    </section>
    
    <section>
<h2><a name="Guidelines"></a>Guidelines</h2>
      
<p>A mailing list is an electronic discussion forum 
that anyone can subscribe to. When someone sends an email message to the 
mailing list, a copy of that message is broadcast to everyone who is 
subscribed to that mailing list. Mailing lists provide a simple and 
effective communication mechanism for discussion and decision making. 
</p>
      
<p> The Apache Software Foundation has well established reasons for 
using email and not other types of forum. <br /> We are 
<b>not</b> interested in hearing proposals to use NNTP (news 
groups) or web forums or any other medium.<br /> You may use a mail-news 
gateway, gmail or anything else you like but email is, and will remain, 
the official medium. </p>
      
<p> With potentially thousands of subscribers, 
there is a common etiquette that you should observe. Please keep on 
reading. </p>
      
<p>
        <b> Respect the mailing list type </b>
      </p>
      
<p>
        </p>
<ul>
          
<li> &quot;User&quot; lists are lists where you can send questions 
and comments about configuration, setup, usage and other &quot;user&quot; types of 
questions. </li>
          
<li> &quot;Developer&quot; lists are lists where you can send 
questions, comments and contributions about the project's software 
source code and general &quot;development&quot; types of questions. </li>
        </ul>
      
      
<p>Some questions are appropriate for posting on both the 
&quot;user&quot; and the &quot;developer&quot; lists. In this case, pick one and only one. 
Do not cross post.</p>
      
<p>Asking a configuration question on the 
developers list is frowned upon because developers' time is as precious 
as yours. By contacting them directly instead of the users list you are 
abusing resources. It is unlikely that you will get a quicker answer 
this way, those developers who have time to devote to providing support 
are also subscribed to the users list. If you contact individuals 
directly, or post your user issues to the developer list you may get no 
answer at all.</p>
      
<p>
        <b> Join the lists that are appropriate for 
your discussion. </b>
        <br /> Please make sure that you are joining 
the list that is appropriate for the topic that you would like to 
discuss. The general list is for discussions about the management and 
direction of the James project, not for &quot;general support&quot;. </p>
      
<p>
        <b> Ask smart questions. </b>
        <br /> 

Every volunteer project obtains its strength from the people involved in 
it. You are welcome to join any of our mailing lists. You can choose to 
lurk, or actively participate; it's up to you. The level of community 
responsiveness to specific questions is generally directly proportional 
to the amount of effort you spend formulating your question. Eric 
Raymond and Rick Moen have even written an essay entitled <a class="externalLink" href="http://www.catb.org/~esr/faqs/smart-questions.html">&quot;<b>Asking 
Smart Questions</b>&quot;</a> precisely on this topic. Although somewhat 
militant, it is definitely worth reading.<br />
        <b>Note</b>: Please do 
NOT send your Java problems to the two authors. They welcome feedback on 
the FAQ's contents, but are simply not a Java help resource. Follow the 
essay's advice and <a class="externalLink" href="http://www.catb.org/~esr/faqs/smart-questions.html#forum">choose 
your forum</a> carefully. </p>
      
<p>
        <b> Keep your email short and to the point. </b>
        <br /> If your email is more than about a page of 
text, chances are that it won't get read by very many people. It is much 
better to try to pack a lot of informative information (see above about 
asking smart questions) into as small of an email as possible. If you 
are replying to a previous email only quote the parts that you are 
replying to and to remove the unnecessary bits. This makes it easier for 
people to follow a thread as well as making the email archives easier to 
search and read. </p>
      
<p>
        <b> Do your best to ensure that you are 
not sending HTML or &quot;Stylelized&quot; email to the list. </b>
        <br /> If 
you are using Outlook or Outlook Express or Eudora, chances are that you 
are sending HTML email by default. There is usually a setting that will 
allow you to send &quot;Plain Text&quot; email. If you are using Microsoft 
products to send email, there are several bugs in the software that 
prevent you from turning off the sending of HTML email.</p>
      
<p>
        <b> Watch where you are sending email. </b>
        <br /> The majority of our mailing 
lists have set the Reply-To to go back to the list. That means that when 
you Reply to a message, it will go to the list and not to the original 
author directly. The reason is because it helps facilitate discussion on 
the list for everyone to benefit from. Be careful of this as sometimes 
you may intend to reply to a message directly to someone instead of the 
entire list. <i> The appropriate contents of the Reply-To header is an 
age-old debate that should not be brought up on the mailing lists. You 
can examine opposing points of view <a class="externalLink" href="http://www.unicom.com/pw/reply-to-harmful.html">condemning</a> our 
convention and <a class="externalLink" href="http://www.metasystema.org/essays/reply-to-useful.mhtml"> 
condoning</a> it. Bringing this up for debate on a mailing list will add 
nothing new and is considered off-topic. </i>
      </p>
      
<p>
        <b> Do not cross post messages. </b>
        <br /> In other words, pick one mailing 
list and send your messages to that mailing list only. Do not send your 
messages to multiple mailing lists. The reason is that people may be 
subscribed to one list and not to the other. Therefore, some people will 
only see part of the conversation. </p>
</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>
