<?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.
-->
<document>
  <properties>
    <title>Apache Commons Email Release Notes</title>
    <author email="epugh@STOPSPAMopensourceconnections.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="1.6.0" date="YYYY-MM-DD" description="Feature release (Java 8).">
      <action issue="EMAIL-190" type="update" due-to="sgoeschl">
        Fix broken JDK 9 build by updating "easymock" and other dependencies.
      </action>
      <!-- ADD -->
      <action type="add" due-to="Dependabot" dev="ggregory">
        Add github/codeql-action #75.
      </action>
      <action type="add" due-to="Gary Gregory" dev="ggregory">
        Add Maven plugin JapiCmp and remove Clirr.
      </action>
      <!-- UPDATE -->
      <action type="update" due-to="Dependabot, Gary Gregory" dev="ggregory">
        Bump actions/cache from 2 to 3.0.5 #39, #48, #60, #70.
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory">
        Bump actions/checkout from 1 to 3, #25 #33, #67.
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory, Gary Gregory">
        Bump actions/setup-java from 1.4.0 to v3 #30, #74.
      </action>
      <action issue="EMAIL-177" type="update" due-to="Gary Gregory">
        Bump from Java 6 to 7.
      </action>
      <action type="update" due-to="Gary Gregory">
        Bump from Java 7 to 8.
      </action>
      <action issue="EMAIL-183" type="update" due-to="Lukas Petrovicky, gitmotte, Dependabot, Gary Gregory">
        Bump javax.mail:1.6.1 to jakarta.mail:1.6.7.
      </action>
      <action issue="EMAIL-174" type="fix" due-to="Vegard Stuen">
        Bump javax.mail dependency to 1.6.1, so that i18n is supported for email addresses.
      </action>
      <action type="update" due-to="Gary Gregory" dev="ggregory">
        Bump commons-parent from 50 to 53.
      </action>
      <action type="update" due-to="Dependabot, Gary Gregory" dev="ggregory">
        Bump spotbugs-maven-plugin from 4.0.0 to 4.2.2 #18.
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory">
        Bump spotbugs from 4.0.6 to 4.2.2 #40.
      </action>
      <action type="update" due-to="Dependabot, Gary Gregory" dev="ggregory">
        Bump junit from 4.13 to 4.13.2 #32.
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory">
        Bump commons-release-plugin from 1.0 to 1.7 #23
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory">
        Bump maven-pmd-plugin from 3.13.0 to 3.17.0 #34, #72, #79.
      </action>
      <action type="update" due-to="Gary Gregory">
        Bump tests commons-io:commons-io 2.6 to 2.11.0.
      </action>
      <action type="update" due-to="Gary Gregory" dev="ggregory">
        Bump jacoco from 0.8.6 to 0.8.8; fixes jacoco on Java 17.
      </action>
      <action type="update" due-to="Gary Gregory" dev="ggregory">
        Bump org.easymock:easymock from 4.2 to 4.3.
      </action>
      <action type="update" due-to="Dependabot" dev="ggregory">
        Bump commons-release-plugin from 1.7 to 1.8.0 #73.
      </action>
    </release>
    <release version="1.5.1" date="2017-MM-DD" description="Maintenance release (Java 6).">
      <action issue="EMAIL-176" type="add" dev="pschumacher">Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility</action>
      <action type="fix" dev="sgoeschl" due-to="Alexander Lehmann">Email.setBounceAddress no longer accepts invalid email addresses.</action>
    </release>
    <release version="1.5" date="2017-08-01">
      <!-- N.B. AFAICT the date attribute is not used anywhere so no point in adding it -->
      <action dev="kinow" type="fix" issue="EMAIL-172" due-to="Thomas Grainger">
        Grammar error in comment
      </action>
      <action dev="sebb" type="fix" issue="EMAIL-169">
        MimeMessageUtils.writeMimeMessage writes stacktrace
      </action>
      <action dev="sebb" type="fix" issue="EMAIL-167" due-to="Lucian Burja">
        DataSourceClassPathResolver doesn't close InputStream when resolving resources
      </action>
      <action dev="sgoeschl" type="update" issue="EMAIL-165" date="2017-01-02">
        Upgrade to javax.mail-1.5.6
      </action>
      <action dev="sgoeschl" type="update" issue="EMAIL-161" date="2016-02-01">
        Remove "javax.activation" dependency since it is included in JDK 1.6 and update to javax.mail-1.5.5
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-160" date="2016-02-01">
        Add Support for International Domain Names. This change requires JDK 1.6+.
      </action>
      <action dev="ggregory" type="add" issue="EMAIL-154" date="2015-07-26" due-to="Ken Geis, Balachandran Sivakumar">
        Add Email#getHeader(String) and Email#getHeaders() methods.
      </action>
      <action dev="ggregory" type="fix">
        CVE-2017-9801 - stripped all line-breaks from subjects in
        order to prevent SMTP header injection.
      </action>
    </release>
    <release version="1.4" date="2015-05-23">
      <action dev="tn" type="fix" issue="EMAIL-149" date="2015-03-10" due-to="Richard DiCroce">
        "Email" threw an "EmailException" when trying to send the email if neither a from
        nor bounce address was specified, although a "mail.from" property was set in the
        mail session.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-151" date="2015-03-10" due-to="Andreas Kohn">
        "ImageHtmlEmail" failed to embed attachments if their data source name was null.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-147" date="2014-12-26" due-to="Can Eskikaya">
        Html emails did not have the correct content-type set when using the Apache Geronimo
        JavaMail implementation v1.8.x.
      </action>
      <action dev="tn" type="add" issue="EMAIL-146" date="2014-12-01" due-to="Alexander Lehmann">
        Added getter for the bounce address of an email to class Email.
      </action>
      <action dev="ggregory" type="update" issue="EMAIL-144" date="2014-10-15">
        Update Oracle JavaMail dependency from 1.4.5 to 1.5.2.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-142" date="2014-10-02" due-to="Marcin Tomiak">
        An "HtmlEmail" with both, an html and plain text content but no attachments or embedded
        images will now be created with mimetype "multipart/alternative" instead of "multipart/mixed".
      </action>
      <action dev="tn" type="add" issue="EMAIL-141" date="2014-09-14" due-to="Stephen Kruger">
        Added support for mapping of content-ids to DataSource in "MimeMessageParser".
      </action>
    </release>
    <release version="1.3.3" date="2014-07-12">
      <action dev="tn" type="fix" issue="EMAIL-140" date="2014-07-01" due-to="Gary Gregory">
        Fix test execution errors with Java 8.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-138" date="2014-05-06" due-to="qed">
        The filename of an attachment was not properly encoded in case it contained
        non-ascii characters.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-137" date="2014-04-30" due-to="Alex Kogan">
        MimeMessageParser did not correctly parse MimeMessage objects created by
        calling HtmlEmail.buildMimeMessage() and HtmlEmail.getMimeMessage().
      </action>
      <action dev="ggregory" type="fix" issue="EMAIL-136" date="2014-02-01" due-to="Ville Skyttä">
        Fix Javadoc 1.8 errors.
      </action>
    </release>
    <release version="1.3.2" date="2013-10-23">
      <action dev="tn" type="update" issue="EMAIL-135" date="2013-10-15" due-to="Andreas Kohn">
        Change visibility of DataSourceUrlResourceResolver.createUrl(String) to protected so
        that sub-classes can override it.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-104" date="2013-10-15" due-to="Hiroshi Ikeda">
        Support default mime charset property "mail.mime.charset" when adding text content
        to instances of either SimpleEmail or HtmlEmail.
      </action>
      <action dev="tn" type="add" issue="EMAIL-132" date="2013-10-10" due-to="Allen Xudong Cheng">
        Added support for sending partial emails in case of invalid addresses.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-131" date="2013-09-14" due-to="Raju Y">
        The MimeMessageParser will now correctly parse MIME multi-parts of type "text/plain"
        and "text/html" with a content disposition header of "attachment". The parts will
        be added to the list of attachments even if there is no other text or html content.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-127" date="2013-07-01" due-to="Dominik Stadler">
        Special characters in the body of an HTML email could lead to an exception when the
        mime message was built.
      </action>
    </release>
    <release version="1.3.1" date="2013-03-04">
      <action dev="tn" type="fix" issue="EMAIL-125" date="2013-02-22" due-to="Jean-Marc">
        DataSourceClassPathResolver will now correctly set the DataSource name for resolved
        resources. Additionally, it is now possible to set the name for a ByteArrayDataSource.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-124" date="2013-02-21" due-to="Stefan Schueffler">
        Header values are not folded twice anymore. The actual encoding and folding is
        now only performed in Email.buildMimeMessage().
      </action>
    </release>
    <release version="1.3" date="2013-01-10">
      <action dev="tn" type="fix" issue="EMAIL-101" date="2012-12-09" due-to="Andrew Starodub">
        Use the provided Content-ID in HtmlEmail#embed(File, String) instead of creating
        a random one. The used and returned Content-ID will be URL encoded (see RFC 2392).
      </action>
      <action dev="tn" type="fix" issue="EMAIL-122" date="2012-12-08" due-to="sebb">
        Upgraded source and binary compatibility to JDK 1.5. Additionally the public/protected
        methods and fields have been properly generified.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-103" date="2012-12-08" due-to="David Rees">
        Do not set the personal name of an address to the email address unless it is
        explicitly specified (affects TO, CC, BCC and FROM addresses).
      </action>
      <action dev="tn" type="add" issue="EMAIL-114" date="2012-12-02" due-to="Gokul Nanthakumar C">
        Added new methods addTo(String[]), addCc(String[]) and addBcc(String[]) to Email.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-117" date="2012-12-02" due-to="sebb">
        Removed emulation support for nested exceptions in EmailException.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-116" date="2012-11-10" due-to="sebb">
        Prevent external modification of internal array in DataSourceCompositeResolver.
      </action>
      <action dev="tn" type="fix" issue="EMAIL-120" date="2012-11-07" due-to="Mike Bell">
        Close temporary input stream in MultiPartEmail#attach(DataSource, String, String)
        to prevent locking of file resources on windows systems.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-105" date="2012-02-04" due-to="Siegfried Goeschl">
        The patch actually broke sending emails over a secured connection - disabled the
        "MAIL_SMTP_SSL_CHECKSERVERIDENTITY" and "MAIL_SMTP_SSL_ENABLE" activation. Tested
        the functionality using GMail, GMX and Office365 so the code is at least working for
        a couple of existing SMTP servers. Also added 'sslCheckServerIdentity' including
        setter and getter. Also added a chapter regarding "Security" to the user manual.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-113" date="2012-02-19" due-to="Peter Kofler">
        Maven Site fails with error in Checkstyle configuration.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-112" date="2012-02-19" due-to="Peter Kofler">
        DataSourceFileResolverTest fails under IBM JDK 1.4 and 1.6 running on Windows.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-111" date="2012-02-18" due-to="Florian Pirchner">
        Update the current trunk to be binary compatible with the commons-email-1.2 release.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-110" date="2012-02-18" due-to="Thomas Pummer">
        Added unit test to ensure that parsing the broken mime message does not cause an OutOfMemoryException.
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-108" date="2011-11-10" due-to="Elisabeth Kasimir, Alexander Kasimir">
        ImageHtmlEmail should support class path resources.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-107" date="2011-09-06" due-to="Claus Polanka, Michael Jakl">
        Added mime.types to META-INF - the definition is actually found in activation.jar
        but did not work.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-106" date="2011-09-06" due-to="Bruno Harbulot">
        STARTTLS can be used even without authenticator.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-105" date="2011-09-06" due-to="Bruno Harbulot">
        Clarified the meaning of setTLS() which actually sends a "STARTTLS" command from the
        client to the SMTP server. Please note that some "protected" variables were renamed
        which could break existing code.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-102" date="2010-12-16" due-to="Okan Özeren">
        Fixed HtmlEmail embed toLowerCase bug with Turkish locale.
      </action>
      <action dev="sgoeschl" type="add" date="2010-12-16">
        Added a MultiPartEmail.attach(File) method since attaching a file is a simple and common.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-101" date="2010-11-08" due-to="Andrew Starodub">
        Specified Content-ID is now used when embedding a File object in an HtmlEmail.
      </action>
      <action dev="niallp" type="fix" date="2010-11-08">
        Restore Java 1.4 compatibility.
      </action>
      <action dev="sgoeschl" type="add" date="2010-11-01">
        Added MimeMessageParser and MimeMessageUtils.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-96" date="2010-10-27">
        Throwing an IllegalStateException when setting mail session properties for an already
        created mail session because the settings would be ignored. Please note that this
        change could potentially break existing (but invalid) code.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-98" date="2010-10-23" due-to="Mario Daepp">
        Encoding and folding of headers is now done by commons-email.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-100" date="2010-10-15" due-to="David Parks">
        The default connection timeout is set to a reasonable default value of 60 seconds.
      </action>
      <action dev="sgoeschl" type="fix" date="2010-10-15">
        Moving the various constants from 'EMail' to 'EmailConstants'
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-76" date="2010-10-15" due-to="Yu Kobayashi">
        All setters are returning "this" to simplify building an email.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-92" date="2010-06-08" due-to="Dominik Stadler">
        Adding ImageHtmlEmail to create HTML emails with embedded images either
        downloaded from HTTP or from the local file system.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-95" date="2010-05-13">
       Calling buildMimeMessage() before invoking send() caused
       duplicated mime parts for HtmlEmail. The implementation now enforces
       that an email can be only used once and throw an exception when
       multiple invocations of buildMimeMessage() are detected.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-91" date="2010-05-13" due-to="Kevin Lester">
        Incorrect SMTP Port number shown in error message when an email fails
        to send due to a blocked port and SSL is used.
      </action>        
    </release>
    <release version="1.2" date="2009-10-26">
      <action dev="sgoeschl" type="update" date="2009-06-26">
        Changing groupId from "commons-email" to "org.apache.commons" 
        because the 1.1 release was already using "org.apache.commons"
      </action>    
      <action dev="sgoeschl" type="fix" date="2009-06-16" due-to="sebb">
        Using "http://example.invalid" for a bad url - ".invalid" is reserved
        and not intended to be installed as a top-level domain in the global 
        Domain Name System (DNS) of the Internet.
      </action>    
      <action dev="sgoeschl" type="fix" date="2009-06-16" due-to="sebb">
        Made BaseEmailTestCase abstract and fixed a few coding issues.
      </action>    
      <action dev="sgoeschl" type="fix" issue="EMAIL-87" date="2009-06-16" due-to="sebb">
        HtmlEmail invokes java.net.URL.equals(Object), which blocks to do domain name resolution. This
        is avoided by using "url.toExternalForm().equals()" instead of "url.equals()".
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-75" date="2009-04-05" due-to="Yu Kobayashi">
        Email.setFrom and Email.addTo are using Email.charset to properly encode the name.
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-79" date="2009-04-05" due-to="Edvin Syse, Corey Scott">
        SimpleEmail#setMsg() with UTF-8 content honors correct charset in header and
        does encode the content correctly now.
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-84" date="2009-02-22" due-to="Claudio Miranda">
        Created additional methods to support timeouts.
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-74" date="2009-02-22" due-to="Jim McCabe, Corey Scott">
        Create an overridable method in Email.java to create the MimeMessage instance.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-71" date="2009-02-22" due-to="Teemu Lang, Corey Scott">
        If setHostName() has not been called, getHostName() tries to return
        this.session.getProperty(MAIL_HOST). If mail session has not been
        created yet, this will throw a NullPointerException. Now getHostName()
        checks that this.session is not null before trying to access it.
      </action>
      <action dev="sgoeschl" type="add" issue="EMAIL-81" date="2009-02-22" due-to="Travis Reader, Corey Scott">
        Add getTo and getReplyTo to Email class.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-78" date="2009-02-08" due-to="Aaron Digulla, Corey Scott">
        Provide better diagnostics when attaching  documents fail.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-70" date="2008-12-29" due-to="F. Andy Seidl">
        When mail authentication is required and no username/password is supplied
        than the provided mail session is used. If a username/password is found
        the implementation creates a new mail session and a DefaultAuthenticator
        as convinence implementation.
      </action>
      <action dev="sgoeschl" type="fix" issue="EMAIL-65" date="2008-12-29" due-to="Kenneth Gendron">
        Using Kenneth's implementation of HtmlEmail.buildMimeMessage() to fix a
        couple of HtmlEmail layout issues. Also thanks to Martin Lau and Morten
        Hattesen for providing in-depth analysis of the problem
      </action>
      <action dev="sgoeschl" type="fix">
        During regression tests write out the generated MimeMessage instead of
        WiserEmail.toString().
      </action>
    </release>
    <release version="1.1" date="2007-09-27">
      <action dev="bspeakmon" type="add" issue="EMAIL-35" due-to="Brandon Wolfe">
        Support embedding of raw DataSource attachments in HtmlEmail.
      </action>
      <action dev="bspeakmon" type="update" issue="EMAIL-64" due-to="Ben Speakmon">
        Use wiser instead of dumbster for test cases. Original patch supplied by Bindul Bhowmik.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-62" due-to="Ben Speakmon">
        Build patches to enforce source 1.4 and target 1.4 when compiling.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-52" due-to="Andrew Liles">
        Identical Inline images should share same BodyPart.
        Fixed by EMAIL-50.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-28" due-to="Phil Bretherton">
        Problems with HTML emails with attachments and embedded images.
        Fixed by EMAIL-50.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-50" due-to="Andrew Liles">
        HTML Emails with images don't display in Outlook 2000.
        Fix from Ben Speakmon.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-54" due-to="Piero Ottuzzi">
        Use JDK1.4 and java.nio.Charset instead of keeping our own.
        Fix from Ben Speakmon.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-14" due-to="locka">
        not support content charset gb2312.
        Fixed by EMAIL-54.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-25" due-to="James Huang">
        Address char-set can not be individually set.
        Fixed by EMAIL-54.
      </action>
      <action dev="dion" type="fix" issue="EMAIL-1" due-to="James Mc Millan">
        setCharset() in Email does not set the charset for the message content.
        Fix provided by Ben Speakmon.
      </action>
      <action dev="scolebourne" type="fix" >
        Enhance website
      </action>
      <action dev="dion" type="add" issue="EMAIL-45" due-to="Dave Cherkassky">
        Added Email.setReplyTo(Collection)
      </action>
      <action dev="dion" type="fix" issue="EMAIL-37" due-to="Piero Ottuzzi">
        If you provide a mailSession in tomcat you cannot send email using
        commons-email: the problem is mainly caused by typos or missing constant
        declaration.
      </action>
      <action dev="dion" type="add" issue="EMAIL-48">
        Added TLS helper methods on Email
        and Added setMailSessionFromJNDI(String) helper method
      </action>
      <action dev="dion" type="fix" issue="EMAIL-7" due-to="Nuno Ponte">
        Added HtmlEmail.embed(String,String) as a wrapper to embed(URL,String)
      </action>
    </release>
    <release version="1.0" date="2005-09-27"/>
    <release version="1.0-rc8" date="2005-09-07">
      <action dev="henning" type="fix">
        Make sure that the unit tests don't fail under JDK 1.3.x with 
        java.net.BindException: Address already in use
      </action>
      <action dev="henning" type="update" due-to="Niall Pemberton" issue="EMAIL-49">
        Replace our usage of address.validate() with simpler code that allows
        commons-email to work with javamail 1.2 / J2EE 1.3 environment. Added an
        unit test which verifies the behavior.
      </action>
      <action dev="henning" type="update" due-to="Niall Pemberton" issue="EMAIL-58">
        Add an unit test to check for invalid addresses.
      </action>
      <action dev="henning" type="update" due-to="Stephen Colebourne" issue="EMAIL-12">
        Remove dependencies to commons-lang, allowing commons-email to exist without
        any external dependencies in an J2EE 1.4+ environment.
      </action>
    </release>
    <release version="1.0-rc6-SNAPSHOT" date="in Subversion">
      <action dev="epugh" type="update" due-to="Troy Poppe" issue="EMAIL-51">
        Improve MultiPartEmail to ease extending it.
      </action>
      <action dev="sgoeschl" type="update">
        Refactoring the code to seperate creation of a MimeMessage and sending it.
      </action>
      <action dev="dion" type="update">Add serialVersionUID to EmailException</action>
      <action dev="dion" type="update">Use Dumbster 1.6 compiled with jdk13 for testing</action>
      <action dev="dion" type="fix" issue="EMAIL-24" due-to="Eric Spiegelberg">
        Refactor Hashtable usage to Map
      </action>
      <action dev="epugh" type="add" due-to="Mark Lowe" issue="EMAIL-42">
        Email throws EmailException wrapping underlying JavaMail exception
      </action>
      <action dev="epugh" type="add" due-to="Corey Scott" issue="EMAIL-32">
        Change port for dumbster from 25 to 2500 to use unreserved port.
      </action>
      <action dev="epugh" type="add" due-to="Corey Scott" issue="EMAIL-3">
        Add back in ByteArrayDataSource.
      </action>
      <action dev="epugh" type="remove">
        Removed deprecated MailMessage and ByteArrayDataSource.
      </action>
      <action dev="epugh" type="add">
        Output test emails to /target/test-emails as .txt files for manual
        review.
      </action>
      <action dev="epugh" type="add" due-to="Mark Lowe" issue="EMAIL-19">
        Inline attatchment encoding was incorrect.
      </action>
      <action dev="epugh" type="add">
        Integrate our own checkstyle config instead of using Turbine style only.
      </action>
      <action dev="epugh" type="add" due-to="Joe Germuska" issue="EMAIL-55">
        Clone the System.getProperties() call instead of putting random properties
        into it.
      </action>
      <action dev="epugh" type="add" issue="EMAIL-8">
        Can't supply a javax.mail.Session to Commons Email component
      </action>
      <action dev="epugh" type="add" issue="EMAIL-23" due-to="Corey Scott">
        HTML email with plain text alternative and attachments
      </action>
      <action dev="epugh" type="add" issue="EMAIL-33" due-to="Corey Scott">
        Integrate use of Dumbster to supply a fake SMTP server.
      </action>
      <action dev="epugh" type="add" due-to="Corey Scott">
        Lots of new unit tests and cleanup of code.
      </action>
      <action dev="epugh" type="update">
        Update dependencies to latest available.
      </action>
      <action dev="germuska" type="add" issue="EMAIL-55">
        Support the delivery of bounced messages to an address other than "from".
      </action>
    </release>
  </body>
</document>
