Revision history for Sisimai/formerly known as bounceHammer version 4

4.20.0  Sat, 31 Dec 2016 13:36:22 +0900 (JST)
    - Issue #199 Experimental implementation: New MTA modules for 2 Cloud Email
      Deliveries, Sisimai::CED::US::AmazonSES and Sisimai::CED::US::SendGrid.
      These modules can parse JSON formatted bounce objects and can convert to
      Sisimai::Data object.
    - Format of "smtpagent" in the parsed result has been changed. It includes
      the category name of MTA/MSP modules like "MTA::Sendmail", "MTA::Exim",
      and "MSP::US::SendGrid": issue #200.
    - The Domain part of dummy email address defined in Sisimai::Address module
      has been changed from "dummy-domain.invalid" to "libsisimai.org.invalid";
      issue #202.
    - Sisimai::SMTP->is_softbounce() method has been deleted.

4.19.0  Tue, 18 Oct 2016 14:13:22 +0900 (JST)
    - Remove utf8 flag from JSON string before returning the value at Sisimai->
      dump() method.
    - Implement a callback feature at Sisimai->make and Sisimai->dump methods.
      More imformation about the feature are available at the following pages:
      - http://libsisimai.org/en/usage#callback
      - http://libsisimai.org/ja/usage#callback
    - Implement Sisimai->match() method: issue #173.
    - Minor bug fix in Sisimai::MSP::US::AmazonSES->scan() method.

4.18.1  Sun, 11 Sep 2016 20:05:20 +0900 (JST)
    - Fix bug in Sisimai::MIME->qprintd() method reported at issue #192.
    - Import sisimai/rb-Sisimai@fb45a47, MIME decoding improvements.
    - Issue #194, fix bug in Sisimai::Mail->new() called from Sisimai->dump().
      It didn't work properly when email data read from STDIN.
    - Sisimai->dump and Sisimai->make methods die when the number of arguments
      is neither 1 nor 3.
    - Implement Sisimai::String->to_plain() for converting from HTML message to
      plain text before parsing, issue #8.
    - Remove Sisimai::String->to_regexp() method, use qr/\Q...\E/ instead.

4.18.0  Mon, 22 Aug 2016 20:40:55 +0900 (JST)
    - Issue #189, Soft bounce improvement. Thanks to @Quickeneen.
    - Pull-Request #190, Sisimai::SMTP->is_softbounce() method has been marked
      as obsoleted. Use Sisimai::SMTP::Error->soft_or_hard() method instead.
    - Issue #185, Sisimai works on Perl 5.24.
    - Sisimai::MTA::Exchange has been renamed to Sisimai::MTA::Exchange2003.
    - Implement new MTA module Sisimai::MTA::Exchange2007.

4.17.2  Tue, 26 Jul 2016 21:00:17 +0900 (JST)
    - Issue #174, Implement Sisimai::Rhost::ExchangeOnline for the bounce mail
      from on-premises Exchange 2013 and Office 365.
    - The reason of status code: 4.4.5 is "systemfull".
    - Issue #181, Fixed minor bug on OpenBSD.
    - Pull-Request #185: Code improvement at Sisimai::MSP::US::Office365.
    - Pull-Request #188: Code improvement at Sisimai::MIME, Thanks to @jonjensen.

4.17.1  Wed, 30 Mar 2016 14:00:22 +0900 (JST)
    - Fixed issue #179 by pull-request #180, a variable in Sisimai/MTA/Exim.pm
      is not quoted before passing to qr// operator. Thanks to @dzolnierz.

4.17.0  Wed, 16 Mar 2016 12:22:44 +0900 (JST)
    - Implement new reason "syntaxerror". Sisimai will set "syntaxerror" to the
      raeson when the value of "replycode" begins with "50" such as 502, 503,
      or 504. issue #147.
    - Implement description() method at each file in Sisimai/Reason issue #166.
    - Implement Sisimai->reason method for getting the list of reasons Sisimai
      can detect and its description: issue #168.
    - Remove unused method Sisimai::Reason->match, issue #169.
    - Remove unused methods in Sisimai::MSP and Sisimai::MTA, issue #136.
    - Remove unused module Sisimai::ISO3166, issue #137.
    - Remove unused module Sisimai::RFC5321 and Sisimai::RFC3463, issue #131.
    - Some methods of Sisimai::Address allow "postmaster", and "mailer-daemon"
      (without a domain part) as an email address.
    - Sisimai::RFC5322->is_mailerdaemon() method returns "1" when the argument
      includes "postmaster".
    - Merge pull-request #172, new method Sisimai::RFC5322->weedout() and code
      improvements in all the MTA/MSP modules.

