Skip to content
Back to top
View this page

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