======================= 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.