0.17 (2011-09-26)
-----------------

- Added a header, 'X-Postoffice-Date', to queued messages.  It records
  the time each message was received (as seconds since the epoch.)  It
  is set to the modified time of the maildir message file.  

0.16 (2011-06-30)
-----------------

- Added better fault tolerance for insane date headers generated by spambots.
  (LP #697033)

0.15 (2011-06-15)
-----------------

- Body checks are now multiline regexp checks. (LP #787573)

0.14 (2011-05-17)
-----------------

- Fixed problem where the zodb_uri could be unicode, which eventually breaks
  the ZEO client for ZEO uris.  zodb_uri is now converted to a UTF-8 string.

0.13 (2011-05-05)
-----------------

- Fixed problem with header filters not working properly with non-ASCII
  characters in headers.  (LP #777455)

- Fixed bug in regular expression body filter which improperly parsed the
  'Content-Type' header in order to extract the character set of a Mime part.

0.12 (2011-04-25)
-----------------

- Respect leading and trailing whitespace in rules files.

0.11 (2011-04-25)
-----------------

- When a message is rejected by a filter, a message is logged showing which
  filter triggered the rejection.

0.10 (2011-04-20)
-----------------

- Improved logging output now includes a timestamp.

- Worked around (probable) bug in stdlib email parser where a message part
  might have a charset set in the 'Content-Type' header, but
  message.get_charset() returns None.

0.9 (2011-04-15)
----------------

- Added greater fault tolerance for malformed email addresses.  (Shakes fist at
  spammers.)

- Added four new filter types based on regular expression matching:
  `header_regexp`, `header_regexp_file`, `body_regexp`, `body_regexp_file`.
  See README.txt for information on how to use these new filters.

- Added a new option to the global configuration: `reject_filters`. This allows
  you to set up filters at a global level for rejecting certain messages.  See
  README.txt for more information.

0.8 (2011-01-14)
----------------

- The 'to_hostname' filter now parses multiple email addresses and checks the
  'Cc' header as well as the 'To' header.  (LP #659243)

- If multiple incoming messages in a 24 hour period have the same Message-Id,
  they are presumed to be duplicates and all but the first are discarded.
  (LP #659243)

0.7 (2010-09-15)
----------------

- Fixed another case where non-RFC 2047 compliant headers could cause an
  exception to be raised.  (LP #637484)

0.6 (2010-09-13)
----------------

- Added Queue.requeue_quarantined_messages() convenience method to API.

- Allow for multiple hosts in 'to_hostname' filter. (LP #614528)

- Added graceful degradation for non-RFC 2047 compliant headers, in order to
  avoid crashing when spambots send us malformed messages. (LP #637484)

0.5 (2010-08-03)
----------------

- Added 'X-Postoffice: Bounced' header to outgoing bounce and quarantine
  messages. The presence of this header is checked when importing messages and
  any messages which contain it are discarded. This is to prevent possible
  ricochets of bounce messages back into the system. (LP #612587)

- Incoming messages with a 'From' header which matches exactly its 'To' header
  are now discarded as probable spam. (LP #612588)

0.4 (2010-07-30)
----------------

- Fixed bug in processing body of bounce messages when non-ascii unicode
  characters are present.

0.3 (2010-07-20)
----------------

- Fixed divide by zero error when calculating instantaneous message frequency.

- Fixed bug in repoze.postoffice.queue.open_queue where a ZEO connection would
  be left open if there was a KeyError on the queue name.

0.2 (2010-06-29)
----------------

- Fixed bug in parsing headers with no values.

- Added ability to use arbitrary message headers as discriminator values in
  out of office loop detection.

- When messages exceed maximum message size, are throttled or are found to be
  an auto-response, they are no longer discarded.  Instead these messages get
  an 'X-Postoffice-Rejected' header added where the value gives the reason for
  rejection.  These messages are then consumable by clients in the normal way.
  It is up to the client to detect the 'X-Postoffice-Rejected' header and take
  appropriate action.  This change was made to allow the client to determine
  what, if any, sort of bounce message should be generated if any of these
  conditions are true.

0.1 (2010-06-03)
----------------

- Initial Release.