4.16.0  Thu, 18 Feb 2016 13:49:01 +0900 (JST)
    - Implement new reason "delivered". Sisimai set "delivered" to the reason
      when the value of Status: field in a bounce message begins with "2". This
      feature is optional and is not enabled by default. issue #155.
    - Implement new method Sisimai->engine. the method returns the list of MTA
      and MSP module list implemented in Sisimai.

4.15.0  Sat, 13 Feb 2016 12:40:15 +0900 (JST)
    - Implement new MTA/MSP module "Sisimai::MSP::US::AmazonWorkMail" at pull-
      request #162. The module parse bounce mails via Amazon WorkMail.
    - Implement new MTA/MSP module "Sisimai::MSP::US::Office365" at pull-request
      #164. The module parse bounce mails via Microsoft Office 365.
    - Tiny code improvements: back port from the Ruby version of Sisimai.

4.14.2  Wed,  3 Feb 2016 12:26:19 +0900 (JST)
    - Issue #154 Fix bug: remove CR(\r) at the end of string in some properties
      of Sisimai::Data before calling the constructor. Thanks to M Miyamoto.
    - Issue #151 fix bug that the value of foled Message-Id field could not be
      found at pull-request #157. Thanks to @0xcdcdcdcd.
    - Fix bug in code to get pseudo delivery status in Sisimai::MSP::RU::Yandex.
    - Implement Sisimai::String->to_regexp() method to fix bug in code to build
      regular expression reported at pull-request #160, Thanks to @negachov.
    - Improved message pattern of Sisimai::Reason::SpamDetected.
    - Issue #158, bug fix for substituting the value of "lhost" and "rhost".

4.14.1  Sat, 26 Dec 2015 20:00:00 +0900 (JST)
    - eg/ directory has been renamed and sample email files have been moved to
      github.com/set-of-emails repository as master data, issue #153.

