<!--
    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.
-->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>Apache James</title>

        <link rel="stylesheet" type="text/css" href="/assets/css/main.css">
        <link rel="stylesheet" type="text/css" href="/assets/css/font-awesome.min.css">
        <link rel="stylesheet" type="text/css" href="/assets/css/ie8.css">
        <link rel="stylesheet" type="text/css" href="/assets/css/ie9.css">
        <link rel="shortcut icon" href="/images/james-logo.png">
    </head>
<body>
    <!--
    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.
-->
<link href="assets/css/lightbox.css" rel="stylesheet">
<link href="assets/css/lity.min.css" rel="stylesheet" />
<div id="wrapper">
  <div class="apache_ref">
    <a href="https://www.apache.org" alt="apache foundation link"><img src="https://www.apache.org/foundation/press/kit/asf_logo.svg" title="apache foundation logo"/></a>
  </div>
  <div class="apache_ref_mobile">
    <a href="https://www.apache.org" alt="apache foundation link">The Apache Software Foundation</a>
  </div>
  <div class="apache_ref_left">
    <a href="https://www.apache.org/events/current-event.html" alt="apache foundation event"><img src="https://www.apache.org/events/current-event-234x60.png" title="apache foundation event logo"/></a>
  </div>
  <div class="apache_ref_left_mobile">
    <a href="https://www.apache.org/events/current-event.html" alt="apache foundation event"><img src="https://www.apache.org/events/current-event-234x60.png" title="apache foundation event logo"/></a>
  </div>

  <!-- Header -->
    <header id="header" class="alt">
      <div class="logo"><a href="/index.html" alt="Apache James"><img src="/images/james.svg" alt="james logo"/></a></div>
      <h1 class="hidden">James Enterprise Mail Server</h1>
      <h2>Emails at the heart of your business logic</h2>
    </header>

  <!-- Nav -->
    <nav id="nav">
      <ul>
        <li class="logo_li"><span class="logo"><img src="images/james-alt.svg" alt="james logo" /></span></li>
        <li><a href="#intro" class="active">About</a></li>
        <li><a href="#first">Get Started</a></li>
        <li><a href="#roadmap">Roadmap</a></li>
        <li><a href="#posts">Last Posts</a></li>
        <li><a href="#second">Community</a></li>
        <li><a href="documentation.html"><span class="fa fa-external-link"></span> Documentation</a></li>
        <li><a href="download.cgi"><span class="fa fa-external-link"></span> Downloads</a></li>
      </ul>
    </nav>

  <!-- Main -->
    <div id="main">

      <!-- Introduction -->
        <section id="intro" class="main special">
          <div class="">
            <div class="content">
              <header class="major">
                <h2>About</h2>
              </header>
              <p class="align-left">James stands for <b>Java Apache Mail Enterprise Server!</b><br/>
                It has a modular architecture based on a rich set of <b>modern</b> and <b>efficient</b> components which provides at the end <b>complete, stable, secure and extendable Mail Servers running on the JVM</b>.
              </p>
              <p class="align-left">Create your <b>own personal solution</b> of emails treatment by assembling the components you need thanks to the Inversion of Control mail platform offered and  go further customizing filtering and routing rules using <b>James Mailet Container</b>.</p>
              <div class="about-table">
                <h3 class="tb-h3">James from a technical point of view</h3>
                <b>Complete portability</b> (100% pure JVM: Java &amp; Scala)<br/>
                <b>Built with Java 11</b> and running on the <b>Java RE 11</b>.<br/><br/>
                <b>James Components:</b><br/>
                - <b>Emailing protocols:</b> SMTP, LMTP, POP3, IMAP, ManageSieve, JMAP<br/>
                - <b>Mailet container:</b> independent, extensible and pluggable email processing agents<br/>
                - <b>Storage API:</b> Mailbox API / Search API / User API<br/>
                - <b>Storage Implementations:</b> Cassandra / PostgreSQL / HSQLDB / MySQL / OpenSearch...<br/>
                - <b>Administration:</b> JMX / REST / Command Line<br/>
                - <b>James Core</b>
              </div>
              <p class="align-left"><br/><br/>Your James server <b>can also be used as Mail Transfer Agent</b>, by enabling only <b>SMTP</b> or as a <b>IMAP</b> Mail Delivery Agent.</p>
              <a href="images/james-general-architecture.png" data-lightbox="james-schema" data-title="James General architecture" alt="James General architecture" class="james-schema" ><span class="fa fa-sitemap"></span>james general architecture<span class="fa fa-long-arrow-right"></span></a>
              <a href="images/james-smtp-relay.png" data-lightbox="james-schema" data-title="James SMTP relay" alt="James SMTP relay" class="james-schema"><span class="fa fa-sitemap"></span>using james as smtp relay<span class="fa fa-long-arrow-right"></span></a>
              <a href="images/james-imap-server.png" data-lightbox="james-schema" data-title="James IMAP server" alt="James IMAP server" class="james-schema"><span class="fa fa-sitemap"></span>using james as an imap server<span class="fa fa-long-arrow-right"></span></a><br/><br/>

              <a href="howTo/index.html" data-title="How To" alt="How To" class="james-schema">
                <span class="fa fa-sitemap"></span>Click here to see how-tos for some James features<span class="fa fa-long-arrow-right"></span>
              </a>

              <h2 class="big-h2"><span class="fa fa-wrench"></span> <span>James is a <b>living Open Source project</b> (all developments and implementations are based on open technical standards), any function which is not already available from <b>can be developed!</b></span></h2>
            </div>
          </div>
        </section>

      <!-- First Section -->
        <section id="first" class="main">
          <header class="major">
            <h2>Get Started With James</h2>
            <h3>Get Started With the official binaries </h3>
          </header>
          <section>
            <ul class="james-ul no-padding">
              <li class="post-template"><span class="long-arrow-right">&#8594;</span><span><b>DOWNLOADS:</b><br>
                The Apache James project wires together the different libraries composing James to provide a running services,
                ready to download on the Apache mirrors. See
                <a href="download.cgi">our download page</a>.<br/><br/>
                Follow <a href="server/install.html">our installation guide</a>.
              </span></li>
            </ul>
          </section>
          <section id="first_docker" class="main">
            <header class="major">
              <h3>Get Started With James And Docker</h3>
            </header>
            <ul class="james-ul no-padding">
              <li class="post-template"><span class="long-arrow-right">&#8594;</span><span><b>
