<?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>Changes</title>
    <author email="epugh@STOPSPAMopensourceconnections.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="1.3.3" date="xxx">
      <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 behaviour.
      </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>
