<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
-->
<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: issue-tracking-template.xml                           |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons:jira-page                          |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.jira.id  (required, alphabetic, upper case)             |
 |    - commons.jira.pid (required, numeric)                            |
 |                                                                      |
 | 3) Example Properties                                                |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.jira.id>MATH</commons.jira.id>                           |
 |    <commons.jira.pid>12310485</commons.jira.pid>                     |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Commons Email Issue tracking</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>

    <section name="Commons Email Issue tracking">
      <p>
      Commons Email uses <a href="http://issues.apache.org/jira/">ASF JIRA</a> for tracking issues.
      See the <a href="http://issues.apache.org/jira/browse/EMAIL">Commons Email JIRA project page</a>.
      </p>

      <p>
      To use JIRA you may need to <a href="http://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
      (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
      created and you can use the <a href="http://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
      page to get a new password).
      </p>

      <p>
      If you would like to report a bug, or raise an enhancement request with
      Commons Email please do the following:
      <ol>
        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310474&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">Search existing open bugs</a>.
            If you find your issue listed then please add a comment with your details.</li>
        <li><a href="mail-lists.html">Search the mailing list archive(s)</a>.
            You may find your issue or idea has already been discussed.</li>
        <li>Decide if your issue is a bug or an enhancement.</li>
        <li>Submit either a <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310474&amp;issuetype=1&amp;priority=4&amp;assignee=-1">bug report</a>
            or <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310474&amp;issuetype=4&amp;priority=4&amp;assignee=-1">enhancement request</a>.</li>
      </ol>
      </p>

      <p>
      Please also remember these points:
      <ul>
        <li>the more information you provide, the better we can help you</li>
        <li>test cases are vital, particularly for any proposed enhancements</li>
        <li>the developers of Commons Email are all unpaid volunteers</li>
      </ul>
      </p>

      <p>
      For more information on subversion and creating patches see the
      <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
      </p>

      <p>
      You may also find these links useful:
      <ul>
        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310474&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">All Open Commons Email bugs</a></li>
        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310474&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=5&amp;status=6">All Resolved Commons Email bugs</a></li>
        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310474&amp;sorter/field=issuekey&amp;sorter/order=DESC">All Commons Email bugs</a></li>
      </ul>
      </p>
    </section>
  </body>
</document>