WHAT WILL YOU TRY:</b><br>
              <span>Here you will try James server version 3.8.1 thanks to an image. This James image has a default configuration
                using JPA (hsqldb) and Lucene. It also includes a default domain named james.local and three default users:
                user01@james.local, user02@james.local, user03@james.local, with their default password being <i>1234</i>.<br>
                <i>Note: this James server will respond to IMAPS port 993 and SMTPS port 465.</i></span></span>
              </li>
              <li class="post-template"><span class="long-arrow-right">&#8594;</span><span><b>STEPS YOU HAVE TO FOLLOW:</b><br>
                Pull and run the James image with the following single command:<br><br>
                <code class="highlighter-rouge">docker run -p "465:465" -p "993:993" apache/james:demo-3.8.1</code>

                <br><br>
                Then, connect this image with for instance, Thunderbird. This <a href="howTo/imap-server.html">tutorial</a> covers more in depth user and domain creation,
                as well as thunderbird setup.<br></span>
              </li>
              <li class="post-template"><span class="long-arrow-right">&#8594;</span><span><b>ALTERNATIVES:</b><br>
                Instructions that do not imply docker are also available <a href="/server/install.html">here</a>.
              </span>
              </li>
              <li class="post-template"><span class="long-arrow-right">&#8594;</span><span><b>BETA:</b> Distributed James server<br>
                Recent work of the Apache James project did lead to a James product that leverages a distributed mail server,
                using storage technologies like <a href="https://cassandra.apache.org/">Cassandra</a>,
                  <a href="https://opensearch.org/">OpenSearch</a>, <a href="https://www.rabbitmq.com/">RabbitMQ</a>, and
                <a href="https://wiki.openstack.org/wiki/Swift">objectStorage (S3/Swift)</a>.<br/><br/>
                Feedback on this product, announced as a beta since 3.5.0 is welcome.<br/><br/>
                This product can be executed via <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docker-compose.yml">
                docker-compose</a> or you can follow its<a href="/server/install/guice-cassandra-rabbitmq-swift.html"> standard
                installation guide</a>
              </span></li>
            </ul>
          </section>
        </section>

      <!-- Roadmap -->
        <section id="roadmap" class="main">
          <header class="major">
            <h2>Roadmap</h2>
          </header>
          <section>
            <ul class="james-ul">
              <li class="post-template"><span><b>MAIN GOALS</b><br>
                <ul>
                  <li><span class="long-arrow-right">&#8594;</span>Providing a <b>distributed mail server</b>,
                    fully horizontally scalable.</li>
                  <li><span class="long-arrow-right">&#8594;</span><span>Maintaining a <b>standalone version</b>
                    suitable for a single server, based on <b>JPA</b>.</span></li>
                </ul>
              </li>
              <li class="post-template"><span><b>INCOMING WORK</b><br>
                <ul>
                  <li><span class="long-arrow-right">&#8594;</span><span>Rework our documentation with <a href="https://antora.org/">Antora</a>,
                    specify it on a per-server basis for ease of use. <a href="https://james.staged.apache.org/james-project/3.8.1/servers/index.html">Preview</a>...<br/>
                    We will furthermore target servers to identified use cases, formulated in non technical terms: Basic Server, Advanced Server and Distributed Server.<br/></span></li>
                  <li><span class="long-arrow-right">&#8594;</span><span>Promote guice based applications.<br/>
                    Spring server will be deprecated. A summary of community call describing this item can be found
                    <a href="https://www.mail-archive.com/server-dev@james.apache.org/msg67212.html">here</a>.<br/><br/>
                    Guice adoption schedule:
                    <ol>
                      <li>Promote Guice artifacts on the download page as part of <code>3.7.0</code></li>
                      <li>Deprecate Spring artifact as part of <code>3.8.0</code></li>
                      <li>Remove Spring artifact as part of <code>4.0.0</code></li>
                    </ol></span></li>
                  <li><span class="long-arrow-right">&#8594;</span><span>Continue improving <b>JMAP
                    <a href="https://datatracker.ietf.org/doc/html/rfc8621">RFC-8621</a></b> support. See this
                    <a href="https://issues.apache.org/jira/browse/JAMES-2884">JIRA</a> for some further possible
                    developments</span></li>

                  <li><span class="long-arrow-right">&#8594;</span><span>Feel free to add your own items here:
                    see <a href="#third">Contribute</a>.</span></li>

                </ul>
              </span>
              </li>
            </ul>
          </section>
        </section>

    <!-- Last Posts -->
      <section id="posts" class="main">
        <header class="major">
          <h2>Last Posts</h2>
        </header>
        <section>
          <ul class="no-padding">
            
              <li class="post-template">
                <span class="icon fa-file-text-o"></span>
                <span class="details">
                  <a href="/james/update/2024/03/05/mime4j-0.8.11.html" alt="Apache James MIME4J 0.8.11"><b>Apache James MIME4J 0.8.11 - March 05, 2024</b><br><small><p>The Apache James developers are pleased to announce the 0.8.11 release of the MIME4J library.</p>
