---
layout: default
---
<!--
    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.
-->
<div id="wrapper" class="post-page">

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

  <!-- Main -->
    <div id="main">
      <section id="posts" class="main">
        <h1><span class="icon fa-newspaper-o"></span> Apache James Posts</h1>
        <br/>
        <ul>
            {% for post in site.posts %}
              <li class="post-template">
                <span class="icon fa-lg fa-file-text-o"></span>
                <span class="details">
                  <a href="{{ post.url }}" alt="{{ post.title }}"><b>{{ post.title }} - {{ post.date | date: '%B %d, %Y' }}</b><small>{{ post.excerpt }}</small></a>
                </span>
              </li>
            {% endfor %}
        </ul>
        <footer class="major">
          <ul class="actions align-center">
            <li><a href="index.html" class="button">go back to homepage</a></li>
          </ul>
        </footer>
      </section>
    </div>
    <footer id="footer" class="major">
      <section>
        <h2>James</h2>
        <ul class="no-padding">
          <li class="no-padding"><a href="index.html#intro" class="active">About</a></li>
          <li class="no-padding"><a href="index.html#first">Get Started</a></li>
          <li class="no-padding"><a href="index.html#posts">Last Posts</a></li>
          <li class="no-padding"><a href="index.html#second">Community</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="http://twitter.com/ApacheJames" class="icon fa-twitter alt"><span class="label">Twitter</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="http://james.apache.org/mail.html" class="icon fa-envelope-o alt"><span class="label">Mailing-list</span></a></li>
        </ul>
      </section>
      <section>
        <h2>Copyright</h2>
        <a href="http://www.apache.org/">Apache Licence Copyright</a><br/>
        &copy;Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>
      </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>
<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
<script src="assets/js/main.js"></script>
