<?xml version="1.0"?>
<!--
Copyright 1999-2005 The Apache Software Foundation
Licensed 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.
-->
<!--
// ======================================================================== 78
-->
<document>

    <properties>
        <title>Mailing List Guidelines</title>
    </properties>

    <body>

        <section name="Mailing Lists - Guidelines">
            <a name="Guidelines"/>

            <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 are the primary means of
                communication
                for people working within the Apache Struts Project.
            </p>

            <subsection name="Mailing Lists - Guidelines">

                <p>
                    Mailing lists provide a simple and effective communication
                    mechanism.
                    With potentially thousands of subscribers, there is a
                    common set of
                    etiquette guidelines that you should observe. Please keep
                    on reading.
                </p>

                <p>
                    <strong>
                        Respect the mailing list type
                    </strong>
                </p>

                <ul>
                    <li>
                        The "User" list is where you can send questions and
                        comments about
                        configuration, setup, usage and other "user" types of
                        questions.
                    </li>
                    <li>
                        The "Developer" (or "Dev") list is where you can send
                        questions and
                        comments about the actual software source code and
                        general
                        "development" types of questions.
                    </li>
                </ul>

                <p>Some questions are appropriate for posting on both the
                    "user" and
                    the "developer" 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 user base you are abusing
                    resources. In
                    fact, it is unlikely that you will get a quicker answer,
                    if at
                    all.</p>

                <p>
                    <strong>
                        Join the lists that are appropriate for your
                        discussion.
                    </strong>
                    <br/>
                    Please make sure that you are joining the list that is
                    appropriate for the
                    topic or product that you would like to discuss. For
                    example,
                    please do not join the Struts mailing list and ask
                    questions about Tomcat.
                    Instead, you should join the Tomcat User list and ask your
                    questions
                    there.
                </p>

                <p>
                    <strong>
                        Ask smart questions.
                    </strong>
                    <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
                            href="http://www.catb.org/~esr/faqs/smart-questions.html">
                        "
                        <b>Asking
                            Smart Questions</b>
                        "
                    </a>
                    precisely on this topic.
                </p>

                <p>
                    <strong>
                        Keep your email short and to the point.
                    </strong>
                    <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, it is a good idea to 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>
                    <strong>
                        Do your best to ensure that you are not sending HTML
                        or
                        "Stylelized" email to the list.
                    </strong>
                    <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 "Plain Text" 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.
                    Please read this
                    <a href="./micromail.html">page</a>
                    as well...
                </p>

                <p>
                    <strong>
                        Do not cross post messages.
                    </strong>
                    <br/>
                    In other words, pick a 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>

                <p>
                    <strong>Watch where you are sending email.</strong>
                    .
                    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.
                    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 href="http://www.unicom.com/pw/reply-to-harmful.html">
                        condemning</a>
                    our convention and
                    <a 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.
                </p>

            </subsection>

            <subsection name="Archives">
                <p>Archives Carrying Struts Lists</p>
                <ul>
                    <li>
                        <a href="http://mail-archives.apache.org/">ASF Mail
                            Archives</a>
                    </li>
                    <li>Mail-Archive</li>
                    <ul>
                        <li>
                            <a href="http://www.mail-archive.com/user%40struts.apache.org/">
                                User list</a>
                        </li>
                        <li>
                            <a href="http://www.mail-archive.com/dev%40struts.apache.org/">
                                Dev. list</a>
                        </li>
                    </ul>
                    <li>Gmane</li>
                    <ul>
                        <li>
                            <a href="http://news.gmane.org/gmane.comp.jakarta.struts.user/">
                                User List</a>
                        </li>
                        <li>
                            <a href="http://news.gmane.org/gmane.comp.jakarta.struts.devel/">
                                Dev. List</a>
                        </li>
                    </ul>
                    <li>Mailing list ARChives</li>
                    <ul>
                        <li>
                            <a href="http://marc.theaimsgroup.com/?l=struts-user&amp;r=1&amp;w=2">
                                User List</a>
                        </li>
                        <li>
                            <a href="http://marc.theaimsgroup.com/?l=struts-dev&amp;r=1&amp;w=2">
                                Dev. List</a>
                        </li>
                    </ul>
                    <li>
                        <a href="http://www.servlets.com/archive/servlet/SummarizeList?listName=struts-user">
                            Servlets.com servlet and JSP list archives</a>
                    </li>
                </ul>
            </subsection>

            <subsection name="Subscribing">
                <p>
                    Now that you've read the guidelines (you
                    <em>have</em>
                    read the rest of the page, haven't you?), please subscribe
                    to
                    whichever Struts lists are of interest.
                </p>

                <ul>

                    <li>
                        <strong>STRUTS-ANNOUNCEMENTS Mailing List</strong>
                        - Subscribe to this list
                        to receiving only major announcements regarding
                        Struts. This is a low-volume,
                        read-only list.
                        <br/>
                        [
                        <a href="mailto:announcements-subscribe@struts.apache.org">
                            Subscribe</a>
                        ]
                        <br/>
                        [
                        <a href="mailto:announcements-unsubscribe@struts.apache.org">
                            Unsubscribe</a>
                        ]
                    </li>

                    <li>
                        <strong>STRUTS-USER Mailing List</strong>
                        - Subscribe to this list
                        to communicate with other developers that are using
                        Struts for their own applications, including questions
                        about the
                        installation of Struts, and the usage of particular
                        Struts features.
                        <br/>
                        [
                        <a href="mailto:user-subscribe@struts.apache.org">
                            Subscribe</a>
                        ]
                        <br/>
                        [
                        <a href="mailto:user-unsubscribe@struts.apache.org">
                            Unsubscribe</a>
                        ]
                    </li>

                    <li>
                        <strong>STRUTS-DEV Mailing List</strong>
                        - Subscribe to this mailing
                        list to communicate with other developers interested
                        in expanding and
                        improving the functionality supported by Struts
                        itself.
                        <br/>
                        [
                        <a href="mailto:dev-subscribe@struts.apache.org">
                            Subscribe</a>
                        ]
                        <br/>
                        [
                        <a href="mailto:dev-unsubscribe@struts.apache.org">
                            Unsubscribe</a>
                        ]
                    </li>

                    <li>
                        <strong>STRUTS-USER Digest</strong>
                        - Subscribe to this list to receive
                        a daily digest of the Struts USER list.
                        <br/>
                        [
                        <a href="mailto:user-digest-subscribe@struts.apache.org">
                            Subscribe</a>
                        ]
                        <br/>
                        [
                        <a href="mailto:user-digest-unsubscribe@struts.apache.org">
                            Unsubscribe</a>
                        ]
                        <br/>
                        If you subscribe to the Digest, you can also post to
                        the User list.
                        (Just don't quote the entire Digest mailing in a
                        reply!)
                    </li>

                    <li>
                        <strong>STRUTS-USER Newsgroup</strong>
                        - The User list is also mirrored online,
                        so that you can participate
                        <strong>without</strong>
                        subscribing to the regular mailing
                        list.
                        <br/>
                        [
                        <a href="http://struts_user.roomity.com">Struts User
                            on Roomity</a>
                        ]
                        <br/>
                        This is another way to post to the User list without
                        subscribing to the
                        regular list.
                        <br/>
                    </li>
                </ul>

                <p>
                    Please note that the Struts User list enjoys a "casual
                    friday" policy.
                    More off-topic messages are tolerated on Fridays so long
                    as the
                    message is prefixed with the token [FRIDAY].
                    If you'd rather not be troubled by these postings, please
                    set your
                    mail filter accordingly.
                    Posting [FRIDAY] articles on any other weekday is
                    <strong>strongly
                        discouraged</strong>
                    .
                    We thank you for your cooperation.
                </p>

            </subsection>
        </section>

        <section>
            <p class="right">
                <strong>Next:</strong>
                <a href="volunteers.html">Who we are</a>
            </p>
        </section>

    </body>
</document>
