<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
  <meta http-equiv="Content-Language" content="en"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Mailing Lists</title>

  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
  <link href="/css/main.css" rel="stylesheet">
  <link href="/css/custom.css" rel="stylesheet">
  <link href="/css/syntax.css" rel="stylesheet">

  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
  <script type="text/javascript" src="/js/community.js"></script>

  <!-- Matomo -->
  <script>
    var _paq = window._paq = window._paq || [];
    /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
    /* We explicitly disable cookie tracking to avoid privacy issues */
    _paq.push(['disableCookies']);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    (function() {
      var u="//analytics.apache.org/";
      _paq.push(['setTrackerUrl', u+'matomo.php']);
      _paq.push(['setSiteId', '41']);
      var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    })();
  </script>
  <!-- End Matomo Code -->
</head>
<body>

<a href="https://github.com/apache/struts" class="github-ribbon">
  <img decoding="async" loading="lazy" style="position: absolute; right: 0; border: 0;" width="149" height="149" src="https://github.blog/wp-content/uploads/2008/12/forkme_right_red_aa0000.png?resize=149%2C149" class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1">
</a>

<header>
  <nav>
    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
            Menu
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
        </div>
        <div id="struts-menu" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Home<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/index.html">Welcome</a></li>
                <li><a href="/download.cgi">Download</a></li>
                <li><a href="/releases.html">Releases</a></li>
                <li><a href="/announce-2024.html">Announcements</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Support<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/mail.html">User Mailing List</a></li>
                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
                <li><a href="/security.html">Reporting Security Issues</a></li>
                <li><a href="/commercial-support.html">Commercial Support</a></li>
                <li class="divider"></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
                <li class="divider"></li>
                <li><a href="/maven/project-info.html">Maven Project Info</a></li>
                <li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
                <li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Documentation<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/birdseye.html">Birds Eye</a></li>
                <li><a href="/primer.html">Key Technologies</a></li>
                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
                <li class="divider"></li>
                <li><a href="/getting-started/">Getting Started</a></li>
                <li><a href="/security/">Security Guide</a></li>
                <li><a href="/core-developers/">Core Developers Guide</a></li>
                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
                <li><a href="/plugins/">Plugins</a></li>
                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
                <li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Contributing<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/youatstruts.html">You at Struts</a></li>
                <li><a href="/helping.html">How to Help FAQ</a></li>
                <li><a href="/dev-mail.html">Development Lists</a></li>
                <li class="divider"></li>
                <li><a href="/submitting-patches.html">Submitting patches</a></li>
                <li><a href="/builds.html">Source Code and Builds</a></li>
                <li><a href="/coding-standards.html">Coding standards</a></li>
                <li><a href="/contributors/">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/release-guidelines.html">Release Guidelines</a></li>
                <li><a href="/bylaws.html">PMC Charter</a></li>
                <li><a href="/volunteers.html">Volunteers</a></li>
                <li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
                <li><a href="/updating-website.html">Updating the website</a></li>
              </ul>
            </li>
            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
          </ul>
        </div>
      </div>
    </div>
  </nav>
</header>


<article class="container">
  <section class="col-md-12">
    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/mail.md" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1 id="mailing-lists">Mailing Lists</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 are the primary means of communication for people working within the Apache Struts Project.</p>

<p><strong>HEADS UP!</strong></p>

<p class="alert alert-info">A message sent to a public mailing list cannot be unpublished. Although we might be able to modify our own mail archives, 
the message is mirrored to a lot of other archiving systems which we do not have under control. Therefore almost 100% 
of all delete requests are denied. Please make sure you <strong>do not send any potential sensitive information to the mailing list</strong>,
including passwords, server names, ips and so on.</p>

<h2 id="subscribing">Subscribing</h2>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Subscribe</th>
      <th>Unsubscribe</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a href="https://lists.apache.org/list.html?announcements@struts.apache.org">Struts-Announcements</a></td>
      <td><a href="mailto:announcements-subscribe@struts.apache.org?subject=subscribe&amp;body=subscribe">announcements-subscribe@struts.apache.org</a></td>
      <td><a href="mailto:announcements-unsubscribe@struts.apache.org?subject=unsubscribe&amp;body=unsubscribe">announcements-unsubscribe@struts.apache.org</a></td>
      <td>Major Announcements, low-volume, read only</td>
    </tr>
    <tr>
      <td><a href="https://lists.apache.org/list.html?user@struts.apache.org">Struts-User</a></td>
      <td><a href="mailto:user-subscribe@struts.apache.org?subject=subscribe&amp;body=subscribe">user-subscribe@struts.apache.org</a></td>
      <td><a href="mailto:user-unsubscribe@struts.apache.org?subject=unsubscribe&amp;body=unsubscribe">user-unsubscribe@struts.apache.org</a></td>
      <td>Contact to other Struts-users and ask questions on installation or features</td>
    </tr>
    <tr>
      <td>Users Digest</td>
      <td><a href="mailto:user-digest-subscribe@struts.apache.org?subject=subscribe&amp;body=subscribe">user-digest-subscribe@struts.apache.org</a></td>
      <td><a href="mailto:user-digest-unsubscribe@struts.apache.org?subject=unsubscribe&amp;body=unsubscribe">user-digest-unsubscribe@struts.apache.org</a></td>
      <td>Get a daily digest of the Struts Users list</td>
    </tr>
  </tbody>
