=======================
 NEWS for flufl.bounce
=======================

5.0.1 (2026-05-21)
==================
* Fix a false recognition of Microsoft bounces from the Groupwise detector. :GL:`16`
  Found and fixed by Mark Sapiro.

5.0 (2026-05-20)
================
* Major project management modernization.
* Add Mark as a named co-owner.
* Drop Python 3.9, add Python 3.13, 3.14, and 3.15.
* Added recognition for a non-compliant Earthlink DSN.
* Fixed a long-standing bug in the Caiwireless detector that returned a set of individual address
  characters instead of the bouncing address itself, and added a test exercising the previously
  buggy return path.
* Replaced deprecated/removed pkg_resources.
* Replaced the ``zope.interface`` dependency with ``typing.Protocol``; the ``IBounceDetector``
  marker interface has been renamed to ``BounceDetector``.  **This is a backwards incompatible
  change**.
* The return types of ``scan_message``, ``all_failures``, and detector ``process`` methods
  are now ``frozenset[bytes]`` instead of mutable ``set[bytes]``; the ``NoTemporaryFailures``,
  ``NoPermanentFailures``, and ``NoFailures`` sentinel constants are correspondingly empty
  frozensets rather than empty tuples.  **This is a backwards incompatible change**.

4.0 (2021-06-16)
================
* Added another string to the ``stop looking`` strings in the yahoo detector. :GL:`13`
* Detectors are now run in a defined order and stop on the first detection. :GL:`12`

3.0.2 (2021-02-09)
==================
* Fixed microsoft.py which has been broken forever. :GL:`10`
* Added recognition for yet another non-complaint Yahoo DSN.
* Added recognition for a non-compliant DSN from an unknown MTA.
* Fixed missing () in the groupwise detector.

3.0.1 (2020-01-17)
==================
* Added recognition for a non-compliant opensmtpd DSN with Action: error.
* Caught a possible UnicodeEncodeError in simplematch.py.  :GL:`8`
* Fixed simplmatch.py to not return results that don't resemble email
  addresses.  (LP: #1859011) :GL:`9`

3.0 (2017-02-17)
================
* Drop Python 2 support.
* Switch to the Apache Software License v2.
* Fixed a bug where the Groupwise detector looks at more messages than it
  should.  (LP: #1548983)
* Update documentation links to point to fluflbounce.readthedocs.io.
* Switch to the nose2 test runner.

2.3 (2014-08-18)
================
* Added recognition for a kundenserver.de warning to simplewarning.py.
  (LP: #1263247)
* Stop using the deprecated ``distribute`` package in favor of the now-merged
  ``setuptools`` package.
* Stop using the deprecated ``flufl.enum`` package in favor of the enum34
  package (for Python 2) or built-in enum package (for Python 3).

2.2.1 (2013-06-21)
==================
* Prune some artifacts unintentionally leaked into the release tarball.

2.2 (2013-06-20)
================
* Added recognition for a bogus Dovecot over-quota rejection sent as an MDN
  rather than a DSN.  (LP: #693134)
* Tweaked a simplematch regexp that didn't always work.  (LP: #1079254)
* Added recognition for bounces from mail.ru.  Thanks to Andrey
  Rahmatullin.  (LP: #1079249)
* Fixed UnicodeDecodeError in qmail.py with non-ascii message.  Thanks
  to Theo Spears.  (LP: #1074592)
* Added recognition for another Yahoo bounce format.  Thanks to Mark
  Sapiro. (LP: #1157961)
* Fix documentation bug.  (LP: #1026403)
* Document the zope.interface requirement. (LP: #1021383)

2.1.1 (2012-04-19)
==================
* Add classifiers to setup.py and make the long description more compatible
  with the Cheeseshop.
* Other changes to make the Cheeseshop page look nicer.  (LP: #680136)
* setup_helper.py version 2.1.

2.1 (2012-01-19)
================
* Fix TypeError thrown when None is returned by Caiwireless.  Given by Paul
  Egan. (LP: #917720)

2.0 (2012-01-04)
================
* Port to Python 3 without the use of ``2to3``.  Switch to class decorator
  syntax for declaring that a class implements an interface.  The functional
  form doesn't work for Python 3.
* All returned addresses are bytes objects in Python 3 and 8-bit strings in
  Python 2 (no change there).
* Add an additional in-the-wild example of a qmail bounce.  Given by Mark
  Sapiro.
* Export ``all_failures`` in the package's namespace.
* Fix ``python setup.py test`` so that it runs all the tests exactly once.
  There seems to be no portable way to support that and unittest discovery
  (i.e. ``python -m unittest discover``) and since the latter requires
  virtualenv, just disable it for now.  (LP: #911399)
* Add full copy of LGPLv3 to source tarball. (LP: #871961)

1.0.2 (2011-10-10)
==================
* Fixed MANIFEST.in to exclude the .egg.

1.0.1 (2011-10-07)
==================
* Fixed licenses.  All code is LGPLv3.

1.0 (2011-08-22)
================
* Initial release.

0.91 (2011-07-15)
=================
* Provide a nicer interface for detector modules.  Instead of using the magic
  empty tuple returns, provide three convenience constants in the interfaces
  module: ``NoFailures``, ``NoTemporaryFailures``, and ``NoPermanentFailures``.
* Add logging support.  Applications can initialize the ``flufl.bounce``
  logger.  The test suite does its own logging.basicConfig(), which can be
  influenced by the environment variable ``$FLUFL_LOGGING``.  See
  ``flufl/bounce/tests/helpers.py`` for details.

0.90 (2011-07-02)
=================
* Initial refactoring from Mailman 3.
