report.mailing-lists.column.post = Post (please subscribe first)
report.mailing-lists.intro = These are the mailing lists that have been established for this project. \
             For each list, there is a subscribe, unsubscribe, and an archive link.\
        <br/><b>Please subscribe before posting</b>.\
        <p>\
            For general information on mailing list participation, please read \
            <a href="./mail.html">HttpComponents Mailing Lists</a>\
        </p>\
        <p>\
            Questions related to the <u>usage</u> of HttpComponents software should be posted to the \
            <a href="http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/" class="externalLink">User List</a>. \
        </p>\
        <p>\
            The <a href="http://mail-archives.apache.org/mod_mbox/hc-dev/" class="externalLink">Developer List</a> \
            is for questions and discussion related to the development of HttpComponents software.\
        </p>\
        <p>\
            Please do not cross-post; developers are also subscribed to the user list.\
        </p>\
        <p>\
            Read the archives first in case your question has already been answered. \
            If not, then subscribe to the appropriate list and post your question.\
        </p>\
        <p>\
            <strong>Note:</strong> please don't send patches or attachments to any of the mailing lists. \
            Patches are best handled via the <a href="/issue-tracking.html">Issue Tracking</a> system. \
            Otherwise, please upload the file to a public server and include the URL in the mail.\
        </p>\
        <p>\
            Please read the <a href="http://www.apache.org/foundation/public-archives.html" class="externalLink">Public Forum Archive Policy</a> \
            and <a href="http://www.apache.org/dev/contrib-email-tips.html" class="externalLink">Tips for email contributors</a>. \
            <br>\
            For further information on Apache mailing lists please read \
            <a href="http://www.apache.org/foundation/mailinglists.html" class="externalLink">General mailing list information</a> \
            in particular the section entitled \
            <a href="http://www.apache.org/foundation/mailinglists.html#subscribe" class="externalLink">Subscribing and Unsubscribing</a> \
        </p>