<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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.    
-->
<document>
  <properties>
    <title>Overview</title>
    <author email="server-dev@james.apache.org">James jSPF Project Team</author>
  </properties>
  <body>
    <section name="What is it?">
      <p>
        The jSPF library is pure Java SPF implementation. It was designed to match the current
        SPF-Specs of 2006-2009 (See RFC section). SPF is also knows as Sender Policy Framework.     
        It was designed to detect email spoofing.This is the solution if you ever was tired
        of getting spam from yourself. For more informations see 
        <a href="http://www.openspf.org"> openspf website</a>.
      </p>
    </section>
    <section name="News">
      
    <subsection name="2010">
     
      <h4>Jun/2010 - jSPF-0.9.8 released</h4>
      <p>The JAMES Developer Team is proud to announce the <a href="../download.cgi">availability</a> release of APACHE jSPF-0.9.8. This release includes fixes for correct handling of TXT record escapings and pass the fc4408-tests-2009.10 testsuite. 
      </p>
    </subsection> 
    
    <subsection name="2009">
     
      <h4>Jun/2009 - jSPF-0.9.7 released</h4>
      <p>After 1 year we are proud to announce the <a href="../download.cgi">availability</a> release of APACHE jSPF-0.9.7. This release includes fixes for correct handling of $ signs in the local-part of emailaddresses and quotes in SPF-Records. 
         It also includes a new version of dnsjnio which fixes some race-condition when using the async mode of jSPF.
      </p>
    </subsection> 
    
    <subsection name="2008">
     
     <h4>Apr/2008 - jSPF-0.9.6 released</h4>
      <p>We are proud to announce the <a href="../download.cgi">availability</a> release of APACHE jSPF-0.9.6. This release fix two possible NullPointerExceptions and handle the "exp=" modifier correctly.</p>
    
    </subsection>
    
    <subsection name="2007">
  
      <h4>Sept/2007 - jSPF-0.9.5 released</h4>
      <p>We are proud to announce the <a href="../downloadunstable.cgi">availability</a> release of APACHE jSPF-0.9.5. This release spots an initial support for asynchronous processing and is fully <a href="http://www.openspf.org">RFC4408</a> compliant.</p>

      <h4>Feb/2007 - jSPF-0.9b4 released</h4>
      <p>After some more work was done, we proud to announce the <a href="../downloadunstable.cgi">release</a> 
      of jSPF-0.9b4. 0.9b4 correctly supports SPF DNS record type (previously we only supported TXT record type) and 
      introduce support for spf extension policies like fallback, override, trusted forwarder.</p>

    </subsection>
    
    <subsection name="2006">

      <h4>Sep/2006 - jSPF-0.9b3 released</h4>
      <p>0.9b3 introduces YAML based unit tests to check RFC compliance and a couple of minor fixes.</p>

      <h4>Jul/2006 - First public release of jSPF</h4>
      <p>After a fully rewrite of spf-java we finally release jSPF.</p>

    </subsection>
    </section>
    
    <section name="releases">
      <p>
        <b>Latest: jSPF v0.9.5</b>
        <br/>
jSPF v0.9.5 is the current release.
Both <a href="../downloadunstable.cgi">binary and source</a> distributions are available.</p>
      <p>This release passes all YAML tests published by openspf.org (still under development). So it should be fully RFC4408 compliant.</p>
      <!-- 
      <p>
        <b>Get your hands on the latest versions..</b>
        <br/>We put significant milestones, and potential release candidates in the <a href="http://www.apache.org/dist/james/jspf">download area.</a>
        <br/>Whilst the quality of these versions cannot be guaranteed they may contain important bug fixes and cool new features.<br/>
      </p>
       -->
    </section>
  </body>
</document>