<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
        <title>Apache JMeter
          -
          Mailing Lists</title>
        <meta name="author" value="Apache JMeter Project">
        <meta name="email" value="dev.AT.jmeter.DOT.apache.DOT.org">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" type="text/css" href="./css/new-style.css">
        <link rel="apple-touch-icon-precomposed" href="./images/apple-touch-icon.png">
        <link rel="icon" href="./images/favicon.png">
        <meta name="msapplication-TileColor" content="#ffffff">
        <meta name="msapplication-TileImage" content="./images/mstile-144x144.png">
        <meta name="theme-color" content="#ffffff">
    </head>
    <body role="document">
        <a href="#content" class="hidden">Main content</a>
        <div class="header">
            <!--
            APACHE LOGO
          -->
            <div>
                <a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="./images/asf-logo.svg" alt="Logo ASF"></a>
            </div>
            <!--
              PROJECT LOGO
            -->
            <div>
                <a href="https://jmeter.apache.org/"><img class="logo" src="./images/logo.svg" alt="Apache JMeter"></a>
            </div>
            <div class="banner">
                <a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
                <div class="clear"></div>
            </div>
        </div>
        <div class="nav">
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">About</div>
                    <ul>
                        <li>
                            <a href="./index.html">Overview</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/licenses/">License</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Download</div>
                    <ul>
                        <li>
                            <a href="./download_jmeter.cgi">Download Releases</a>
                        </li>
                        <li>
                            <a href="./changes.html">Release Notes</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Documentation</div>
                    <ul>
                        <li>
                            <a href="./usermanual/get-started.html">Get Started</a>
                        </li>
                        <li>
                            <a href="./usermanual/index.html">User Manual</a>
                        </li>
                        <li>
                            <a href="./usermanual/best-practices.html">Best Practices</a>
                        </li>
                        <li>
                            <a href="./usermanual/component_reference.html">Component Reference</a>
                        </li>
                        <li>
                            <a href="./usermanual/functions.html">Functions Reference</a>
                        </li>
                        <li>
                            <a href="./usermanual/properties_reference.html">Properties Reference</a>
                        </li>
                        <li>
                            <a href="./changes_history.html">Change History</a>
                        </li>
                        <li>
                            <a href="./api/index.html">Javadocs</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Tutorials</div>
                    <ul>
                        <li>
                            <a href="./usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
                        </li>
                        <li>
                            <a href="./usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
                        </li>
                        <li>
                            <a href="./usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
                        </li>
                        <li>
                            <a href="./usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
                        </li>
                        <li>
                            <a href="./usermanual/jmeter_tutorial.html">Extending JMeter</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Community</div>
                    <ul>
                        <li>
                            <a href="./issues.html">Issue Tracking</a>
                        </li>
                        <li>
                            <a href="./security.html">Security</a>
                        </li>
                        <li>
                            <a href="./mail.html">Mailing Lists</a>
                        </li>
                        <li>
                            <a href="./svnindex.html">Source Repositories</a>
                        </li>
                        <li>
                            <a href="./building.html">Building and Contributing</a>
                        </li>
                        <li>
                            <a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Foundation</div>
                    <ul>
                        <li>
                            <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
                        </li>
                        <li>
                            <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
        <div class="main" id="content">
            <div class="social-media">
                <ul class="social-media-links">
                    <li class="twitter">
                        <a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
                    </li>
                    <li class="github">
                        <a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
                    </li>
                </ul>
            </div>
            <div class="section">
                <h1>Mailing Lists - Guidelines</h1>
                
                <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. With potentially thousands of subscribers,
there is a common set of etiquette guidelines that you should observe.
Please keep on reading.
</p>
                
                <p>
                    Please note that usage of these mailing lists is subject to the
<a href="http://www.apache.org/foundation/public-archives.html">Public Forum Archive Policy</a>.

                </p>
                
                <p>
                    
                    <strong>
      Respect the mailing list type
</strong>
                    <br>
                     There are generally two types of lists.

                </p>
                
                <p>
                    
                    <ul>
                            
                        <li>
    The "User" lists where you can send questions and comments about
    configuration, setup, usage and other "user" types of questions.
    </li>
                            
                        <li>
    The "Developer" lists where you can send questions and
    comments about the actual software source code and general
    "development" types of questions.
    </li>
                        
                    </ul>
                    
                </p>
                
                <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 Regexp 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.  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 href="http://www.catb.org/~esr/faqs/smart-questions.html#forum">choose your forum</a> carefully.

                </p>
                
                <p>
                    
                    <strong>
    Give feedback when you get a good answer.  </strong>
                    <br>
                    If an answer given to you helped you solve your problem then send a mail saying so and don't forget to say <b>THANKS</b>.
If you fixed the problem yourself then contribute to the mailing list by writing how you solved your issue.
Giving feedback is useful to people who faced/will face same problems as you and will be your way
to contribute to the project. Don't forget that people answering your questions are volunteers
doing so on their personal time.
                    <br>
                    
                </p>
                
                <p>
                    
                    <strong>
    Keep your email short and to the point; use a suitable subject line.
</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>
    Start a new thread for a new topic
</strong>
                    <br>
                    When asking a new question, please start a new thread with an appropriate new subject line.
This makes it easier to read, and to find later in the archives.

                </p>
                
                <p>
                    
                    <strong>
    Do your best to ensure that you are not sending HTML or
    "Stylized" 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.

                </p>
                
                <p>
                    
                    <strong>
Please don't send attachments or include large chunks of code</strong>
                    <br>
                    Attachments can be difficult to read and are rarely needed by all recipients.
Some mailing lists are set up to drop them.
If you need to send more than a few lines of code, ask first.
Note that code is often mangled by word-wrapping, so it is better to provide a link to a downloadable file.
If necessary, arrange with the person(s) responding to the posting how best to give access to the data,
should it prove necessary.

                </p>
                
                <p>
                    
                    <strong>
    Watch where you are sending email.
</strong>
                    <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.
<em>
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.net/essays/reply-to.mhtml">
condoning</a>
it.  Bringing this up for debate on a mailing list will add nothing
new and is considered off-topic.
</em>

                </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>
                
            </div>
            <div class="section">
                <h1>Conclusion</h1>
                
                <p>
                    
                    <strong>Now that you have read the guidelines above</strong>, <a href="./mail2.html"><strong>here</strong></a> is the page that gives
you a listing of the different mailing lists that you can join. If you
managed to find this without reading the above information, chances
are you will be sent back here. You might as well read it now and save
yourself the embarrassment.

                </p>
                
            </div>
            <div class="share-links">
                      Share this page:
      
                <ul>
                    <li class="fb">
                        <a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
                    </li>
                    <li class="twitter">
                        <a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
                    </li>
                </ul>
            </div>
            <a href="#top" id="topButton">Go to top</a>
        </div>
        <div class="footer">
            <div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2024
            , Apache Software Foundation
          </div>
            <div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
        </div>
        <script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
    </body>
</html>
