blob: ffbd766b6a67d8b932f8d662137cc2a532dc75af [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Contributing :: Apache James</title>
<meta name="generator" content="Antora 3.1.2">
<link rel="stylesheet" href="../../../_/css/site.css">
</head>
<body class="article">
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item" href="#">Home</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Products</a>
<div class="navbar-dropdown">
<div class="navbar-item"><strong>James server</strong></div>
<a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
<a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
<hr class="navbar-divider">
<a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
<a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
<a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
<a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
<a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Community</a>
<div class="navbar-dropdown">
<!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
<a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
<a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
<a class="navbar-item" href="https://twitter.com/ApacheJames">
<span class="icon">
<svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>
</span> Twitter
</a>
<a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
</div>
</div>
<!-- <div class="navbar-item">
<span class="control">
<a class="button is-primary" href="#">Download</a>
</span>
</div> -->
</div>
</div>
</nav>
</header>
<div class="body">
<div class="nav-container" data-component="james-project" data-version="3.6.0">
<aside class="nav">
<div class="panels">
<div class="nav-panel-menu is-active" data-panel="menu">
<nav class="nav-menu">
<button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
<h3 class="title"><a href="../index.html">Apache James Server</a></h3>
<ul class="nav-list">
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../concepts/index.html">Concepts</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../concepts/user/index.html">User Model</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../concepts/mail/index.html">Emails</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="#mail/messages/index.adoc">mail/messages/index.adoc</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="#mail/messages/imf.adoc">mail/messages/imf.adoc</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="#mail/messages/mime.adoc">mail/messages/mime.adoc</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../concepts/protocols/index.html">Protocols</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/smtp.html">SMTP</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/pop.html">POP</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/imap.html">IMAP</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/jmap.html">JMAP</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/esmtp.html">ESMTP</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/protocols/lmtp.html">LMTP</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../concepts/storage/index.html">Storage</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/storage/mailbox.html">Mailboxes</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../concepts/storage/users.html">Users</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../concepts/processing/index.html">Processing</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../concepts/configuration.html">Configuration</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../concepts/glossary.html">Glossary</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/index.html">Servers</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/demo.html">Demo</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/5-minute-demo.html">Short Demo</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/15-minute-demo.html">Long Demo</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/basic/index.html">Basic</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/context.html">Context</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/objectives.html">Objectives</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/concepts.html">Concepts</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/architecture.html">Architecture</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/conf/index.html">Configuration</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/basic/help.html">Help</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../servers/extendable.html">Extendable</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/distributed.html">Distributed</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/distributed/objectives.html">Objectives and motivation</a>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/distributed/architecture/index.html">Architecture</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/architecture/consistency-model.html">Consistency Model</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/architecture/specialized-instances.html">Specialized instances</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/distributed/run.html">Run</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../servers/distributed/run-docker.html">Run with docker</a>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/distributed/configure/index.html">Configuration</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<button class="nav-item-toggle"></button>
<span class="nav-text">Protocols</span>
<ul class="nav-list">
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/imap.html">imapserver.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/jmap.html">jmap.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/jmx.html">jmx.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/smtp.html">smtpserver.xml &amp; lmtpserver.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/smtp-hooks.html">Packaged SMTP hooks</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/pop3.html">pop3server.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/webadmin.html">webadmin.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/ssl.html">SSL &amp; TLS</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="4">
<button class="nav-item-toggle"></button>
<span class="nav-text">Storage dependencies</span>
<ul class="nav-list">
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/blobstore.html">blobstore.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/cassandra.html">cassandra.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/elasticsearch.html">elasticsearch.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/rabbitmq.html">rabbitmq.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/tika.html">tika.properties</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="4">
<button class="nav-item-toggle"></button>
<span class="nav-text">Core components</span>
<ul class="nav-list">
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/batchsizes.html">batchsizes.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/dns.html">dnsservice.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/domainlist.html">domainlist.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/healthcheck.html">healthcheck.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/mailetcontainer.html">mailetcontainer.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/mailets.html">Packaged Mailets</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/matchers.html">Packaged Matchers</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/mailrepositorystore.html">mailrepositorystore.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/recipientrewritetable.html">recipientrewritetable.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/usersrepository.html">usersrepository.xml</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="4">
<button class="nav-item-toggle"></button>
<span class="nav-text">Extensions</span>
<ul class="nav-list">
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/vault.html">deletedMessageVault.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/extensions.html">extensions.properties</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/listeners.html">listeners.xml</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/spam.html">Anti-Spam setup</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/collecting-contacts.html">Contact collection</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/collecting-events.html">Event collection</a>
</li>
<li class="nav-item" data-depth="5">
<a class="nav-link" href="../servers/distributed/configure/dsn.html">ESMTP DSN support</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/distributed/operate/index.html">Operate</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/guide.html">Operator guide</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/logging.html">Logging</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/webadmin.html">WebAdmin REST administration API</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/metrics.html">Metrics</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/migrating.html">Migrating existing data</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/cli.html">Command Line Interface</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/operate/cassandra-migration.html">Cassandra migration</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../servers/distributed/extending/index.html">Extending server behavior</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/extending/mail-processing.html">Custom mail processing components</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/extending/smtp-hooks.html">Custom SMTP hooks</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../servers/distributed/extending/webadmin-routes.html">Custom WebAdmin routes</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../servers/test.html">Test</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../customization/index.html">Customization</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../development/index.html">Developer Guide</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="index.html">Community</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="mailing-lists.html">Mailing lists</a>
</li>
<li class="nav-item is-current-page" data-depth="2">
<a class="nav-link" href="contributing.html">Contributing</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="guidelines.html">Guidelines</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="download.html">Download releases</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="website.html">Building and publishing the website</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="release.html">Creating an official Apache James release</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="support.html">Professional support</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<span class="nav-text">Apache Software Foundation</span>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/">ASF</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/foundation/getinvolved.html">Get involved</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/foundation/faq.html">FAQ</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/licenses/">Licenses</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/security/">Security</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Apache James Server</span>
<span class="version">3.6.0 Snapshot</span>
</div>
<ul class="components">
<li class="component">
<div class="title"><a href="../../../james-distributed-app/3.8.1/index.html">Apache James Distributed Server</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-distributed-app/3.8.1/index.html">3.8.1 SNAPSHOT</a>
</li>
</ul>
</li>
<li class="component is-current">
<div class="title"><a href="../../3.8.1/index.html">Apache James Server</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../3.8.1/index.html">3.8.1 SNAPSHOT</a>
</li>
<li class="version is-current">
<a href="../index.html">3.6.0 Snapshot</a>
</li>
</ul>
</li>
<li class="component">
<div class="title"><a href="../../../james-site/latest/index.html">Apache James Site</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-site/latest/index.html">latest</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</div>
<main class="article">
<div class="toolbar" role="navigation">
<button class="nav-toggle"></button>
<a href="../../../james-site/latest/homepage.html" class="home-link"></a>
<nav class="breadcrumbs" aria-label="breadcrumbs">
<ul>
<li><a href="../index.html">Apache James Server</a></li>
<li><a href="index.html">Community</a></li>
<li><a href="contributing.html">Contributing</a></li>
</ul>
</nav>
<div class="page-versions">
<button class="version-menu-toggle" title="Show other versions of page">3.6.0 Snapshot</button>
<div class="version-menu">
<a class="version" href="../../3.8.1/community/contributing.html">3.8.1 SNAPSHOT</a>
<a class="version is-current" href="contributing.html">3.6.0 Snapshot</a>
</div>
</div>
<div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/james-project-3.6.0/docs/modules/community/pages/contributing.adoc">Edit this Page</a></div>
</div>
<div class="content">
<aside class="toc sidebar" data-title="Contents" data-levels="2">
<div class="toc-menu"></div>
</aside>
<article class="doc">
<h1 class="page">Contributing</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This document defines the different ways available for contributing to the Apache James project.</p>
</div>
<div class="paragraph">
<p>To keep you informed on James issues, subscribe to the relevant <a href="mailing-lists.html" class="xref page">mailing lists</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_be_involved_in_the_community"><a class="anchor" href="#_be_involved_in_the_community"></a>Be involved in the community</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An easy start is to be involved in the community.</p>
</div>
<div class="paragraph">
<p>Share your experiences with James, your needs, your enhancements proposition via the
<a href="mailing-lists.html" class="xref page">mailing lists</a>, on <a href="https://gitter.im/apache/james-project">Gitter</a>, or on our
<a href="https://issues.apache.org/jira/projects/JAMES/issues">Bug Tracker</a>.</p>
</div>
<div class="paragraph">
<p>Don&#8217;t hesitate to write articles and blog posts. Use your preferred media to spread the love!</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_reporting_bugs"><a class="anchor" href="#_reporting_bugs"></a>Reporting bugs</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Many improvements come as a direct result of bug reports.</p>
</div>
<div class="paragraph">
<p>To report a bug, please use the appropriate Bug Tracker JIRA link according to the project you want to address:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.apache.org/jira/browse/JAMES">Server</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/MAILET">Mailet</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/MAILBOX">Mailbox</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/PROTOCOLS">Protocols</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/MPT">MPT</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/MIME4J">Mime4j</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/JSIEVE">jSieve</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/JSPF">jSPF</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/JDKIM">jDKIM</a></p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/HUPA">Hupa</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Once you are logged on the appropriate JIRA page, click on the red Create button, then complete the different fields
as accurately as possible, so that any user can reproduce the reported bug. Also note that all your information must be
readable (use markdown).</p>
</div>
<div class="paragraph">
<p>Then, you have to click on Create to submit your bug.</p>
</div>
<div class="sect2">
<h3 id="_reporting_security_vulnerabilities"><a class="anchor" href="#_reporting_security_vulnerabilities"></a>Reporting security vulnerabilities</h3>
<div class="paragraph">
<p><a href="http://www.apache.org/security/">Security vulnerabilities</a> should be announced to the Apache Security team.
PMCs will be notified about them, and will work hard to propose fixes as fast as possible.</p>
</div>
<div class="paragraph">
<p>Specific details about security in James can be found here.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_documentation"><a class="anchor" href="#_documentation"></a>Documentation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Documentation is an easy way to get on board! Check out the
<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20documentation%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">~documentation</a>
label on JIRA to get some ideas.
Report on JIRA the typos you spot, the information you miss, and any improvement you can think of.
The next step is to contribute the documentation changes via <a href="https://github.com/apache/james-project/tree/master/docs/modules">Git</a>.</p>
</div>
<div class="paragraph">
<p>To edit an existing document try to edit the adoc version in <code>docs/modules</code> (check it out from Git) and if you can, submit a
patch as for <a href="#_code_patches">Code Patches</a>.</p>
</div>
<div class="paragraph">
<p>If you want to contribute new files please try to use the AsciiDoc format as shown in <code>docs/modules</code>.</p>
</div>
<div class="paragraph">
<p>If all this seems like unnecessary nonsense, send us whatever you like, we&#8217;d still be happy to receive good documentation.</p>
</div>
<div class="paragraph">
<p>Each of the Apache James projects has its own documentation maintained with the automated build. Once a build is done,
the documentation can be further committed in the <a href="https://git-wip-us.apache.org/repos/asf/james-site.git">site module</a>
which will be automatically published via gitpubsub to <a href="http://james.apache.org">Apache James web site</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_how_to_contribute_some_code"><a class="anchor" href="#_how_to_contribute_some_code"></a>How to contribute some code?</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Clone the source code of the project from its <a href="git://git.apache.org/james-project.git">apache git repository</a> or its
<a href="https://github.com/apache/james-project">Github</a></p>
</li>
<li>
<p>Create your branch and name it with the JIRA ticket number.</p>
</li>
<li>
<p>Create a Pull Request with your branch name and prefix its different commits with the same name.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Alternatively you can create a patch as <a href="#_code_patches">outlined below</a>, and attach it to the JIRA ticket.</p>
</div>
<div class="paragraph">
<p>A valid commit comment might be:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">JAMES-2285 My awesome commit title
Here is some more details about what my commit does, and the rationals of the choice I took.</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="_licenses"><a class="anchor" href="#_licenses"></a>Licenses</h3>
<div class="paragraph">
<p>All contributions to the James project are made under the <a href="https://www.apache.org/licenses">Apache license 2.0</a></p>
</div>
</div>
<div class="sect2">
<h3 id="_contributions_proposals"><a class="anchor" href="#_contributions_proposals"></a>Contributions proposals</h3>
<div class="ulist">
<ul>
<li>
<p>We reference some easy tasks to start with:
<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20newbie%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">~newbie</a></p>
</li>
<li>
<p>We have a collection of minor fixes awaiting contributions:
<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20easyfix%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">~easyfix</a></p>
</li>
<li>
<p>Challenge yourself with some cool features we thought to:
<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20feature%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">~feature</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Additional ideas are more than welcome. Don&#8217;t hesitate to discuss that with us!</p>
</div>
</div>
<div class="sect2">
<h3 id="_coding_standards"><a class="anchor" href="#_coding_standards"></a>Coding standards</h3>
<div class="paragraph">
<p>While we are glad to accept contributions to documentation from anyone, in almost any format, because its much better
than none, please consider these guidelines to help us to assimilate your contribution.</p>
</div>
<div class="paragraph">
<p>Submissions to the James project must follow the coding conventions outlined in this document. James developers are
asked to follow coding conventions already present in the code. (For example, if the existing code has the bracket on
the same line as the if statement, then all subsequent code should also follow that convention.) Anything not explicitly
mentioned in this document should adhere to the official
<a href="https://www.oracle.com/java/technologies/javase/codeconventions-contents.html">Java Coding Conventions</a>.</p>
</div>
<div class="paragraph">
<p><strong>Developers who commit code that does not follow the coding conventions outlined in this document will be responsible
for fixing their own code.</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Your code should pass our <a href="https://github.com/apache/james-project/blob/master/checkstyle.xml">checkstyle</a> which runs
upon <code>mvn compile</code> and all phases which depend on <code>compile</code>.</p>
</li>
<li>
<p>Extra spaces between parentheses are not allowed:</p>
</li>
</ol>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs"> if (foo) &gt; Good
or
if ( foo ) &gt; Bad</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic" start="3">
<li>
<p>Four spaces. <strong>No tabs.</strong> Period.
The James mailing list receives commit messages that are almost impossible to read if tabs are used.</p>
</li>
<li>
<p>Use Unix linefeeds for all .java source code files. Only platform-specific files (e.g. .bat files for Windows) should
contain non-Unix linefeeds.</p>
</li>
<li>
<p>Javadoc <strong>MUST</strong> exist on all API methods. Contributing a missing javadoc for any method, class, variable, etc., will be
GREATLY appreciated as this will help to improve the James project.</p>
</li>
<li>
<p>The standard Apache license header <strong>MUST</strong> be placed at the top of every file.</p>
</li>
<li>
<p>Your change set <strong>MUST</strong> be covered by tests. We also strongly appreciate integration tests.</p>
</li>
<li>
<p>We also require the following best practice regarding maven and the <strong>pom.xml</strong>:</p>
<div class="ulist">
<ul>
<li>
<p>Define your dependency versions in james-project pom.xml. This structurally ensures all projects get the same v
ersion, and that there is no version clashes.</p>
</li>
<li>
<p>Don&#8217;t use <em>org.apache.james</em> groupId for internal dependencies. Use <em>${james.groupId}</em>. If not, you break the policies
for automatic sorting, as well as make it more ambiguous. One exception is apache-mime4j-* artifacts which share the
james groupId despite living in a different repository.</p>
</li>
<li>
<p>You should be ordering your dependencies. The sort order of tags and dependencies in the pom is automatically enforced at build time. By default the build
will fail if violations are detected.</p>
</li>
</ul>
</div>
</li>
</ol>
</div>
<div class="paragraph">
<p>The pom file ordering can be quickly checked using :</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">mvn validate</code></pre>
</div>
</div>
<div class="paragraph">
<p>If you get an error and want the tool to fix it for you, you can use :</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">mvn validate -PsortPom</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>sortPom</code> profile can be used on all maven phases. Make sure to review the changes made by the tool, it is known to
sometimes remove whitespaces which may not be desirable.</p>
</div>
</div>
<div class="sect2">
<h3 id="_code_patches"><a class="anchor" href="#_code_patches"></a>Code patches</h3>
<div class="paragraph">
<p>Patches should be attached to the corresponding JIRA issue.</p>
</div>
<div class="paragraph">
<p>Always use diff -u to generate patches, so we can apply them using 'patch'.</p>
</div>
<div class="paragraph">
<p>Make sure the patch only contains what is intended, your checkout could be outdated.</p>
</div>
<div class="paragraph">
<p>Make sure it conforms to the code standards, otherwise it may be ignored. It is OK to make a single patch covering
several files, but please only one issue at a time.</p>
</div>
<div class="paragraph">
<p>Briefly outline the reason for your patch, the solution your patch implements, why a patch is needed and why your code
will solve the problem. Note any bug numbers your patch addresses.</p>
</div>
<div class="paragraph">
<p>The reason for these rules is so that committers can easily see what you are trying to achieve, it is their
responsibility to manage the code and review submissions, if you make it easy for them to see what you are doing your
patch is more likely to be committed quickly.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_idea_or_design_proposals"><a class="anchor" href="#_idea_or_design_proposals"></a>Idea or design proposals</h2>
<div class="sectionbody">
<div class="paragraph">
<p>People can submit ideas, features or design changes proposals by discussing it through the
<a href="mailing-lists.html" class="xref page">mailing lists</a> and/or submitting an ADR (Architecture Decision Record). A discussion
on the mailing list getting a consensus of the community can be the object of the writing of an ADR to confirm the
change agreed upon.</p>
</div>
<div class="paragraph">
<p>ADRs <strong>MUST</strong> be submitted under the folder <code>src/adr</code> via a pull request. The standards used for writing an ADR are
described in the <a href="https://github.com/apache/james-project/blob/master/src/adr/0001-record-architecture-decisions.md">first ADR</a>
written for the Apache James project.</p>
</div>
<div class="paragraph">
<p>The number of the ADR should be incremental. If an other ADR gets merged concurrently, the committer is responsible for
updating its number accordingly.</p>
</div>
<div class="paragraph">
<p>When the ADR reaches a consensus within the community and is accepted, it can be merged and goes into effect.</p>
</div>
<div class="paragraph">
<p>An ADR can&#8217;t be removed after being accepted and merged. However, a new ADR can supersede a previous one. This is so
we are able to keep track on all the decisions being made regarding the project.</p>
</div>
</div>
</div>
</article>
</div>
</main>
</div>
<footer class="footer">
<p>This page was built using the Antora default UI.</p>
<p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
</footer>
<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
<script async src="../../../_/js/vendor/highlight.js"></script>
</body>
</html>