</table>

<p class="alert alert-success">You can use a web interface as well if you want to post a question <a href="https://lists.apache.org/list.html?user@struts.apache.org">https://lists.apache.org/</a></p>

<p>You can read the <a href="http://mail-archives.apache.org/mod_mbox/struts-user">ASF Mail</a> or the <a href="http://markmail.org/list/org.apache.struts.users">Mark Mail</a>
Archives if you are looking for older discussions. There are many other archives out there as well.</p>

<p class="alert alert-success">If you want to <strong>discuss patches or contribute to Struts</strong> you should subscribe to the <a href="dev-mail">developers list</a>.</p>

<h2 id="moderators">Moderators</h2>

<p>Users with the moderate right to the above lists can check subscribers, subscribe and unsubscribe given users,
check <a href="https://infra.apache.org/mailing-list-moderation.html">Mailing list moderation</a> for more details, basically
to unsubscribe someone you can email:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{listname}-unsubscribe-badboy=menace.com@tlp.apache.org
</code></pre></div></div>

<h3 id="unsubscribe-from-the-users-mailing-list">Unsubscribe from the Users mailing list</h3>

<script>
function generate(form) {
  var badBoy=form[0];
  var email = 'user-unsubscribe-' + badBoy.value.replace('@', '=') + '@struts.apache.org';
  var link = document.getElementById('ready-email');
  link.style.visibility = 'visible';
  link.href = 'mailto:' + email;
}
</script>

<form action="javascript: void(0);">
    <label for="bad-boy">Paste user email address</label>
    <input id="bad-boy" type="text" />
    <input type="button" value="Generate" onclick="generate(this.form)" />
    <div><a style="visibility: hidden" id="ready-email" href="#">Unsubscribe</a></div>
</form>

<h2 id="guidelines">Guidelines</h2>

<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>Join the lists that are appropriate for your discussion.</strong></p>

<p class="alert alert-warning">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>

<h3 id="respect-the-mailing-list-type">Respect the mailing list type</h3>

<p>The “User” list is where you can send questions and comments about configuration, setup, usage and other “user” 
types of questions. The focus of the user list should be one “how” to do something with the framework we have today.
The focus of the dev list is how we want to do something with a future version of the framework.</p>

<p>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. Questions about the “future” of Struts are best addressed to the dev list.</p>

<p>Some questions may seem appropriate for posting on both the “user” and the “developer” lists. In this case, pick one 
and only one. Do not cross post, unless a Committer asks that the thread be moved to the other list.</p>

<h3 id="do-not-cross-post-messages">Do not cross post messages.</h3>

<p>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>

<h3 id="watch-where-you-are-sending-email">Watch where you are sending email.</h3>

<p>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.</p>

<h3 id="do-not-send-html-emails-to-the-list">Do not send HTML emails to the list.</h3>

<p>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.</p>

<h3 id="keep-your-email-short-and-to-the-point">Keep your email short and to the point.</h3>

<p>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>

<h3 id="dont-feed-the-trolls">Don’t feed the trolls.</h3>

<blockquote>
  <p>“In Internet terminology, a troll is a person who posts rude or offensive messages on the Internet, such as in online 
discussion forums, to disrupt discussion or to upset its participants (see Anonymous Internet posting). “Troll” can 
also mean the message itself or be a verb meaning to post such messages. “Trolling” is also commonly used to describe 
the activity.”</p>

  <p>For more, see <a href="http://en.wikipedia.org/wiki/Internet_trolls">Internet Trolls</a> in the Wikipedia.</p>
</blockquote>

<p>If someone makes an off-topic post that offends you, our best advice is to filter posts from that person to the trash.
When subscribers do choose to respond, sometimes a thread will feed on itself, and grow out of control. When that happens, 
our best advice is to filter the entire thread to the trash.</p>

<p>Our spam filters will catch most types of commercial spam, but troll spam is a hard for software to spot. The best defense 
is to withhold from the troll what he or she wants most: A response.</p>

<h3 id="ask-smart-questions">Ask smart questions.</h3>

<p>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">Asking Smart Questions</a>
precisely on this topic. Please read the essay, follow its advice, and then post your smart questions to the appropriate list.</p>

  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation. All Rights Reserved.
  </div>
  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>

<script>!function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id)) {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
  }
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>

<div id="fb-root"></div>

<script>(function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


</body>
</html>
