<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
<style type="text/css">
/* <![CDATA[ */ @import "/branding/css/tigris.css"; /* ]]> */
</style>
  <script src="/branding/scripts/sc.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="/branding/css/print.css" media="print" />

  <title>Project Mailing Lists</title>
 </head>

 <body class="docs" onload="self.focus()">
  <div class="docs" id="projectmail">
   <h2>Project Mailing Lists</h2>

   <div id="toc">
    <ul>
     <li><strong><a href="/nonav/servlets/HelpTOC">Help index</a></strong></li>
    </ul>

    <ul>
     <li><a href="/nonav/docs/Learning.html">Learning about projects</a></li>

     <li>
      <a href="/nonav/docs/ProjectMemberResources.html">Project resources for members</a> 

      <ul>
       <li><a href="/nonav/docs/ProjectHome.html">Project Home Page</a></li>

       <li><a href="/nonav/docs/ProjectNews.html">Project News</a></li>

       <li><a href="/nonav/docs/ProjectMemberList.html">Project Membership</a></li>

       <li>
        Project Mailing Lists 

        <ul>
         <li><a href="#aboutmail">About project mailing lists</a></li>

         <li><a href="#mailsubscribe">Subscribing and unsubscribing</a></li>

         <li><a href="#mailfeatures">Other mailing list features</a></li>

         <li><a href="#mailarchives">Mailing list archives</a></li>
        </ul>
       </li>

       <li><a href="/nonav/docs/ProjectDocuments.html">File sharing</a></li>

       <li><a href="/nonav/docs/ProjectSource.html">Project Source Code</a></li>

       <li><a href="/nonav/docs/ProjectIssues.html">Issue Tracking</a></li>
      </ul>
     </li>

     <li><a href="/nonav/docs/hostedtools.html">Hosted tools</a></li>

     <li><a href="/nonav/docs/ProjectAdd.html">Creating a new project</a></li>
    </ul>
   </div>

   <h3><a id="aboutmail" name="aboutmail">About project mailing lists</a></h3>

   <p>Mailing lists provide a way for developers and other interested parties to communicate with one another about aspects of a project, and to receive project announcements. In general, the way mailing lists work depends upon the type of project:</p>

   <ul>
    <li>Open source project mailing lists are available to any subscriber, but may be granted limited membership by the project owners.</li>

    <li>Proprietary project mailing lists are always private; only approved subscribers, usually project members, may join.</li>
   </ul>

   <p>Development projects on this site include one or more of the following mailing lists:</p>

   <dl>
    <dt>dev@projectname.domain.com</dt>

    <dd>The main list for developers to discuss specific project development issues and requirements for version control in the project.</dd>

    <dt>cvs@projectname.domain.com</dt>

    <dd>Automated notifications of file version control changes and discussion of those changes.</dd>

    <dt>announce@projectname.domain.com</dt>

    <dd>Announcements of new releases and other major project events.</dd>

    <dt>issues@projectname@domain.com</dt>

    <dd>Automated notifications and discussions of the project's reported issues (defects, enhancements, features, tasks, and patches) and changes made to issues, such as reassignment, comments, or resolution.</dd>

    <dt>users@projectname.domain.com</dt>

    <dd>A more general discussion list for the project's end users.</dd>
   </dl>

   <h3><a id="mailsubscribe" name="mailsubscribe">Subscribing and unsubscribing</a></h3>

   <p>You can subscribe or unsubscribe to mailing lists for a particular project by selecting "Mailing Lists" on the left navigation bar.</p>

   <p>The <b>Project Mail</b> page includes subscribe/unsubscribe links for either a message-by-message or digest version of the list, as well as options to view each project list's archives.</p>

   <p>To begin the subscription process, click on the hyperlinked mailing list address to which you want to subscribe and send the message from your email client.</p>

   <p>You should receive a response asking for a confirmation. After you reply as indicated in the email, you will receive an email welcoming you and acknowledging your successful mailing list subscription. Follow the same process for unsubscribing, but substitute the <strong>unsubscribe</strong> link.</p>

   <p>Once on the <b>Mailing Lists</b> page, you can view the project mailing list archives by clicking on the "view archive" link next to the mailing list title for that list. Click on the date range and subject links to specify the sort of messages you want to see.</p>

   <p>All mailing lists associated with the project are listed here. The links on this page allow you to subscribe (or unsubscribe) to the available mailing lists.</p>

   <p>Most lists also have a corresponding "digest" version -- if you subscribe to this you receive a single daily email with all of that day's postings.</p>

   <h3><a id="mailfeatures" name="mailfeatures">Other mailing list features</a></h3>

   <dl>
    <dt>Posting a message</dt>

    <dd>To post a message to a mailing list for a project, send your message to: <b>listname@projectname.domain</b>. For example, to post a message to the developer mailing list in project platform, send email to: <b>dev@platform.projectname.domain</b></dd>

    <dt>Getting help</dt>

    <dd>To get an automated help message for a mailing list, send a blank email message to: <b>listname-help@projectname.domain</b>. For example, for the dev mailing list in project platform, send email to: <b>dev-help@platform.projectname.domain</b></dd>

    <dt>Contact list moderator</dt>

    <dd>To communicate with the list moderator, send an email message to: <b>list-owner@projectname.domain</b></dd>
   </dl>

   <h3><a id="mailarchives" name="mailarchives">Mailing list archives</a></h3>

   <p>Project/component mailing list archiving is handled by <a href="http://eyebrowse.tigris.org/">EyeBrowse</a>, an open source tool that stores and indexes list messages, providing multiple options for browsing, reading, and searching mailing list archives via a web browser. Beyond storing messages, EyeBrowse adds a database and text indexing engine to handle rapid message search and retrieval.</p>

   <p>To view a mailing list's archives, select the <strong>Mailing List</strong> link in the Project section of the left navigation bar to see a list of all mailing lists for that project. Click on the <strong>View Archive</strong> link next to the list you want to view. The default view for browsing mailing list archives is by date summary. Other summary views available are: by <strong>Author</strong>, by <strong>Subject</strong>, and by <strong>Thread</strong>.</p>

   <p>The <b>Date</b>, <b>Author</b>, <b>Subject</b>, and <b>Thread</b> views use unique parameters to sort through and display mail items in the archive.</p>

   <p>The <b>Date</b> parameter groups mail items by year and month; all mail items received in the month of May 2001 will be grouped in one category, while all items received in January of 2000 will be grouped in another category. A group of all mail items is also provided for convenience. You have the option of viewing all mail items or selecting a particular month and year for viewing. By clicking on the link to your preferred grouping, mail items are presented for that grouping in date order, with the eldest first and the newest last.</p>

   <p>The <b>Author</b> parameter groups mail items by the author. Each author is represented as a grouping. Mail items that are responses to another item are included in the group attributeted to the respondent, and not by the original message author. Clicking on the link attached to the author's name will provide a list of all mail items generated by that author in ascending date order.</p>

   <p>The <b>Subject</b> parameter groups mail items by the original subject. Each subject is represented as a grouping of mail items. Clicking on link to a subject will provide a list of all mail items pertaining to that subject in ascending order of receipt.</p>

   <p>The <b>Thread</b> parameter groups mail items by conversation. Each thread is represented by a grouping of mail items. Clickin on the link to a thread will provide a list of mail items pertaining to that thread in ascending order of receipt.</p>

   <p>A mail list conversation occurs when 1). there is one or more responses to a mail item, and, 2). the mail program used to create the original item and the responses are capable of tracking the "in-reply-to" or "references" headers. If your mail application can support SMTP then any response you generate to a mail item will be viewable in a thread sort.</p>

   <p>The <b>Subject</b> and <b>Thread</b> parameters appear to be very similar in function. The difference between them is that the <b>Subject</b> parameter sorts specifically on the subject headers of all emails. That is, all email messages with substantially similar subject headings will appear in the same grouping. For example, the "this is it" and "RE: this is it" email messages will appear in the same grouping. The <b>Thread</b> grouping, on the other hand, relies on the "in-reply-to" or "references" headers of email messages to establish appropriate groupings. Not all email applications are capable of tracking either the "in-reply-to" or the "references" headers. This results in messages that you might expect to be co-members of a <b>Thread</b> grouping will not appear together. Further, since the <b>Thread</b> grouping is intended to track conversations, more than one email message is required for a grouping to be created. The email message with the subject heading "this is not it" and nothing in the "in-reply-to" or "references" headers will not appear in any <b>Thread</b> grouping. Two email messages with the same subject header but with nothing in either the "in-reply-to" or the "references" headers will, likewise, not be grouped. Determining which parameter to choose, <b>Subject</b> or <b>Thread</b> will depend upon what your needs are. If you are most interested in finding email with the same subject, the the <b>Subject</b> parameter is appropriate. If you are most interested in tracking a conversation taking place in email and are not concerned by missing some email that are members of no conversations or were written using email software that is incapable of tracking the "in-reply-to" or "references" headers, the <b>Thread</b> parameter is appropriate.</p>

   <p>You can use the <strong>Search Archive</strong> link to add filters to your search criteria. You can enter a search text and choose to sort by <strong>Subject</strong>, <strong>Author</strong>, or <strong>Body</strong> by choosing one from the drop down box under the text box. You can also search text strings of the archived messages using simple Boolean operators.</p>

   <div class="courtesylinks">
    <p><a href="#toc">Top</a> | <a href="/nonav/servlets/HelpTOC">Help index</a></p>
   </div>
  </div>
 </body>
</html>


