<!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="https://www.apache.org/security/">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://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;
            2019
            , 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>