4.14.0  Fri, 25 Dec 2015 11:04:14 +0900 (JST)
    - Repository URL has been changed to https://github.com/sisimai/p5-Sisimai
    - Sisimai::MTA->SMTPCOMMAND has been obsoleted. Use Sisimai::SMTP->command
      instead, issue #136.
    - Sisimai::MTA->LONGFIELDS and Sisimai::MTA->RFC822HEADERS are obsoleted.
      Use Sisimai::RFC5322->LONGFIELDS() and Sisimai::RFC5322->HEADERFIELDS()
      instead.
    - Change internal method names of Sisimai::Message/rewrite() begins parse(),
      resolve() begins make().
    - Issue #110, #122 Code for reading email files in a directory is improved
      and got faster than before: merged Pull-Request #123.
    - Fixed bug reported at issue #124: warning message: `use of uninitialized
      value in substr at` is displayed when Sisimai::Message->resolve() method 
      parses an UNIX mbox which begins from blank line.
    - Merged Pull-Request #125, filehandle will not be closed until EOF of each
      UNIX mbox in Sisimai::Mail::Mbox->read() method.
    - Merged Pull-Request #126, replace while(<$f>) with do {block for reading
      each email file in the directory at Sisimai::Mail::Maildir->read method.
    - Merged Pull-Request #132, Resolve issue #127: Sisimai cannot parse a mail
      which message body is MIME encoded. Thanks to @mrwushu.
    - Issue #134, Sisimai::RFC3463 and Sisimai::RFC5321 have been obsoleted but
      are not removed. Use Sisimai::SMTP::Status, Sisimai::SMTP::Reply instead. 
    - Merged Pull-Request #138, some code blocks in Sisimai::Message->resolve()
      have been divided into some methods.
    - Fixed bug at issue #142, Sisimai can not parse an email that TAB or Space
      character exists at the end of each line. Thanks to M Miyamoto.
    - Fixed bug at issue #144, support date format like "Thursday, Apr 29, ..".
    - Improved code of Sisimai::MTA::IMailServer for support more error message
      patterns: issue #143.
    - Issue #145 Code improvements: back port from Ruby version of Sisimai.
    - Fix bug in regular expression to detect SMTP command in Sisimai::MTA::X4
      and Sisimai::MTA::qmail.

4.13.1  Tue, 17 Nov 2015 14:13:10 +0900 (JST)
    - Issue #95, Add some sample emails for Sisimai::MTA::Exim.
    - Improved code Sisimai::MTA::Exim to get the reason and the SMTP command
      from LMTP error message.
    - Improved error message patterns at the following modules: UserUnknown,
      Rejected, and Blocked.
    - Issue #96, Improved Sisimai::MTA::Exim for parsing "Frozen message".
    - Issue #101, Improved code for getting DSN value in Sisimai::MTA::Exim.
    - Issue #107, Improved slow regular expression in Sisimai::MSP::JP::EZweb.
    - Issue #114 (MTA Order Optimization) issue #116 (Performance tunings), and
      issue #118 (Regular expression across the MTA modules) are merged. These
      improvements that were taught from two white cats in my dream on Nov. 7,
      and have made Sisimai 1.15 times faster. Thanks to sensible white cats.

4.13.0  Thu,  5 Nov 2015 16:11:12 +0900 (JST)
    - Issue #85, Use Semantic Versioning from this release. New version number
      is v4.13.0 <= v4.1.30.
    - Issue #84, Experimental implementation: New module Sisimai::MTA::X5 and
      added a sample email(x5-01.eml) for the module. Thanks to Masayoshi.M .
    - Issue #86, Removed unused version() method from the following modules:
      Sisimai::RFC3464, Sisimai::RFC3834, Sisimai::ARF, Sisimai::MTA::*, and
      Sisimai::MSP::*::*.
    - Issue #88, #89: fixed Sisimai::MTA::Notes and added notes-04.eml.
    - Issue #90, #91: fixed code around Sisimai::Data->alias().
    - Improved codes of Sisimai::MTA::*, Sisimai::MSP::*, Sisimai::RFC3464 and
      Sisimai::ARF as a precaution against serious bug reported on issue #89.
    - Improved codes and serious bug fix for issue #89 have made Sisimai 1.10
      times faster than before.
    - Issue #92, All the methods have YARD format comment.
    - Issue #93, #94: Fixed bug and improved code for getting alias address and
      setting the error reason in Sisimai::MTA::Exim.

4.1.29  Tue,  6 Oct 2015 10:55:00 +0900 (JST)
    - Issue #83, New MTA module implemented as "Sisimai::MSP::US::ReceivingSES".
      This module parse bounce mails from Amazon SES(Receiving).
    - Improved code for getting and setting the value of Status: field.
    - Improved document in Sisimai::Data and Sisimai::Reason, imported from web
      site: http://libsisimai.org/ .
    - Added new sample email rfc3834-03.eml to test code for Sisimai::RFC3834.
    - Added new sample emails: sendmail-26,27,28,29,30,31,32.eml. 

4.1.28  Sun, 16 Aug 2015 14:50:20 +0900 (JST)
    - Happy 1st Birthday To Sisimai !!
    - Experimental implementation about issue #76: New module Sisimai::RF3834
      is for detecting auto replied message and decides a reason as "vacation".
    - Fixed bug in Sisimai::Message for setting the order of MTA, MSP modules.
    - Issue #70, Implemented code for using user defined MTA module and added
      Sisimai::MTA::UserDefined as a sample.
    - Issue #78, Implement new accessor "softbounce" in Sisimai::Data object.

4.1.27  Fri, 17 Jul 2015 11:45:05 +0900 (JST)
    - New method implemented: Sisimai->dump('/path/to/mbox') return parsed data
      as JSON string.
    - Updated error message patterns: Sisimai::Reason::NoRelaying, TooManyConn,
      and Blocked.
    - Fixed code in Sisimai::Reason::MesgTooBig. Error reason of bounce message
      that the value of "Status" field is 5.2.3 will be set as "exceedlimit".
    - Fixed code for getting the value of Message-Id header in the original 
      message at Sisimai::Data.
    - Sisimai reports the bounce reason as "onhold" when Sisimail::Reason->get
      method did not decide the reason and the value of "diagnosticcode" is not
      empty.
    - Issue #74 is that reported at CPAN Testers Report might be fixed.
    - Issue #75, Improved code for parsing 2-digit year value in a Date: header
      at Sisimai::DateTime.
    - Test codes for Sisimai::MTA, Sisimai::MSP, Sisimai::ARF, Sisimai::RFC3464
      have been integrated and improved.

4.1.26  Sat,  4 Jul 2015 11:34:44 +0900 (JST)
    - Module name changed from Sisimai::Reason::RelayingDenied to "NoRelaying".
    - Registered new error reason "TooManyConn". This reason is bounced due to 
      that too many connections or exceeded connection rate limit.
    - Included many error messages listed in SendGrid "Deliverability Center":
      "https://sendgrid.com/deliverabilitycenter/" as a regular expression at 
      Sisimai::Reason::*. Thanks to Bogdan B. and SendGrid.
    - Experimental implementation: Sisimai::Reason->match() is for detecting a
      bounce reason from given text as an error message.
    - Experimental impelmentation about issue #61: New MTA module implemented
      as "Sisimai::MTA::ApacheJames". The module is for parsing bounce emails 
      which are generated by Apache James/Java Apache Mail Enterprise Server.
      Thanks to John Aldrich Quan.
    - Issue #72, Support SMTP reply code in Sisimai::Data object.
    - Fixed code: Add 'SystemFull' reason into Sisimai::Reason->anotherone().
    - Improved regular expression in Sisimai::MSP::US::Google.

4.1.25  Mon, 22 Jun 2015 11:45:29 +0900 (JST)
    - Reason name has been changed from "NoSpam" to "SpamDetected".
    - Package name has been changed from Sisimai::Time to Sisimai::DateTime.
    - Implemnet Sisimai::Time again as a child class of Time::Piece.
    - The class of "timestamp" is now Sisimai::Time in Sisimai::Data object.
    - Implement Sisimai::Reason::HasMoved.
    - 2 emails bounced due to "expired" reason have been added as a sample for
      issue #50.
    - Fix bug in Sisimai::MTA::MailMarshalSMTP for a bounce mail which have no
      boundary strings.
    - Fix bug in Sisimai::MTA::Exim for setting an error reason decided by SMTP
      MAIL command.
    - Improved regular expression in Sisimai::RFC3464.
    - Update Sisimai::MDA, add an error message pattern defined in dovecot 1.2,
      dovecot/src/plugins/quota/quota.c.
    - Update message patterns at SpamDetected, SystemError, Blocked, Filtered,
      RelayingDenied, NetworkError, MesgTooBig, MailboxFull, SecurityError, 
      UserUnknown and Suspend.
    - Fix code for detecting MIME encoded string in Sisimai::MIME.
    - Implement TO_JSON method in Sisimai::Address for JSON module.
    - Add test code for sample emails in CRLF.
    - Add sample emails which is an IDN email.
    - Add sample emails which could not be parsed yet into eg/cannot-parse-yet/
      directory and implement test code.
    - Add sample emails which reason is "undefined" into eg/reason-is-undefined
      directory and implement test code.

4.1.24  Mon, 11 Jun 2015 22:20:59 +0900 (JST)
    - Improved fallback code in Sisimai::RFC3464.
    - Add message patterns at NoSpam and HostUnknown in Sisimai/Reason.

4.1.23  Thu, 11 Jun 2015 13:20:59 +0900 (JST)
    - Sisimai works on Perl 5.22.0.
    - New MTA module Sisimai::MTA::X4 for qmail clone MTAs.
    - Performance tuning, Sisimai is now 1.39 times faster than before.
    - Improved code in Sisimai/Message.pm: 1.62 times faster than before.
    - Bug fix in Sisimai::MSP::JP::EZweb and Sisimai::MSP::JP::KDDI.
    - Support "2015-04-29 01:23:45" date format in Sisimai::Time.
    - Support the value of Diagnostic-Code without the value of diagnostic-type
      field in Sisimai::RFC3464.
    - Emails in https://github.com/sendgrid/go-gmime/tree/master/gmime/fixtures
      and some emails have been added as a sample in eg/ directory.
    - Add message patterns at NoSpam, MailboxFull, RelayingDenied, UserUnknown, 
      Blocked, Filtered, SecurityError, Expired, HostUnknown, and NetworkError
      in Sisimai/Reason.
    - Fix bug in Sisimai::Data for calling Sisimai::Time->parse() method.
    - Sisimai::MTA::IMailServer and Sisimai::MTA::InterScanMSS updated.
    - Implement fallback code in Sisimai::RFC3464: parse entire message body to
      get a recipient address and error messages. The value of the "smtpagent"
      parsed by this code is "RFC3464::Fallback".

4.1.22  Thu, 28 May 2015 14:20:59 +0900 (JST)
    - Merged pull request #59 (Support for Microsoft custom ARF format) at 
      https://github.com/azumakuniyuki/p5-Sisimai/pull/59 . Thanks to jleroy.
    - Add Time::Piece and Module::Load to ./cpanfile. Thanks to kkdYodoKazahaya
      at issue #60.
    - Update Sisimai::ARF for parsing Amazon SES Complaints bounces.

4.1.21  Tue, 21 Apr 2015 14:20:59 +0900 (JST)
    - Update regular expressions of error message pattern at Sisimai::Reason::
      NoSpam, Suspend, Blocked, UserUnknown, Expired, NetworkError, MailboxFull
      and MesgTooBig.
    - Fix bug for setting the value of SMTP command at Sisimai::Data.
    - Update regular expression of "expired" in Sisimai::MTA::Exim.
    - Add three sample emails for "make test" in eg/ directory.

4.1.20  Thu,  9 Apr 2015 14:20:59 +0900 (JST)
    - Update regular expressions of error message pattern at SystemError.pm, 
      MesgTooBig.pm and NoSpam.pm in Sisimai/Reason.
    - Add two sample emails for "make test" in eg/ directory.

4.1.19  Mon,  6 Apr 2015 14:20:59 +0900 (JST)
    - Update regular expressions of error message pattern at Rejected.pm, 
      Mailboxfull.pm, MesgTooBig.pm, and UserUnknown.pm in Sisimai/Reason.
    - New error reason "nospam" implemented.
    - Some message patterns have moved from Sisimai::Reason::SecurityError to
      Sisimai::Reason::NoSpam module.

4.1.18  Fri, 27 Mar 2015 12:59:07 +0900 (JST)
    - Repository name on github has been changed to p5-Sisimai.
    - Fixed code around regular expressions of "mailboxfull", "expired" in MTA
      modules: Sisimai::MTA::qmail and Sisimai::MTA::Exim.
      Thanks to m-walk at issue #57.
    - Update regular expressions of error message pattern at SecurityError.pm
      and Blocked.pm in Sisimai/Reason.

4.1.17  Mon,  2 Mar 2015 16:01:20 +0900 (JST)
    - Improved regular expressions of networkerror, expired and related code in
      Sisimai::MTA::qmail. Thanks to m-walk at issue #56.

4.1.16  Wed, 18 Feb 2015 16:01:20 +0900 (JST)
    - Add bounce emails as a sample from Postfix 3.0.0.
    - Improved code for reading mail data from STDIN at Sisimai::Mail.
    - Try to load YAML::Syck module instead of YAML module when string "yaml"
      is specified in the argument of Sisimai::Data->dump() method.

4.1.15  Wed, 11 Feb 2015 13:59:59 +0900 (JST)
    - Improved code for detecting abuse message "opt-out" in Sisimai::ARF.
    - Minor improvements in Sisimai::MTA::Postfix.

4.1.14  Fri,  6 Feb 2015 13:29:59 +0900 (JST)
    - Update Sisimai::MSP::US::Outlook for delayed message.
    - Changed accessor name "data" to "path" in Sisimai::Mail module.
    - Implement new module: Sisimai::Mail::STDIN for reading email data from
      standard-in.
    - Changed accessor names in Sisimai::Mail::Mbox and Sisimai::Mail::Maildir.
      "name" to "file", "files" to "inodes".
    - Accessor "path" always return the path to a mailbox or path to each mail
      file in Maildir/ at Sisimai::Mail::Mbox and Sisimai::Mail::Maildir.
    - Implement new accessor "dir", it returns the path to directory of given
      argument in Sisimai::Mail::Mbox and Sisimai::Mail::Maildir.

4.1.13  Tue, 27 Jan 2015 15:00:55 +0900 (JST)
    - Fixed bug in test code for Sisimai::DATA::YAML. Thanks to CPAN Testers
      Reports.
    - Implement new method Sisimai::Reason->index(), returns the list of bounce
      reasons.

4.1.12  Sat, 24 Jan 2015 15:00:59 +0900 (JST)
    - Update sample code in POD at Sisimai::RFC5322 and test codes (RT#101436,
      Issue #41, See https://rt.cpan.org/Ticket/Display.html?id=101436). Thanks
      to Mark Stosberg.
    - Changed accessor name: "data" => "path" in Sisimai::Mail.
    - Space character will be inserted after ":" in Sisimai::Data::JSON.
    - Improved regular expression for getting the value of email header at each
      MTA module.
    - Message patterns related to DNS or network error have been moved to new
      module: Sisimai::Reason::NetworkError.
    - New error reason "networkerror": the value of reason for bounce messages
      returned due to network related errors will be set as the reason.
    - Sisimai does not rely on Try::Tiny module from this version.

4.1.11  Thu, 15 Jan 2015 15:01:59 +0900 (JST)
    - Improved code in Sisimai/Mail/Mbox.pm: using substr() function instead of
      a regular expression is 1.46 times faster than before.
    - Code improvement in Sisimai/Reason.pm: using grep {} block instead of a 
      regular expression is 133% faster than before.
    - Revert commit 0c7782cecafdc923d3c82b81a201a787611654ea for Sisimai::Time.
    - Improvement of pattern match in Sisimai/Message.pm is 2.27 times faster.
    - Improvement of regular expressions in each MTA module is 115% faster than
      before.

4.1.10  Mon, 12 Jan 2015 17:59:35 +0900 (JST)
    - Implement Sisimai::MSP::UK::MessageLabs for email bounces from Symantec.
      cloud: formerly MessageLabs.
    - Added 2 sample emails: arf05.eml, arf-06.eml and improved Sisimai::ARF
      from pull request #37, Thanks to @jcbf.
    - Merged pull request #38, Updated Sisimai::US::Facebook and DMARC forensic
      related codes, and error message patterns in Sisimai::Reason::* modules.
      Thanks to @jcbf.
    - Implement Sisimai::MSP::US::Bigfoot for email bounces from bigfoot.com.
    - Merged pull request #39, Updated Sisimai::RFC3464 and message patterns in
      Sisimai::Reason::SecurityError and Suspended. Thanks to @jcbf.
    - Regular expression improvements in each MTA module(Issue #40) is between
      122% and 800% faster than Sisimai 4.1.9.

4.1.9   Wed, 31 Dec 2014 18:59:22 +0900 (JST)
    - Implement Sisimai::MTA::X3 for email bounces from Unknown MTA(3).
    - Improved code for getting error message in a bounce mail from MXLogic.
    - Added 4 sample emails from pull request #32, Thanks to @jcbf.
    - Implement Sisimai::MSP::DE::EinsUndEins for email bounces from 1&1.
    - Added 4 sample emails and updated error message patterns in some files in
      Sisimai/Reason directory from pull request #34, Thanks to @jcbf.
    - Implement Sisimai::MTA::MailMarshalSMTP for email bounces from Trustwave
      Secure Email Gateway: formerly MailMarshal SMTP.
    - Improved code for getting FBL related values in Sisimai::ARF.

4.1.8   Fri, 19 Dec 2014 17:22:59 +0900 (JST)
    - Support new data format: YAML(optional, "YAML" module required).

4.1.7   Thu, 18 Dec 2014 23:59:59 +0900 (JST)
    - Tiny code improvement of Sismai::MSP::RU::Yandex.
    - Implement Sisimai::MSP::US::Zoho for email bounces from Zoho Mail.
    - Improved code for detecting email bounce from MXLogic.
    - Implement Sisimai::MTA::X2 for email bounces from Unknown MTA(2).
    - Add some message patterns into Sisimai::Reason::Expired.
    - Improved code for getting error message in a bounce mail from Zoho Mail.

4.1.6   Sun,  7 Dec 2014 22:44:36 +0900 (JST)
    - Improved code for parsing email bounce from @nokiamail.com.
    - Implement Sisimai::MSP::RU::Yandex for email bounces from Yandex.Mail.

4.1.5   Fri,  5 Dec 2014 18:20:22 +0900 (JST)
    - Fix newline of some sample emalis in eg/ directory.

4.1.4   Thu,  4 Dec 2014 20:40:22 +0900 (JST)
    - Implement Sisimai::MSP::RU::MailRu for email bounces from @mail.ru.
    - Implement Sisimai::MSP::DE::GMX for email bounces from GMX.
    - Improved code for checking bounce mail in Sisimai::MTA::OpenSMTPD.

4.1.3   Sun, 23 Nov 2014 21:22:55 +0900 (JST)
    - Improved code for detecting error reason in Sisimai::Reason.
    - Implement Sisimai::MTA::MessagingServer for email bounces from Oracle
      Communications Messaging Server and Sun Java System Messaging Server.
    - Implement Sisimai::MTA::X1 for email bounces from Unknown MTA(1).
    - Implement Sisimai::MSP::US::Yahoo for email bounces from Yahoo! MAIL.
    - Implement Sisimai::MSP::US::Aol for email bounces from Aol Mail.
    - Implement Sisimai::MSP::US::Outlook for email bounces from Outlook.com.

4.1.2   Sat, 22 Nov 2014 22:22:22 +0900 (JST)
    - Require Time::Local 1.19 or later for fixing issue #21, #23, and #24.
    - Key name of time stamp has been changed from "date" to "timestamp".
    - Data sources and hash algorithm of token string in parsed data have been 
      changed.
    - Implement Sisimai::MTA::InterScanMSS for email bounces from Trend Micro
      InterScan Messaging Security Suite.
    - Implement Sisimai::MTA::SurfControl for email bounces from WebSense Surf-
      Control.
    - Implement Sisimai::MTA::V5sendmail for email bounces from old version of
      Sendmail(v5) and other MTAs based on V5 Sendmail.
    - Fixed bounce reason names in Sisimai::RFC3463.

4.1.1   Mon, 10 Nov 2014 15:59:03 +0900 (JST)
    - Fix tiny bug in Sisimai::MTA::Exim.
    - Add many sample emails into eg/ directory.
    - Improved code for detecting connection errors at Sendmail and Courier.
    - Sisimai::RFC3464 and Sisimai::MTA::Exchange imporved.
    - Implement Sisimai::MTA::Notes for email bounces from Lotus Notes.
    - Implement Sisimai::MTA::McAfee and Sisimai::MTA::MXLogic for email bounce
      from McAfee Products.
    - Implement Sisimai::MTA::MailFoundry for email bounces from MailFoundry.
    - Implement Sisimai::MTA::IMailServer for email bounces from IPSWITCHI 
      IMail Server.
    - Improved code for deciding error reason at Sendmail and qmail.
    - Implement Sisimai::MTA::mFILTER for email bounces from DigitalArts 
      m-FILTER.
    - Implement Sisimai::MTA::Activehunter for email bounces from TransWARE
      Active!hunter.

4.1.0   Sat,  4 Oct 2014 15:09:09 +0900 (JST)
    - Sisimai::Group: child classes, "provider", and "category" in the parsed
      data have been removed permanently.
    - Fix the newline in sample email files for `make test`.

4.0.2   Wed, 10 Sep 2014 22:45:43 +0900 (JST)
    - Implement Sisimai::MSP::US::AmazonSES, Sisimai::MSP::US::SendGrid modules
      for parsing bounce mail from email cloud services.
    - Implement Sisimai::MTA::Domino module for email bounces from IBM Domino.
    - Large scale code refactoring at Sisimai::RFC3464.

4.0.1   Sun, 17 Aug 2014 23:00:00 +0900 (JST)
    - Fixed bug for reading each email file in the Maildir given as an argument
      of Sisimai::Mail::Maildir->read method.
    - Refactoring around codes to return the parsed data.
    - Implement "make" method to get bounce data at Sisimai.pm.

4.0.0   Sat, 16 Aug 2014 20:00:00 +0900 (JST)
    - The first release of Sisimai.