</small></a>
                </span>
              </li>
            
              <li class="post-template">
                <span class="icon fa-file-text-o"></span>
                <span class="details">
                  <a href="/james/update/2024/01/09/james-3.8.1.html" alt="Apache James Server 3.8.1"><b>Apache James Server 3.8.1 - January 09, 2024</b><br><small><p>The Apache James developers are pleased to announce James server 3.8.1 release.</p>
</small></a>
                </span>
              </li>
            
          </ul>
        </section>
        <footer>
          <ul class="actions">
            <li><a href="posts.html" class="button">READ MORE POSTS</a></li>
          </ul>
        </footer>
      </section>

      <!-- Second Section -->
        <section id="second" class="main">
          <header class="major">
            <h2>Community </h2>
          </header>
          <section>
            <p class="align-left">
            Apache James Project is  an Open Source all-volunteer project obtaining its strength from its Community made of developers and users. All are welcome to the Community!<br>
            That way, we recommend that Users, Developers, Curious and Fans join the James Community.</p>
            <ul class="no-padding no-margin">
              <li class="post-template center-icon">
                <a href="https://james.apache.org/mail.html" alt="mailing list james"><span class="icon fa-envelope"></span></a>
                <span class="details">
                  <b>Mailing list:</b>
                  <br/>Subscribe to the appropriate <a href="https://james.apache.org/mail.html" class="comm" alt="mailing lists">Mailing Lists</a> according to your interests and your profile.<br/> <a href="https://james.apache.org/mail.html#Guidelines" class="comm" alt="mail guideline">Mail guidelines</a> explain you more precisely how it works.
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://james.apache.org/mail.html" alt="Gitter chat room"><span class="icon fa-wechat"></span></a>
                <span class="details">
                  <b>Gitter chat room:</b>
                  <br/>Chat in live with the community on <a href="https://gitter.im/apache/james-project" class="comm" alt="Gitter chat room">Gitter chat room</a>.
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://twitter.com/ApacheJames" alt="twitter account"><span class="icon fa-twitter"></span></a>
                <span class="details">
                  <b>Twitter:</b>
                  <br/>Express yourself and follow us <a href="https://twitter.com/ApacheJames" class="comm" alt="twitter account">@ApacheJames</a>.
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://james.apache.org/download.cgi" alt="Downloads"><span class="icon fa-cloud-download "></span></a>
                <span class="details">
                  <b>Download Apache James releases:</b>
                  <br/>Our <a href="https://james.apache.org/download.cgi">download page</a> allows you to download artifacts and sources for the James Server and James libraries.
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://james.apache.org/support.html" alt="Professional support"><span class="icon fa-briefcase"></span></a>
                <span class="details">
                  <b>Professional support:</b>
                  <br/>Find a list of companies which can provide you some <a href="https://james.apache.org/support.html" class="comm" alt="Professional support">
                  support on James</a>.
                </span>
              </li>
            </ul>
          </section>
        </section>
       <section id="third" class="main">
          <header class="major">
            <h2>Contribute </h2>
          </header>
          <section>
            <p class="align-left">
              James is a project that lives from the contributions of its community.<br/>
              <b>Anyone can contribute!</b> That's right, we always want to hear from people with contributions to the code, the documentation, the website, and bug reports.
              We more than welcome non-coding contributions.<br>
              Here are different ways to contribute:
            </p>
            <ul class="no-padding no-margin">
              <li class="post-template center-icon">
                <a href="https://www.apache.org/licenses/"><span class="icon fa-copyright "></span></a>
                <span class="details">
                  <b>Licenses:</b>
                  <br/>All contributions to the James project are made under the <a class="comm" alt="License" href="https://www.apache.org/licenses/">Apache license 2.0</a>
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://james.apache.org/mail.html"><span class="icon fa-bullhorn "></span></a>
                <span class="details">
                  <b>Join the community:</b>
                  <br/>We more than welcome <b>articles</b> and <b>blog posts</b> about James.<br/>
                  Contact us by <a href="https://james.apache.org/mail.html" class="comm" alt="mailing lists">email</a> or
                  on <a href="https://gitter.im/apache/james-project" class="comm" alt="Gitter chat room">Gitter</a> to share your experiences.
                  <br/>Don't hesitate to promote the Apache James project on your preferred medias.
                </span>
              </li>

                <li class="post-template center-icon">
                    <a href="https://issues.apache.org/jira/browse/JAMES/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel"><span class="icon fa-bug"></span></a>
                    <span class="details">
                  <b>Report bugs:</b>
                  <br/>You can here enter bug encountered, share your point of view about a specific feature or anything else... <br/>
                  Each subproject has its own bug tracker.
                  <a href="https://issues.apache.org/jira/browse/JAMES/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel" class="comm" alt="James Server bugtracker">Go to James Server project bugtracker</a>.<br/>
                  For other projects click on the appropriate links mentioned in the concerned subproject. Finally, create your issue.
                </span>
                </li>

              <li class="post-template center-icon">
                <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"><span class="icon fa-book "></span></a>
                <span class="details">
                  <b>Documentation:</b><br/>
                  Documentation is an easy way to get on board! <br/>
                  Check out the <a class="comm" alt="Documentation" 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.<br/>
                  Report on JIRA the typo you spots, the information you miss, and any improvement you can think to.<br/>
                  The next step is to contribute the documentation changes via <a class="comm" alt="The website on github"  href="https://github.com/apache/james-project/tree/master/src/site/xdoc">Git</a>.
                </span>
              </li>

              <li class="post-template center-icon">
                <a href="https://github.com/apache/james-project"><span class="icon fa-git"></span></a>
                <span class="details">
                  <b>How to contribute code changes:</b>
                  <br/>Read our sources from the <a href="git://git.apache.org/james-project.git" class="comm" alt="James Git sources">Apache Git</a>.<br/>
                  You can also come and interact with us on <a href="https://github.com/apache/james-project" class="comm" alt="James on GitHub">GitHub</a> and share your work by creating a pull request.<br/>
                  Alternatively, you can attach a <a  class="comm" alt="Patch" href="https://james.apache.org/contribute.html#Code_Patches">patch</a> to the JIRA issue.<br/>
                  After a review, and exchanges with you, an Apache James developer will integrate the changes once it matches our policies.
                </span>
              </li>

              <li class="post-template center-icon">
                <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" alt="contribute to the code"><span class="icon fa-cogs"></span></a>
                <span class="details">
                  <b>What contributions can you do:</b>
                  <br/>We reference some easy tasks to start with :
                  <a class="comm" alt="Newbie tasks" 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>
                  <br/> We have a collection of minor fixes awaiting contributions:
                  <a class="comm" alt="Easy fixes" 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>
                  <br/> Challenge yourself with some cool features we thought to:
                  <a class="comm" alt="Cool features" 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>
                  <br/>Additional ideas are more than welcome. Don't hesitate to discuss that with us!
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="https://www.apache.org/security/" alt="Report security vulnerabilities"><span class="icon fa-shield "></span></a>
                <span class="details">
                  <b>Reporting security vulnerabilities:</b><br/>

                  <a class="comm" alt="Security" href="https://www.apache.org/security/">Security</a>: Vulnerabilities should be announced to the Apache Security team.<br/>
                  PMCs will be notified about them, and will work hard to propose fixes as fast as possible.
                </span>
              </li>
              <li class="post-template center-icon">
                <a href="http://james.apache.org/contribute.html" alt="Additional information"><span class="icon fa-info-circle "></span></a>
                <span class="details">
                 <span class="details">
                   <b>Additional information:</b><br/>
                      The <a class="comm" alt="More details about contributing" href="http://james.apache.org/contribute.html">contribute</a> page contains more details about the various details exposed above.<br/>
                      To match the quality expectations of our community, we enforce <a class="comm" alt="Coding Standards" href="http://james.apache.org/contribute.html#Coding_Standards">coding standards</a>.
                      We rely on <a class="comm" alt="checkstyle" href="https://github.com/apache/james-project/blob/master/checkstyle.xml">checkstyle</a> for style checking.
                 </span>
                </span>
              </li>
            </ul>
          </section>
        </section>

      <section id="use-cases" class="main">
        <header class="major">
          <h2>James use-cases</h2>
        </header>
        <section>
          <div class="content">
            <a href="#openpaas" data-lity class="james-use-case-link">
              <span class="fa fa-server"></span><br/>
              Linagora<br/>
              OpenPaaS<br/>
              <span class="fa fa-long-arrow-right"></span></a>
          </div>

          <div id="openpaas" style="background:#fff" class="lity-hide">
              <div class="padding about-table james-use-case-content">
                <header class="major">
                  <h2><a href="https://open-paas.org/"><img src="/images/openpaas.png"></a></h2>
                </header>
                <p class="post-template">
                  At&nbsp;<a href="https://linagora.com/" class="comm">LINAGORA</a>, we chose JAMES as the Mail Delivery Agent of our&nbsp;
                  <a href="https://open-paas.org/" class="comm">OpenPaaS</a>&nbsp;product:</p>
                <ul class="james-ul">
                  <li class="james-use-case-li center-icon"><span class="icon fa-arrow-right"></span>For easy administration of email load balancing and high availability</li>
                  <li class="james-use-case-li center-icon"><span class="icon fa-arrow-right"></span>To allow email interactions with the platform</li>
                  <li class="james-use-case-li center-icon"><span class="icon fa-arrow-right"></span>To use the&nbsp;<a href="https://jmap.io/" class="comm">JMAP</a>&nbsp;protocol (the browser interacts directly with the mail server)</li>
                </ul>
                <p>Our deployment currently allows serving a hundred users over JMAP, SMTP and IMAP.</p>
              </div>
          </div>
        </section>
      </section>


        <section id="stats" class="main">
          <header class="major">
            <h2>Some statistics...</h2>
          </header>
          <section>
            <ul class="statistics" onclick="location.href='https://github.com/apache/james-project'" title="GitHub James Project">
              <li class="style1">
                <span class="icon fa-users"></span>
                <strong id="contributor-num"></strong> Contributors
              </li>
              <li class="style2">
                <span class="icon fa-file-code-o"></span>
                <strong id="commit-num"></strong> Last year commits
              </li>
              <li class="style3">
                <span class="icon fa-code-fork"></span>
                <strong id="fork-num"></strong> Forks
              </li>
              <li class="style4">
                <span class="icon fa-star-o"></span>
                <strong id="star-num"></strong> Stars
              </li>
            </ul>
            <header class="major">
              <h2>...and contributors</h2>
            </header>
            <ul class="no-padding align-center" id="contributor-list"></ul>
          </section>
      </section>
    </div>
    <footer id="footer" class="major">
      <section>
        <h2>James</h2>
        <ul class="no-padding">
          <li class="no-padding"><a href="#intro" class="active">About</a></li>
          <li class="no-padding"><a href="#first">Get Started</a></li>
          <li class="no-padding"><a href="#roadmap">Roadmap</a></li>
          <li class="no-padding"><a href="#posts">Last Posts</a></li>
          <li class="no-padding"><a href="#second">Community</a></li>
          <li class="no-padding"><a href="#third">Contribute</a></li>
          <li class="no-padding"><a href="documentation.html"><span class="fa fa-external-link"></span> Documentation</a></li>
        </ul>
      </section>
      <section>
        <h2>Connect</h2>
        <ul class="icons">
          <li><a href="https://james.apache.org/mail.html" class="icon fa-envelope-o alt"><span class="label">Mailing-list</span></a></li>
          <li><a href="https://gitter.im/apache/james-project" class="icon fa-wechat alt"><span class="label">Gitter</span></a></li>
          <li><a href="https://github.com/apache/james-project" class="icon fa-github alt"><span class="label">GitHub</span></a></li>
          <li><a href="https://twitter.com/ApacheJames" class="icon fa-twitter alt"><span class="label">Twitter</span></a></li>
          <li><a href="https://james.apache.org/support.html" class="icon fa-briefcase alt"><span class="label">Support</span></a></li>
          <li><a href="http://www.apache.org/events/current-event" class="icon fa-calendar alt"><span class="label">Apache Foundation events</span></a></li>
          </ul>
      </section>
      <section class="legal-section">
        <h2>Copyright</h2>
        Apache James and related projects are trademarks of the Apache Software Foundation.<br/>
        <a href="https://www.apache.org/">Copyright 2006-2018 The Apache Software Foundation. All Rights Reserved.</a><br/>
        <a href="https://www.apache.org/licenses/">License</a><br/>
        <a href="https://www.apache.org/foundation/sponsorship.html">Donate</a> to support the Apache Foundation<br/>
        <a href="https://www.apache.org/foundation/thanks.html">Thanks</a><br/>
        Design: <a href="https://html5up.net">HTML5 UP</a><br/>
        Thanks to <a href="http://www.neoma-interactive.com/">Neoma by Linagora</a> for the website design
      </section>
  </footer>
</div>

<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/skel.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/lightbox.js"></script>
<script src="assets/js/github-fetch.js"></script>
<script src="assets/js/lity.min.js"></script>
<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
<script src="assets/js/main.js"></script>


</body>
</html>
