diff options
Diffstat (limited to 'src/mailman/docs')
| -rw-r--r-- | src/mailman/docs/NEWS.rst | 2202 | ||||
| -rw-r--r-- | src/mailman/docs/contribute.rst | 1 |
2 files changed, 1106 insertions, 1097 deletions
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst index da6e95856..f61233569 100644 --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -14,24 +14,34 @@ Here is a history of user visible changes to Mailman. Bugs ---- - * A missing html_to_plain_text_command is now properly detected and logged. - (Closes #345) - * Syntactically invalid sender addresses are now ignored. (Closes #229) - * An AttributeError: 'str' object has no attribute 'decode' exception in - subject prefixing is fixed. (Closes #359) - * Messages with no syntactically valid senders are now automatically - discarded. (Closes #369) +* A missing html_to_plain_text_command is now properly detected and logged. + (Closes #345) +* Syntactically invalid sender addresses are now ignored. (Closes #229) +* An AttributeError: 'str' object has no attribute 'decode' exception in + subject prefixing is fixed. (Closes #359) +* Messages with no syntactically valid senders are now automatically + discarded. (Closes #369) + +Command line +------------ +* Adopt the ``click`` package for command line parsing. This makes the + command line more consistent and pluggable. Also, many CLIs that accepted a + "fqdn list name" (i.e. the posting address of a mailing list), now also + accept a ``List-ID``. Every attempt has been made to keep the CLI backward + compatible, but there may be subtle differences. (Closes #346) +* Fix ``mailman withlist`` command parsing. (Closes #319) Interfaces ---------- - * Broaden the semantics for ``IListManager.get()``. This API now accepts - both ``List-ID``s and fully qualified list names, since that's the most - common use case. There's now a separate ``.get_by_fqdn()`` which only - accepts the latter and mirrors the already existing ``.get_by_list_id()``. +* Broaden the semantics for ``IListManager.get()``. This API now accepts + both ``List-ID``s and fully qualified list names, since that's the most + common use case. There's now a separate ``.get_by_fqdn()`` which only + accepts the latter and mirrors the already existing ``.get_by_list_id()``. Other ----- - * Drop support for Python 3.4. (Closes #373) +* Drop support for Python 3.4. (Closes #373) +* Bump minimum requirements for aiosmtpd (>= 1.1) and flufl.lock (>= 3.1). 3.1.0 -- "Between The Wheels" @@ -40,277 +50,277 @@ Other Bugs ---- - * When the mailing list's ``admin_notify_mchanges`` is True, the list owners - now get the subscription notification. (Closes: #1) - * Fix the traceback that occurred when trying to convert a ``text/html`` - subpart to plaintext via the ``mimedel`` handler. Now, a configuration - variable ``[mailman]html_to_plain_text_command`` in the ``mailman.cfg`` file - defines the command to use. It defaults to ``lynx``. (Closes: #109) - * Confirmation messages should not be ``Precedence: bulk``. (Closes #75) - * Fix constraint violations on mailing list deletes affecting PostgreSQL. - Given by Abhilash Raj. (Closes #115) - * ``mailman`` command with no subcommand now prints the help text. Given by - Abhilash Raj. (Closes #137) - * The MHonArc archiver must set stdin=PIPE when calling the subprocess. - Given by Walter Doekes. - * For now, treat ``DeliveryMode.summary_digests`` the same as - ``.mime_digests``. - (Closes #141). Also, don't enqueue a particular digest if there are no - recipients for that digest. - * For Python versions earlier than 3.5, use a compatibility layer for a - backported smtpd module which can accept non-UTF-8 data. (Closes #140) - * Bulk emails are now decorated with headers and footers. Given by Aurélien - Bompard. (Closes #145) - * Core no longer depends on the standalone ``mock`` module. (Closes: #146) - * The logging of moderation reasons has been fixed. Given by Aurélien - Bompard. - * Collapse multiple ``Re:`` in Subject headers. Given by Mark Sapiro. - (Closes: #147) - * Added Trove classifiers to setup.py. (Closes: #152) - * Fix the processing of subscription confirmation messages when the mailing - list is set to confirm-then-moderate. (Closes #114) - * Fix ``UnicodeEncodeError`` in the hold chain when sending the authorization - email to the mailing list moderators. (Closes: #144) - * Fix traceback in approved handler when the moderator password is None. - Given by Aurélien Bompard. - * Fix IntegrityErrors raised under PostreSQL when deleting users and - addresses. Given by Aurélien Bompard. - * Allow mailing lists to have localhost names with a suffix matching the - subcommand extensions. Given by Aurélien Bompard. (Closes: #168) - * Don't traceback if a nonexistent message-id is deleted from the message - store. Given by Aurélien Bompard, tweaked by Barry Warsaw. (Closes: #167) - * Fix a bug in ``SubscriptionService.find_members()`` when searching for a - subscribed address that is not linked to a user. Given by Aurélien Bompard. - * Fix a REST server crash when trying to subscribe a user without a preferred - address. (Closes #185) - * Fix membership query when multiple users are subscribed to a mailing list. - Reported by Darrell Kresge. (Closes: #190) - * Prevent moderation of messages held for a different list. (Closes: #161) - * When approving a subscription request via the REST API, for a user who is - already a member, return an HTTP 409 Conflict code instead of the previous - server traceback (and resulting HTTP 500 code). (Closes: #193) - * In decoration URIs (e.g. ``IMailingList.header_uri`` and ``.footer_uri``) - you should now use the mailing list's List-ID instead of the - fqdn-listname. The latter is deprecated. (Closes #196) - * Trying to subscribe an address as a list owner (or moderator or nonmember) - which is already subscribed with that role produces a server error. - Originally given by Anirudh Dahiya. (Closes #198) - * Cross-posting messages held on both lists no longer fails. (Closes #176) - * Don't let unknown charsets crash the "approved" rule. Given by Aurélien - Bompard. (Closes #203) - * Don't let crashes in IArchiver plugins break handlers or runners. - (Closes #208) - * Fix "None" as display name in welcome message. Given by Aditya Divekar. - (Closes #194) - * Fix ``mailman shell`` processing of ``$PYTHONSTARTUP``. (Closes #224) - * Fix query bug for ``SubscriptionService.find_members()`` leading to the - incorrect number of members being returned. Given by Aurélien Bompard. - (Closes #227) - * Fix header match rule suffix inflation. Given by Aurélien Bompard. - (Closes #226) - * MIME digests now put the individual message/rfc822 messages inside a - multipart/digest subpart. (Closes #234) - * Nonmember subscriptions are removed when one of the addresses controlled by - a user is subscribed as a member. Given by Aditya Divekar. (Closes #237) - * Email address validation is now more compliant with RFC 5321. (Closes #266) - * A mailing list's ``description`` must not contain newlines. Given by - Aurélien Bompard. (Closes: #273) - * Allow MailingList.info to be set using the REST API. Given by Aurélien - Bompard. - * Extend header filters to also check sub-part headers. (Closes #280) - * Allow REST API to PUT and PATCH domain attributes. Allows Postorius domain - edit to work. (Closes: #290) - * Prevent posting from banned addresses. Given by Aurélien Bompard. - (Closes: #283) - * Remove the digest mbox files after the digests are sent. Given by Aurélien - Bompard. (Closes: #259) - * Transmit the moderation reason and expose it in the REST API as the - ``reason`` attribute. Given by Aurélien Bompard. - * Don't return a 500 error from the REST API when trying to handle a held - message with defective content. Given by Abhilash Raj. (Closes: #256) - * Delete subscription requests when a mailing list is deleted. Given by - Abhilash Raj. (Closes: #214) - * Messages were shunted when non-ASCII characters appeared in a mailing - list's description. Given by Mark Sapiro. (Closes: #215) - * Fix confirmation of unsubscription requests. (Closes: #294) - * Fix ``mailman stop`` not stopping some runners due to PEP 475 interaction. - (Closes: #255) - * Update documentation links for ``config.cfg`` settings. (Closes: #306) - * Disallow problematic characters in listnames. (Closes: #311) - * Forward port several content filtering fixes from the 2.1 branch. - (Closes: #330, #331, #332 and #334) +* When the mailing list's ``admin_notify_mchanges`` is True, the list owners + now get the subscription notification. (Closes: #1) +* Fix the traceback that occurred when trying to convert a ``text/html`` + subpart to plaintext via the ``mimedel`` handler. Now, a configuration + variable ``[mailman]html_to_plain_text_command`` in the ``mailman.cfg`` file + defines the command to use. It defaults to ``lynx``. (Closes: #109) +* Confirmation messages should not be ``Precedence: bulk``. (Closes #75) +* Fix constraint violations on mailing list deletes affecting PostgreSQL. + Given by Abhilash Raj. (Closes #115) +* ``mailman`` command with no subcommand now prints the help text. Given by + Abhilash Raj. (Closes #137) +* The MHonArc archiver must set stdin=PIPE when calling the subprocess. + Given by Walter Doekes. +* For now, treat ``DeliveryMode.summary_digests`` the same as + ``.mime_digests``. + (Closes #141). Also, don't enqueue a particular digest if there are no + recipients for that digest. +* For Python versions earlier than 3.5, use a compatibility layer for a + backported smtpd module which can accept non-UTF-8 data. (Closes #140) +* Bulk emails are now decorated with headers and footers. Given by Aurélien + Bompard. (Closes #145) +* Core no longer depends on the standalone ``mock`` module. (Closes: #146) +* The logging of moderation reasons has been fixed. Given by Aurélien + Bompard. +* Collapse multiple ``Re:`` in Subject headers. Given by Mark Sapiro. + (Closes: #147) +* Added Trove classifiers to setup.py. (Closes: #152) +* Fix the processing of subscription confirmation messages when the mailing + list is set to confirm-then-moderate. (Closes #114) +* Fix ``UnicodeEncodeError`` in the hold chain when sending the authorization + email to the mailing list moderators. (Closes: #144) +* Fix traceback in approved handler when the moderator password is None. + Given by Aurélien Bompard. +* Fix IntegrityErrors raised under PostreSQL when deleting users and + addresses. Given by Aurélien Bompard. +* Allow mailing lists to have localhost names with a suffix matching the + subcommand extensions. Given by Aurélien Bompard. (Closes: #168) +* Don't traceback if a nonexistent message-id is deleted from the message + store. Given by Aurélien Bompard, tweaked by Barry Warsaw. (Closes: #167) +* Fix a bug in ``SubscriptionService.find_members()`` when searching for a + subscribed address that is not linked to a user. Given by Aurélien Bompard. +* Fix a REST server crash when trying to subscribe a user without a preferred + address. (Closes #185) +* Fix membership query when multiple users are subscribed to a mailing list. + Reported by Darrell Kresge. (Closes: #190) +* Prevent moderation of messages held for a different list. (Closes: #161) +* When approving a subscription request via the REST API, for a user who is + already a member, return an HTTP 409 Conflict code instead of the previous + server traceback (and resulting HTTP 500 code). (Closes: #193) +* In decoration URIs (e.g. ``IMailingList.header_uri`` and ``.footer_uri``) + you should now use the mailing list's List-ID instead of the + fqdn-listname. The latter is deprecated. (Closes #196) +* Trying to subscribe an address as a list owner (or moderator or nonmember) + which is already subscribed with that role produces a server error. + Originally given by Anirudh Dahiya. (Closes #198) +* Cross-posting messages held on both lists no longer fails. (Closes #176) +* Don't let unknown charsets crash the "approved" rule. Given by Aurélien + Bompard. (Closes #203) +* Don't let crashes in IArchiver plugins break handlers or runners. + (Closes #208) +* Fix "None" as display name in welcome message. Given by Aditya Divekar. + (Closes #194) +* Fix ``mailman shell`` processing of ``$PYTHONSTARTUP``. (Closes #224) +* Fix query bug for ``SubscriptionService.find_members()`` leading to the + incorrect number of members being returned. Given by Aurélien Bompard. + (Closes #227) +* Fix header match rule suffix inflation. Given by Aurélien Bompard. + (Closes #226) +* MIME digests now put the individual message/rfc822 messages inside a + multipart/digest subpart. (Closes #234) +* Nonmember subscriptions are removed when one of the addresses controlled by + a user is subscribed as a member. Given by Aditya Divekar. (Closes #237) +* Email address validation is now more compliant with RFC 5321. (Closes #266) +* A mailing list's ``description`` must not contain newlines. Given by + Aurélien Bompard. (Closes: #273) +* Allow MailingList.info to be set using the REST API. Given by Aurélien + Bompard. +* Extend header filters to also check sub-part headers. (Closes #280) +* Allow REST API to PUT and PATCH domain attributes. Allows Postorius domain + edit to work. (Closes: #290) +* Prevent posting from banned addresses. Given by Aurélien Bompard. + (Closes: #283) +* Remove the digest mbox files after the digests are sent. Given by Aurélien + Bompard. (Closes: #259) +* Transmit the moderation reason and expose it in the REST API as the + ``reason`` attribute. Given by Aurélien Bompard. +* Don't return a 500 error from the REST API when trying to handle a held + message with defective content. Given by Abhilash Raj. (Closes: #256) +* Delete subscription requests when a mailing list is deleted. Given by + Abhilash Raj. (Closes: #214) +* Messages were shunted when non-ASCII characters appeared in a mailing + list's description. Given by Mark Sapiro. (Closes: #215) +* Fix confirmation of unsubscription requests. (Closes: #294) +* Fix ``mailman stop`` not stopping some runners due to PEP 475 interaction. + (Closes: #255) +* Update documentation links for ``config.cfg`` settings. (Closes: #306) +* Disallow problematic characters in listnames. (Closes: #311) +* Forward port several content filtering fixes from the 2.1 branch. + (Closes: #330, #331, #332 and #334) Configuration ------------- - * Mailing lists can now have their own header matching rules, although - site-defined rules still take precedence. Importing a Mailman 2.1 list - with header matching rules defined will create them in Mailman 3, albeit - with a few unsupported corner cases. Definition of new header matching - rules is not yet exposed through the REST API. Given by Aurélien Bompard. - * The default languages from Mailman 2.1 have been ported over. Given by - Aurélien Bompard. - * There is now a configuration setting to limit the characters that can be - used in list names. +* Mailing lists can now have their own header matching rules, although + site-defined rules still take precedence. Importing a Mailman 2.1 list + with header matching rules defined will create them in Mailman 3, albeit + with a few unsupported corner cases. Definition of new header matching + rules is not yet exposed through the REST API. Given by Aurélien Bompard. +* The default languages from Mailman 2.1 have been ported over. Given by + Aurélien Bompard. +* There is now a configuration setting to limit the characters that can be + used in list names. Command line ------------ - * ``mailman create <listname@dom.ain>`` will now create missing domains - by default. The ``-d``/``--domain`` option is kept for backward - compatibility, but now there is a ``-D``/``--no-domain`` option to prevent - missing domains from being create, forcing an error in those cases. - Given by Gurkirpal Singh. (Closes #39) - * ``mailman`` subcommands now properly commit any outstanding transactions. - (Closes #223) - * ``mailman digests`` has grown ``--verbose`` and ``-dry-run`` options. - * ``mailman shell`` now supports readline history if you set the - ``[shell]history_file`` variable in mailman.cfg. Also, many useful names - are pre-populated in the namespace of the shell. (Closes: #228) +* ``mailman create <listname@dom.ain>`` will now create missing domains + by default. The ``-d``/``--domain`` option is kept for backward + compatibility, but now there is a ``-D``/``--no-domain`` option to prevent + missing domains from being create, forcing an error in those cases. + Given by Gurkirpal Singh. (Closes #39) +* ``mailman`` subcommands now properly commit any outstanding transactions. + (Closes #223) +* ``mailman digests`` has grown ``--verbose`` and ``-dry-run`` options. +* ``mailman shell`` now supports readline history if you set the + ``[shell]history_file`` variable in mailman.cfg. Also, many useful names + are pre-populated in the namespace of the shell. (Closes: #228) Database -------- - * MySQL is now an officially supported database. Given by Abhilash Raj. - * Fix a problem with tracebacks when a PostgreSQL database is power cycled - while Mailman is still running. This ports an upstream SQLAlchemy fix to - Mailman in lieu of a future SQLAlchemy 1.2 release. (Closes: #313) +* MySQL is now an officially supported database. Given by Abhilash Raj. +* Fix a problem with tracebacks when a PostgreSQL database is power cycled + while Mailman is still running. This ports an upstream SQLAlchemy fix to + Mailman in lieu of a future SQLAlchemy 1.2 release. (Closes: #313) Interfaces ---------- - * Implement reasons for why a message is being held for moderator approval. - Given by Aurélien Bompard, tweaked by Barry Warsaw. - * The default ``postauth.txt`` and ``postheld.txt`` templates now no longer - include the inaccurate admindb and confirmation urls. - * Messages now include a ``Message-ID-Hash`` as the replacement for - ``X-Message-ID-Hash`` although the latter is still included for backward - compatibility. Also be sure that all places which add the header use the - same algorithm. (Closes #118) - * ``IMessageStore.delete_message()`` no longer raises a ``LookupError`` when - you attempt to delete a nonexistent message from the message store. - * ``ISubscriptionService.find_members()`` accepts asterisks as wildcards in - the ``subscriber`` argument string. Given by Aurélien Bompard. - * ``ISubscriptionService`` now supports mass unsubscribes. Given by Harshit - Bansal. +* Implement reasons for why a message is being held for moderator approval. + Given by Aurélien Bompard, tweaked by Barry Warsaw. +* The default ``postauth.txt`` and ``postheld.txt`` templates now no longer + include the inaccurate admindb and confirmation urls. +* Messages now include a ``Message-ID-Hash`` as the replacement for + ``X-Message-ID-Hash`` although the latter is still included for backward + compatibility. Also be sure that all places which add the header use the + same algorithm. (Closes #118) +* ``IMessageStore.delete_message()`` no longer raises a ``LookupError`` when + you attempt to delete a nonexistent message from the message store. +* ``ISubscriptionService.find_members()`` accepts asterisks as wildcards in + the ``subscriber`` argument string. Given by Aurélien Bompard. +* ``ISubscriptionService`` now supports mass unsubscribes. Given by Harshit + Bansal. Message handling ---------------- - * New DMARC mitigations have been added. Given by Mark Sapiro. (Closes #247) - * New placeholders have been added for message headers and footers. You can - use a placeholder of the format ``$<archiver-name>_url`` to insert the - permalink to the message in the named archiver, for any archiver enabled - for the mailing list. Given by Abhilash Raj. - * The default posting chain has been modified so that the header-match chain - and nonmember-moderation rule are processed before "hold" rules are - processed. This allows for better anti-spam defenses and rejecting - non-member posts instead of always holding them for moderator review. - Given by Aurélien Bompard. (Closes #163) - * Bounces can now contain rejection messages. Given by Aurélien Bompard. - * The ``moderation_action`` for members and nonmember can now be ``None`` - which signals falling back to the appropriate list default action, - e.g. ``default_member_action`` and ``default_nonmember_action``. Given by - Aurélien Bompard. (Closes #189) - * Ensure that postings from alternative emails aren't held for moderator - approval. For example, if a user is subscribed with one email but posts - with a second email that they control, the message should be processed as - a posting from a member. Given by Aditya Divekar. (Closes #222) - * The default message footer has been improved to include a way to - unsubscribe via the ``-leave`` address. Given by Francesco Ariis. +* New DMARC mitigations have been added. Given by Mark Sapiro. (Closes #247) +* New placeholders have been added for message headers and footers. You can + use a placeholder of the format ``$<archiver-name>_url`` to insert the + permalink to the message in the named archiver, for any archiver enabled + for the mailing list. Given by Abhilash Raj. +* The default posting chain has been modified so that the header-match chain + and nonmember-moderation rule are processed before "hold" rules are + processed. This allows for better anti-spam defenses and rejecting + non-member posts instead of always holding them for moderator review. + Given by Aurélien Bompard. (Closes #163) +* Bounces can now contain rejection messages. Given by Aurélien Bompard. +* The ``moderation_action`` for members and nonmember can now be ``None`` + which signals falling back to the appropriate list default action, + e.g. ``default_member_action`` and ``default_nonmember_action``. Given by + Aurélien Bompard. (Closes #189) +* Ensure that postings from alternative emails aren't held for moderator + approval. For example, if a user is subscribed with one email but posts + with a second email that they control, the message should be processed as + a posting from a member. Given by Aditya Divekar. (Closes #222) +* The default message footer has been improved to include a way to + unsubscribe via the ``-leave`` address. Given by Francesco Ariis. REST ---- - * REST API version 3.1 introduced. Mostly backward compatible with version - 3.0 except that UUIDs are represented as hex strings instead of 128-bit - integers, since the latter are not compatible with all versions of - JavaScript. (Closes #121) - * REST clients must minimally support HTTP/1.1. (Closes #288) - * Experimental Gunicorn support. See ``contrib/gunicorn.py`` docstring for - details. With assistance from Eric Searcy. (Closes #287) - * The new template system is introduced for API 3.1. See - ``src/mailman/rest/docs/templates.rst`` for details. (Closes #249) - * When creating a user via REST using an address that already exists, but - isn't linked, the address is linked to the new user. Given by Aurélien - Bompard. - * The REST API incorrectly parsed ``is_server_owner`` values when given - explicitly in the POST that creates a user. (Closes #136) - * A new top-level resource ``<api>/owners`` can be used to get the list of - server owners as ``IUser`` s. (Closes #135) - * By POSTing to a user resource with an existing unlinked address, you can - link the address to the user. Given by Abhilash Raj. - * Fix pagination values ``start`` and ``total_size`` in the REST API. Given - by Aurélien Bompard. (Closes: #154) - * JSON representations for held message now include a ``self_link``. - * When ``[devmode]enabled`` is set, the JSON output is sorted. Given by - Aurélien Bompard. - * A member's moderation action can be changed via the REST API. Given by - Aurélien Bompard. - * Fixed a number of corner cases for the return codes when PUTing or PATCHing - list configuration variables. (Closes: #182) - * Expose ``digest_send_periodic``, ``digest_volume_frequency``, and - ``digests_enabled`` (renamed from ``digestable``) to the REST API. - (Closes: #159) - * Expose the "bump digest" and "send digest" functionality though the REST - API via the ``<api>/lists/<list-id>/digest`` end-point. GETting this - resource returns the ``next_digest_number`` and ``volume`` as the same - values accessible through the list's configuraiton resource. POSTing to - the resource with either ``send=True``, ``bump=True``, or both invokes the - given action. - * Global and list-centric bans can now be managed through the REST API. - Given by Aurélien Bompard. - * ``<api>/members/find`` accepts GET query parameters in addition to POST - arguments. Given by Aurélien Bompard. - * Header match rules for individual mailing lists are now exposed in the REST - API. Given by Aurélien Bompard. (Closes: #192) - * Expose ``goodbye_message_uri`` in the REST API. Given by Harshit Bansal. - * New subscription requests are rejected if there is already one pending. - With thanks to Anirudh Dahiya. (Closes #199) - * Expose the system pipelines and chains via ``<api>/system/pipelines`` and - ``<api>/system/chains`` respectively. Given by Simon Hanna. (Closes #66) - * Support mass unsubscription of members via ``DELETE`` on the - ``<api>/lists/<list-id>/roster/member`` resource. Given by Harshit - Bansal. (Closes #171) - * It is now possible to merge users when creating them via REST. When you - POST to ``<api>/users/<address>/addresses`` and the address given in the - ``email`` parameter already exists, instead of getting a 400 error, if you - set ``absorb_existing=True`` in the POST data, the existing user will be - merged into the newly created on. Given by Aurélien Bompard. - * Port to Falcon 1.0 (Closes #20) - * A member's ``moderation_action`` can be reset, allowing fallback to the - list's ``default_member_action`` by setting the attribute to the empty - string in the REST API. Given by Aurélien Bompard. - * A list's ``moderator_password`` can be set via the REST API. Given by - Andrew Breksa. (Closes #207) - * The ban manager now returns a pageable, sorted sequence. Given by Amit and - Aurélien Bompard. (Closes #284) - * Query parameters now allow you to filter mailing lists by the - ``advertised`` boolean parameter. Given by Aurélien Bompard. - * Only the system-enabled archivers are returned in the REST API. Given by - Aurélien Bompard. - * **Backward incompatibility: mild** Held message resources now have an - ``original_subject`` key which is the raw value of the ``Subject:`` header - (i.e. without any RFC 2047 decoding). The ``subject`` key is RFC 2047 - decoded. Given by Simon Hanna. (Closes #219) +* REST API version 3.1 introduced. Mostly backward compatible with version + 3.0 except that UUIDs are represented as hex strings instead of 128-bit + integers, since the latter are not compatible with all versions of + JavaScript. (Closes #121) +* REST clients must minimally support HTTP/1.1. (Closes #288) +* Experimental Gunicorn support. See ``contrib/gunicorn.py`` docstring for + details. With assistance from Eric Searcy. (Closes #287) +* The new template system is introduced for API 3.1. See + ``src/mailman/rest/docs/templates.rst`` for details. (Closes #249) +* When creating a user via REST using an address that already exists, but + isn't linked, the address is linked to the new user. Given by Aurélien + Bompard. +* The REST API incorrectly parsed ``is_server_owner`` values when given + explicitly in the POST that creates a user. (Closes #136) +* A new top-level resource ``<api>/owners`` can be used to get the list of + server owners as ``IUser`` s. (Closes #135) +* By POSTing to a user resource with an existing unlinked address, you can + link the address to the user. Given by Abhilash Raj. +* Fix pagination values ``start`` and ``total_size`` in the REST API. Given + by Aurélien Bompard. (Closes: #154) +* JSON representations for held message now include a ``self_link``. +* When ``[devmode]enabled`` is set, the JSON output is sorted. Given by + Aurélien Bompard. +* A member's moderation action can be changed via the REST API. Given by + Aurélien Bompard. +* Fixed a number of corner cases for the return codes when PUTing or PATCHing + list configuration variables. (Closes: #182) +* Expose ``digest_send_periodic``, ``digest_volume_frequency``, and + ``digests_enabled`` (renamed from ``digestable``) to the REST API. + (Closes: #159) +* Expose the "bump digest" and "send digest" functionality though the REST + API via the ``<api>/lists/<list-id>/digest`` end-point. GETting this + resource returns the ``next_digest_number`` and ``volume`` as the same + values accessible through the list's configuraiton resource. POSTing to + the resource with either ``send=True``, ``bump=True``, or both invokes the + given action. +* Global and list-centric bans can now be managed through the REST API. + Given by Aurélien Bompard. +* ``<api>/members/find`` accepts GET query parameters in addition to POST + arguments. Given by Aurélien Bompard. +* Header match rules for individual mailing lists are now exposed in the REST + API. Given by Aurélien Bompard. (Closes: #192) +* Expose ``goodbye_message_uri`` in the REST API. Given by Harshit Bansal. +* New subscription requests are rejected if there is already one pending. + With thanks to Anirudh Dahiya. (Closes #199) +* Expose the system pipelines and chains via ``<api>/system/pipelines`` and + ``<api>/system/chains`` respectively. Given by Simon Hanna. (Closes #66) +* Support mass unsubscription of members via ``DELETE`` on the + ``<api>/lists/<list-id>/roster/member`` resource. Given by Harshit + Bansal. (Closes #171) +* It is now possible to merge users when creating them via REST. When you + POST to ``<api>/users/<address>/addresses`` and the address given in the + ``email`` parameter already exists, instead of getting a 400 error, if you + set ``absorb_existing=True`` in the POST data, the existing user will be + merged into the newly created on. Given by Aurélien Bompard. +* Port to Falcon 1.0 (Closes #20) +* A member's ``moderation_action`` can be reset, allowing fallback to the + list's ``default_member_action`` by setting the attribute to the empty + string in the REST API. Given by Aurélien Bompard. +* A list's ``moderator_password`` can be set via the REST API. Given by + Andrew Breksa. (Closes #207) +* The ban manager now returns a pageable, sorted sequence. Given by Amit and + Aurélien Bompard. (Closes #284) +* Query parameters now allow you to filter mailing lists by the + ``advertised`` boolean parameter. Given by Aurélien Bompard. +* Only the system-enabled archivers are returned in the REST API. Given by + Aurélien Bompard. +* **Backward incompatibility: mild** Held message resources now have an + ``original_subject`` key which is the raw value of the ``Subject:`` header + (i.e. without any RFC 2047 decoding). The ``subject`` key is RFC 2047 + decoded. Given by Simon Hanna. (Closes #219) Other ----- - * Add official support for Python 3.5 and 3.6. (Closes #295) - * A handful of unused legacy exceptions have been removed. The redundant - ``MailmanException`` has been removed; use ``MailmanError`` everywhere. - * Drop the use of the ``lazr.smtptest`` library, which is based on the - asynchat/asyncore-based smtpd.py stdlib module. Instead, use the - asyncio-based `aiosmtpd <http://aiosmtpd.readthedocs.io/>`_ package. - * Improvements in importing Mailman 2.1 lists, given by Aurélien Bompard. - * The ``prototype`` archiver is not web accessible so it does not have a - ``list_url`` or permalink. Given by Aurélien Bompard. - * Large performance improvement in ``SubscriptionService.find_members()``. - Given by Aurélien Bompard. - * Rework the digest machinery, and add a new ``digests`` subcommand, which - can be used from the command line or cron to immediately send out any - partially collected digests, or bump the digest and volume numbers. - * The mailing list "data directory" has been renamed. Instead of using the - fqdn listname, the subdirectory inside ``[paths]list_data_dir`` now uses - the List-ID. - * The ``mailman members`` command can now be used to display members based on - subscription roles. Also, the positional "list" argument can now accept - list names or list-ids. - * Unsubscriptions can now be confirmed and/or moderated. (Closes #213) +* Add official support for Python 3.5 and 3.6. (Closes #295) +* A handful of unused legacy exceptions have been removed. The redundant + ``MailmanException`` has been removed; use ``MailmanError`` everywhere. +* Drop the use of the ``lazr.smtptest`` library, which is based on the + asynchat/asyncore-based smtpd.py stdlib module. Instead, use the + asyncio-based `aiosmtpd <http://aiosmtpd.readthedocs.io/>`_ package. +* Improvements in importing Mailman 2.1 lists, given by Aurélien Bompard. +* The ``prototype`` archiver is not web accessible so it does not have a + ``list_url`` or permalink. Given by Aurélien Bompard. +* Large performance improvement in ``SubscriptionService.find_members()``. + Given by Aurélien Bompard. +* Rework the digest machinery, and add a new ``digests`` subcommand, which + can be used from the command line or cron to immediately send out any + partially collected digests, or bump the digest and volume numbers. +* The mailing list "data directory" has been renamed. Instead of using the + fqdn listname, the subdirectory inside ``[paths]list_data_dir`` now uses + the List-ID. +* The ``mailman members`` command can now be used to display members based on + subscription roles. Also, the positional "list" argument can now accept + list names or list-ids. +* Unsubscriptions can now be confirmed and/or moderated. (Closes #213) 3.0.0 -- "Show Don't Tell" @@ -319,77 +329,77 @@ Other Architecture ------------ - * Domains now have a list of owners, which are ``IUser`` objects, instead of - the single ``contact_address`` they used to have. ``IUser`` objects now - also have a ``is_server_owner`` flag (defaulting to False) to indicate - whether they have superuser privileges. Give by Abhliash Raj, with fixes - and refinements by Barry Warsaw. (LP: #1423756) - * Mailing list subscription policy work flow has been completely rewritten. - It now properly supports email verification and subscription confirmation - by the user, and approval by the moderator using unique tokens. - ``IMailingList`` objects now have a ``subscription_policy`` attribute. - (LP: #1095552) - * Port the REST machinery to Falcon 0.3. (LP: #1446881) +* Domains now have a list of owners, which are ``IUser`` objects, instead of + the single ``contact_address`` they used to have. ``IUser`` objects now + also have a ``is_server_owner`` flag (defaulting to False) to indicate + whether they have superuser privileges. Give by Abhliash Raj, with fixes + and refinements by Barry Warsaw. (LP: #1423756) +* Mailing list subscription policy work flow has been completely rewritten. + It now properly supports email verification and subscription confirmation + by the user, and approval by the moderator using unique tokens. + ``IMailingList`` objects now have a ``subscription_policy`` attribute. + (LP: #1095552) +* Port the REST machinery to Falcon 0.3. (LP: #1446881) Bugs ---- - * Fix calculation of default configuration file to use when the ``$var_dir`` - is created by ``mailman start``. (LP: #1411435) - * When creating a user with an email address, do not create the user record - if the email address already exists. Given by Andrew Stuart. - (LP: #1418280) - * When deleting a user via REST, make sure all linked addresses are deleted. - Found by Andrew Stuart. (LP: #1419519) - * When trying to subscribe an address to a mailing list through the REST API - where a case-differing version of the address is already subscribed, return - a 409 error instead of a 500 error. Found by Ankush Sharma. (LP: #1425359) - * ``mailman lists --domain`` was not properly handling its arguments. Given - by Manish Gill. (LP: #1166911) - * When deleting a user object, make sure their preferences are also deleted. - Given by Abhishek. (LP: #1418276) - * Be sure a mailing list's acceptable aliases are deleted when the mailing - list itself is deleted. (LP: #1432239) - * The built-in example ``IArchiver`` implementations now explicitly return - None. (LP: #1203359) - * The test suite now runs successfully again with PostgreSQL. Given by - Aurélien Bompard. (LP: #1435941) +* Fix calculation of default configuration file to use when the ``$var_dir`` + is created by ``mailman start``. (LP: #1411435) +* When creating a user with an email address, do not create the user record + if the email address already exists. Given by Andrew Stuart. + (LP: #1418280) +* When deleting a user via REST, make sure all linked addresses are deleted. + Found by Andrew Stuart. (LP: #1419519) +* When trying to subscribe an address to a mailing list through the REST API + where a case-differing version of the address is already subscribed, return + a 409 error instead of a 500 error. Found by Ankush Sharma. (LP: #1425359) +* ``mailman lists --domain`` was not properly handling its arguments. Given + by Manish Gill. (LP: #1166911) +* When deleting a user object, make sure their preferences are also deleted. + Given by Abhishek. (LP: #1418276) +* Be sure a mailing list's acceptable aliases are deleted when the mailing + list itself is deleted. (LP: #1432239) +* The built-in example ``IArchiver`` implementations now explicitly return + None. (LP: #1203359) +* The test suite now runs successfully again with PostgreSQL. Given by + Aurélien Bompard. (LP: #1435941) Configuration ------------- - * When specifying a file system path in the [paths.*] section, $cfg_file can - be used to expand into the path of the ``-C`` option if given. In the - default ``[paths.dev]`` section, ``$var_dir`` is now specified relative to - ``$cfg_file`` so that it won't accidentally be relative to the current - working directory, if ``-C`` is given. - * ``$cwd`` is now an additional substitution variable for the ``mailman.cfg`` - file's ``[paths.*]`` sections. A new ``[paths.here]`` section is added, - which puts the ``var_dir`` in ``$cwd``. It is made the default layout. +* When specifying a file system path in the [paths.*] section, $cfg_file can + be used to expand into the path of the ``-C`` option if given. In the + default ``[paths.dev]`` section, ``$var_dir`` is now specified relative to + ``$cfg_file`` so that it won't accidentally be relative to the current + working directory, if ``-C`` is given. +* ``$cwd`` is now an additional substitution variable for the ``mailman.cfg`` + file's ``[paths.*]`` sections. A new ``[paths.here]`` section is added, + which puts the ``var_dir`` in ``$cwd``. It is made the default layout. Documentation ------------- - * Improve the documentation describing how to run Alembic to add new schema - migrations. Given by Abhilash Raj. +* Improve the documentation describing how to run Alembic to add new schema + migrations. Given by Abhilash Raj. REST ---- - * **Backward incompatible change**: The JSON representation for pending - mailing list subscription hold now no longer includes the ``password`` - key. Also, the ``address`` key has been renamed ``email`` for consistent - terminology and other usage. - * You can now view the contents of, inject messages into, and delete messages - from the various queue directories via the ``<api>/queues`` resource. - * You can now DELETE an address. If the address is linked to a user, the - user is not delete, it is just unlinked. - * A new API is provided to support non-production testing infrastructures, - allowing a client to cull all orphaned UIDs via ``DELETE`` on - ``<api>/reserved/uids/orphans``. Note that *no guarantees* of API - stability will ever be made for resources under ``reserved``. - (LP: #1420083) - * Domains can now optionally be created with owners; domain owners can be - added after the fact; domain owners can be deleted. Also, users now have - an ``is_server_owner`` flag as part of their representation, which defaults - to False, and can be PUT and PATCH'd. Given by Abhilash Raj, with fixes - and refinements by Barry Warsaw. (LP: #1423756) +* **Backward incompatible change**: The JSON representation for pending + mailing list subscription hold now no longer includes the ``password`` + key. Also, the ``address`` key has been renamed ``email`` for consistent + terminology and other usage. +* You can now view the contents of, inject messages into, and delete messages + from the various queue directories via the ``<api>/queues`` resource. +* You can now DELETE an address. If the address is linked to a user, the + user is not delete, it is just unlinked. +* A new API is provided to support non-production testing infrastructures, + allowing a client to cull all orphaned UIDs via ``DELETE`` on + ``<api>/reserved/uids/orphans``. Note that *no guarantees* of API + stability will ever be made for resources under ``reserved``. + (LP: #1420083) +* Domains can now optionally be created with owners; domain owners can be + added after the fact; domain owners can be deleted. Also, users now have + an ``is_server_owner`` flag as part of their representation, which defaults + to False, and can be PUT and PATCH'd. Given by Abhilash Raj, with fixes + and refinements by Barry Warsaw. (LP: #1423756) 3.0 beta 5 -- "Carve Away The Stone" @@ -398,77 +408,77 @@ REST Bugs ---- - * Fixed Unicode errors in the digest runner and when sending messages to the - site owner as a fallback. Given by Aurélien Bompard. (LP: #1130957). - * Fixed Unicode errors when a message being added to the digest has non-ascii - characters in its payload, but no Content-Type header defining a charset. - Given by Aurélien Bompard. (LP: #1170347) - * Fixed messages without a `text/plain` part crashing the `Approved` rule. - Given by Aurélien Bompard. (LP: #1158721) - * Fixed getting non-ASCII filenames from RFC 2231 i18n'd messages. Given by - Aurélien Bompard. (LP: #1060951) - * Fixed `AttributeError` on MIME digest messages. Given by Aurélien Bompard. - (LP: #1130696) +* Fixed Unicode errors in the digest runner and when sending messages to the + site owner as a fallback. Given by Aurélien Bompard. (LP: #1130957). +* Fixed Unicode errors when a message being added to the digest has non-ascii + characters in its payload, but no Content-Type header defining a charset. + Given by Aurélien Bompard. (LP: #1170347) +* Fixed messages without a `text/plain` part crashing the `Approved` rule. + Given by Aurélien Bompard. (LP: #1158721) +* Fixed getting non-ASCII filenames from RFC 2231 i18n'd messages. Given by + Aurélien Bompard. (LP: #1060951) +* Fixed `AttributeError` on MIME digest messages. Given by Aurélien Bompard. + (LP: #1130696) Commands -------- - * The `mailman conf` command no longer takes the `-t/--sort` option; the - output is always sorted. +* The `mailman conf` command no longer takes the `-t/--sort` option; the + output is always sorted. Configuration ------------- - * The ``[database]migrations_path`` setting is removed. +* The ``[database]migrations_path`` setting is removed. Database -------- - * The ORM layer, previously implemented with Storm, has been replaced by - SQLAlchemy, thanks to the fantastic work by Abhilash Raj and Aurélien - Bompard. Alembic is now used for all database schema migrations. - * The new logger `mailman.database` logs any errors at the database layer. +* The ORM layer, previously implemented with Storm, has been replaced by + SQLAlchemy, thanks to the fantastic work by Abhilash Raj and Aurélien + Bompard. Alembic is now used for all database schema migrations. +* The new logger `mailman.database` logs any errors at the database layer. Development ----------- - * Python 3.4 is now the minimum requirement. - * You no longer have to create a virtual environment separately when running - the test suite. Just use `tox`. - * You no longer have to edit `src/mailman/testing/testing.cfg` to run the - test suite against PostgreSQL. See `src/mailman/docs/START.rst` for - details. +* Python 3.4 is now the minimum requirement. +* You no longer have to create a virtual environment separately when running + the test suite. Just use `tox`. +* You no longer have to edit `src/mailman/testing/testing.cfg` to run the + test suite against PostgreSQL. See `src/mailman/docs/START.rst` for + details. Interfaces ---------- - * The RFC 2369 headers added to outgoing messages are now added in sorted - order. - * Several changes to the internal API: +* The RFC 2369 headers added to outgoing messages are now added in sorted + order. +* Several changes to the internal API: - - `IListManager.mailing_lists` is guaranteed to be sorted in List-ID order. - - `IDomains.mailing_lists` is guaranteed to be sorted in List-ID order. - - Iteration over domains via the `IDomainManager` is guaranteed to be sorted - by `IDomain.mail_host` order. - - `ITemporaryDatabase` interface and all implementations are removed. + - `IListManager.mailing_lists` is guaranteed to be sorted in List-ID order. + - `IDomains.mailing_lists` is guaranteed to be sorted in List-ID order. + - Iteration over domains via the `IDomainManager` is guaranteed to be sorted + by `IDomain.mail_host` order. + - `ITemporaryDatabase` interface and all implementations are removed. REST ---- - * The Falcon Framework has replaced restish as the REST layer. This is an - internal change only. - * The JSON representation `http_etag` key uses an algorithm that is - insensitive to Python's dictionary sort order. - * The address resource now has an additional '/user' sub-resource which can - be used to GET the address's linked user if there is one. This - sub-resource also supports POST to link an unlinked address (with an - optional 'auto_create' flag), and PUT to link the address to a different - user. It also supports DELETE to unlink the address. (LP: #1312884) - Given by Aurélien Bompard based on work by Nicolas Karageuzian. - * The ``/3.0/system`` path is deprecated; use ``/3.0/system/versions`` to get - the system version information. - * You can access the system configuration via the resource path - ``/3.0/system/configuration/<section>``. This returns a dictionary with - the keys being the section's variables and the values being their value - from ``mailman.cfg`` as verbatim strings. You can get a list of all - section names via ``/3.0/system/configuration`` which returns a dictionary - containing the ``http_etag`` and the section names as a sorted list under - the ``sections`` key. The system configuration resource is read-only. - * Member resource JSON now include the ``member_id`` as a separate key. +* The Falcon Framework has replaced restish as the REST layer. This is an + internal change only. +* The JSON representation `http_etag` key uses an algorithm that is + insensitive to Python's dictionary sort order. +* The address resource now has an additional '/user' sub-resource which can + be used to GET the address's linked user if there is one. This + sub-resource also supports POST to link an unlinked address (with an + optional 'auto_create' flag), and PUT to link the address to a different + user. It also supports DELETE to unlink the address. (LP: #1312884) + Given by Aurélien Bompard based on work by Nicolas Karageuzian. +* The ``/3.0/system`` path is deprecated; use ``/3.0/system/versions`` to get + the system version information. +* You can access the system configuration via the resource path + ``/3.0/system/configuration/<section>``. This returns a dictionary with + the keys being the section's variables and the values being their value + from ``mailman.cfg`` as verbatim strings. You can get a list of all + section names via ``/3.0/system/configuration`` which returns a dictionary + containing the ``http_etag`` and the section names as a sorted list under + the ``sections`` key. The system configuration resource is read-only. +* Member resource JSON now include the ``member_id`` as a separate key. 3.0 beta 4 -- "Time and Motion" @@ -477,73 +487,73 @@ REST Development ----------- - * Mailman 3 no longer uses ``zc.buildout`` and tests are now run by the - ``nose2`` test runner. See ``src/mailman/docs/START.rst`` for details on - how to build Mailman and run the test suite. Also, use ``-P`` to select a - test pattern and ``-E`` to enable stderr debugging in runners. - * Use the ``enum34`` package instead of ``flufl.enum``. - * Use ``setuptools`` instead of ``distribute``, since the latter is defunct. +* Mailman 3 no longer uses ``zc.buildout`` and tests are now run by the + ``nose2`` test runner. See ``src/mailman/docs/START.rst`` for details on + how to build Mailman and run the test suite. Also, use ``-P`` to select a + test pattern and ``-E`` to enable stderr debugging in runners. +* Use the ``enum34`` package instead of ``flufl.enum``. +* Use ``setuptools`` instead of ``distribute``, since the latter is defunct. REST ---- - * Add ``reply_to_address`` and ``first_strip_reply_to`` as writable - attributes of a mailing list's configuration. (LP: #1157881) - * Support pagination of some large collections (lists, users, members). - [Florian Fuchs] (LP: #1156529) - * Expose ``hide_address`` to the ``.../preferences`` REST API. - [Sneha Priscilla.] (LP: #1203519) - * Mailing lists can now individually enable or disable any archiver available - site-wide. [Joanna Skrzeszewska] (LP: #1158040) - * Addresses can be added to existing users, including display names, via the - REST API. [Florian Fuchs] - * Fixed a crash in the REST server when searching for nonmembers via - ``/find`` which we've never seen before, because those members only have an - address record, not a user record. This requires a small change in the API - where the JSON response's ``address`` key now contains the URL to the - address resource, the new ``email`` key contains the email address as a - string, and the ``user`` key is optional. +* Add ``reply_to_address`` and ``first_strip_reply_to`` as writable + attributes of a mailing list's configuration. (LP: #1157881) +* Support pagination of some large collections (lists, users, members). + [Florian Fuchs] (LP: #1156529) +* Expose ``hide_address`` to the ``.../preferences`` REST API. + [Sneha Priscilla.] (LP: #1203519) +* Mailing lists can now individually enable or disable any archiver available + site-wide. [Joanna Skrzeszewska] (LP: #1158040) +* Addresses can be added to existing users, including display names, via the + REST API. [Florian Fuchs] +* Fixed a crash in the REST server when searching for nonmembers via + ``/find`` which we've never seen before, because those members only have an + address record, not a user record. This requires a small change in the API + where the JSON response's ``address`` key now contains the URL to the + address resource, the new ``email`` key contains the email address as a + string, and the ``user`` key is optional. Commands -------- - * `mailman conf` now has a `-t/--sort` flag which sorts the output by section - and then key. [Karl-Aksel Puulmann and David Soto] (LP: 1162492) - * Greatly improve the fidelity of the Mailman 2.1 list importer functionality - (i.e. ``mailman import21``). [Aurélien Bompard]. +* `mailman conf` now has a `-t/--sort` flag which sorts the output by section + and then key. [Karl-Aksel Puulmann and David Soto] (LP: 1162492) +* Greatly improve the fidelity of the Mailman 2.1 list importer functionality + (i.e. ``mailman import21``). [Aurélien Bompard]. Configuration ------------- - * Add support for the Exim 4 MTA. [Stephen Turnbull] - * When creating the initial file system layout in ``var``, e.g. via - ``bin/mailman info``, add an ``var/etc/mailman.cfg`` file if one does not - already exist. Also, when initializing the system, look for that file as - the configuration file, just after ``./mailman.cfg`` and before - ``~/.mailman.cfg``. (LP: #1157861) +* Add support for the Exim 4 MTA. [Stephen Turnbull] +* When creating the initial file system layout in ``var``, e.g. via + ``bin/mailman info``, add an ``var/etc/mailman.cfg`` file if one does not + already exist. Also, when initializing the system, look for that file as + the configuration file, just after ``./mailman.cfg`` and before + ``~/.mailman.cfg``. (LP: #1157861) Database -------- - * The `bounceevent` table now uses list-ids to cross-reference the mailing - list, to match other tables. Similarly for the `IBounceEvent` interface. - * Added a `listarchiver` table to support list-specific archivers. +* The `bounceevent` table now uses list-ids to cross-reference the mailing + list, to match other tables. Similarly for the `IBounceEvent` interface. +* Added a `listarchiver` table to support list-specific archivers. Bugs ---- - * Non-queue runners should not create ``var/queue`` subdirectories. - [Sandesh Kumar Agrawal] (LP: #1095422) - * Creation of lists with upper case names should be coerced to lower case. - (LP: #1117176) - * Fix REST server crash on `mailman reopen` due to no interception of - signals. (LP: #1184376) - * Add `subject_prefix` to the `IMailingList` interface, and clarify the - docstring for `display_name`. (LP: #1181498) - * Fix importation from MM2.1 to MM3 of the archive policy. - [Aurélien Bompard] (LP: #1227658) - * Fix non-member moderation rule to prefer a member sender if both members - and non-members are in the message's sender list. [Aurélien Bompard] - (LP: #1291452) - * Fix IntegrityError (against PostgreSQL) when deleting a list with content - filters. [Aurélien Bompard] (LP: #1117174) - * Fix test isolation bug in ``languages.rst``. - [Piotr Kasprzyk] (LP: #1308769) +* Non-queue runners should not create ``var/queue`` subdirectories. + [Sandesh Kumar Agrawal] (LP: #1095422) +* Creation of lists with upper case names should be coerced to lower case. + (LP: #1117176) +* Fix REST server crash on `mailman reopen` due to no interception of + signals. (LP: #1184376) +* Add `subject_prefix` to the `IMailingList` interface, and clarify the + docstring for `display_name`. (LP: #1181498) +* Fix importation from MM2.1 to MM3 of the archive policy. + [Aurélien Bompard] (LP: #1227658) +* Fix non-member moderation rule to prefer a member sender if both members + and non-members are in the message's sender list. [Aurélien Bompard] + (LP: #1291452) +* Fix IntegrityError (against PostgreSQL) when deleting a list with content + filters. [Aurélien Bompard] (LP: #1117174) +* Fix test isolation bug in ``languages.rst``. + [Piotr Kasprzyk] (LP: #1308769) 3.0 beta 3 -- "Here Again" @@ -552,110 +562,110 @@ Bugs Compatibility ------------- - * Python 2.7 is now required. Python 2.6 is no longer officially supported. - The code base is now also `python2.7 -3` clean, although there are still - some warnings in 3rd party dependencies. (LP: #1073506) +* Python 2.7 is now required. Python 2.6 is no longer officially supported. + The code base is now also `python2.7 -3` clean, although there are still + some warnings in 3rd party dependencies. (LP: #1073506) REST ---- - * **API change**: The JSON representation for held messages no longer - includes the `data` key. The values in this dictionary are flatted into - the top-level JSON representation. The `key` key is remove since it's - redundant. Use `message_id` for held messages, and `address` for held - subscriptions/unsubscriptions. The following `_mod_*` keys are inserted - without the `_mod_` prefix: +* **API change**: The JSON representation for held messages no longer + includes the `data` key. The values in this dictionary are flatted into + the top-level JSON representation. The `key` key is remove since it's + redundant. Use `message_id` for held messages, and `address` for held + subscriptions/unsubscriptions. The following `_mod_*` keys are inserted + without the `_mod_` prefix: - - `_mod_subject` -> `subject` - - `_mod_hold_date` -> `hold_date` - - `_mod_reason` -> `reason` - - `_mod_sender` -> `sender` - - `_mod_message_id` -> `message_id` + - `_mod_subject` -> `subject` + - `_mod_hold_date` -> `hold_date` + - `_mod_reason` -> `reason` + - `_mod_sender` -> `sender` + - `_mod_message_id` -> `message_id` - * List styles are supported through the REST API. Get the list of available - styles (by name) via `.../lists/styles`. Create a list in a specific style - by using POST data `style_name=<style>`. (LP: #975692) - * Allow the getting/setting of IMailingList.subject_prefix via the REST API - (given by Terri Oda). (LP: #1062893) - * Expose a REST API for membership change (subscriptions and unsubscriptions) - moderation. (LP: #1090753) - * Add list_id to JSON representation for a mailing list (given by Jimmy - Bergman). - * The canonical resource for a mailing list (and thus its self_link) is now - the URL with the list-id. To reference a mailing list, the list-id url is - preferred, but for backward compatibility, the posting address is still - accepted. - * You can now PUT and PATCH on user resources to change the user's display - name or password. For passwords, you pass in the clear text password and - Mailman will hash it before storing. - * You can now verify and unverify an email address through the REST API. - POST to .../addresses/<email>/verify and .../addresses/<email>/unverify - respectively. The POST data is ignored. It is not an error to verify or - unverify an address more than once, but verifying an already verified - address does not change its `.verified_on` date. (LP: #1054730) - * Deleting a user through the REST API also deletes all the user's linked - addresses and memberships. (LP: #1074374) - * A user's password can be verified by POSTing to .../user/<id>/login. The - data must contain a single parameter `cleartext_password` and if this - matches, a 204 (No Content) will be returned, otherwise a 403 (Forbidden) - is returned. (LP: #1065447) +* List styles are supported through the REST API. Get the list of available + styles (by name) via `.../lists/styles`. Create a list in a specific style + by using POST data `style_name=<style>`. (LP: #975692) +* Allow the getting/setting of IMailingList.subject_prefix via the REST API + (given by Terri Oda). (LP: #1062893) +* Expose a REST API for membership change (subscriptions and unsubscriptions) + moderation. (LP: #1090753) +* Add list_id to JSON representation for a mailing list (given by Jimmy + Bergman). +* The canonical resource for a mailing list (and thus its self_link) is now + the URL with the list-id. To reference a mailing list, the list-id url is + preferred, but for backward compatibility, the posting address is still + accepted. +* You can now PUT and PATCH on user resources to change the user's display + name or password. For passwords, you pass in the clear text password and + Mailman will hash it before storing. +* You can now verify and unverify an email address through the REST API. + POST to .../addresses/<email>/verify and .../addresses/<email>/unverify + respectively. The POST data is ignored. It is not an error to verify or + unverify an address more than once, but verifying an already verified + address does not change its `.verified_on` date. (LP: #1054730) +* Deleting a user through the REST API also deletes all the user's linked + addresses and memberships. (LP: #1074374) +* A user's password can be verified by POSTing to .../user/<id>/login. The + data must contain a single parameter `cleartext_password` and if this + matches, a 204 (No Content) will be returned, otherwise a 403 (Forbidden) + is returned. (LP: #1065447) Configuration ------------- - * `[passlib]path` configuration variable renamed to `[passlib]configuration`. - * Postfix-specific configurations in the `[mta]` section are moved to a - separate file, named by the `[mta]configuration` variable. - * In the new `postfix.cfg` file, `postfix_map_cmd` is renamed to - `postmap_command`. - * The default list style is renamed to `legacy-default` and a new - `legacy-announce` style is added. This is similar to the `legacy-default` - except set up for announce-only lists. +* `[passlib]path` configuration variable renamed to `[passlib]configuration`. +* Postfix-specific configurations in the `[mta]` section are moved to a + separate file, named by the `[mta]configuration` variable. +* In the new `postfix.cfg` file, `postfix_map_cmd` is renamed to + `postmap_command`. +* The default list style is renamed to `legacy-default` and a new + `legacy-announce` style is added. This is similar to the `legacy-default` + except set up for announce-only lists. Database -------- - * The `ban` table now uses list-ids to cross-reference the mailing list, - since these cannot change even if the mailing list is moved or renamed. - * The following columns were unused and have been removed: +* The `ban` table now uses list-ids to cross-reference the mailing list, + since these cannot change even if the mailing list is moved or renamed. +* The following columns were unused and have been removed: - - `mailinglist.new_member_options` - - `mailinglist.send_reminders` - - `mailinglist.subscribe_policy` - - `mailinglist.unsubscribe_policy` - - `mailinglist.subscribe_auto_approval` - - `mailinglist.private_roster` - - `mailinglist.admin_member_chunksize` + - `mailinglist.new_member_options` + - `mailinglist.send_reminders` + - `mailinglist.subscribe_policy` + - `mailinglist.unsubscribe_policy` + - `mailinglist.subscribe_auto_approval` + - `mailinglist.private_roster` + - `mailinglist.admin_member_chunksize` Interfaces ---------- - * The `IBanManager` is no longer a global utility. Instead, you adapt an - `IMailingList` to an `IBanManager` to manage the bans for a specific - mailing list. To manage the global bans, adapt ``None``. +* The `IBanManager` is no longer a global utility. Instead, you adapt an + `IMailingList` to an `IBanManager` to manage the bans for a specific + mailing list. To manage the global bans, adapt ``None``. Commands -------- - * `bin/mailman aliases` loses the `--output`, `--format`, and `--simple` - arguments, and adds a `--directory` argument. This is necessary to support - the Postfix `relay_domains` support. - * `bin/mailman start` was passing the wrong relative path to its runner - subprocesses when -C was given. (LP: #982551) - * `bin/runner` command has been simplified and its command line options - reduced. Now, only one `-r/--runner` option may be provided and the - round-robin feature has been removed. +* `bin/mailman aliases` loses the `--output`, `--format`, and `--simple` + arguments, and adds a `--directory` argument. This is necessary to support + the Postfix `relay_domains` support. +* `bin/mailman start` was passing the wrong relative path to its runner + subprocesses when -C was given. (LP: #982551) +* `bin/runner` command has been simplified and its command line options + reduced. Now, only one `-r/--runner` option may be provided and the + round-robin feature has been removed. Other ----- - * Added support for Postfix `relay_domains` setting for better virtual domain - support. [Jimmy Bergman]. - * Two new events are triggered on membership changes: `SubscriptionEvent` - when a new member joins a mailing list, and an `UnsubscriptionEvent` when a - member leaves a mailing list. (LP: #1047286) - * Improve the --help text for the `start`, `stop`, `restart`, and `reopen` - subcommands. (LP: #1035033) +* Added support for Postfix `relay_domains` setting for better virtual domain + support. [Jimmy Bergman]. +* Two new events are triggered on membership changes: `SubscriptionEvent` + when a new member joins a mailing list, and an `UnsubscriptionEvent` when a + member leaves a mailing list. (LP: #1047286) +* Improve the --help text for the `start`, `stop`, `restart`, and `reopen` + subcommands. (LP: #1035033) Bugs ---- - * Fixed `send_goodbye_message()`. (LP: #1091321) - * Fixed REST server crash on `reopen` command. Identification and test - provided by Aurélien Bompard. (LP: #1184376) +* Fixed `send_goodbye_message()`. (LP: #1091321) +* Fixed REST server crash on `reopen` command. Identification and test + provided by Aurélien Bompard. (LP: #1184376) 3.0 beta 2 -- "Freeze" @@ -664,123 +674,123 @@ Bugs Architecture ------------ - * The link between members and the mailing lists they are subscribed to, is - now via the RFC 2369 `list_id` instead of the fqdn listname (i.e. posting - address). This is because while the posting address can change if the - mailing list is moved to a new server, the list id is fixed. - (LP: #1024509) +* The link between members and the mailing lists they are subscribed to, is + now via the RFC 2369 `list_id` instead of the fqdn listname (i.e. posting + address). This is because while the posting address can change if the + mailing list is moved to a new server, the list id is fixed. + (LP: #1024509) - - IListManager.get_by_list_id() added. - - IListManager.list_ids added. - - IMailingList.list_id added. - - Several internal APIs that accepted fqdn list names now require list ids, - e.g. ISubscriptionService.join() and .find_members(). - - IMember.list_id attribute added; .mailing_list is now an alias that - retrieves and returns the IMailingList. + - IListManager.get_by_list_id() added. + - IListManager.list_ids added. + - IMailingList.list_id added. + - Several internal APIs that accepted fqdn list names now require list ids, + e.g. ISubscriptionService.join() and .find_members(). + - IMember.list_id attribute added; .mailing_list is now an alias that + retrieves and returns the IMailingList. - * `passlib`_ is now used for all password hashing instead of flufl.password. - The default hash is `sha512_crypt`. (LP: #1015758) - * Internally, all datetimes are kept in the UTC timezone, however because of - LP: #280708, they are stored in the database in naive format. - * `received_time` is now added to the message metadata by the LMTP runner - instead of by `Switchboard.enqueue()`. This latter no longer depends on - `received_time` in the metadata. - * The `ArchiveRunner` no longer acquires a lock before it calls the - individual archiver implementations, since not all of them need a lock. If - they do, the implementations must acquire said lock themselves. - * The `news` runner and queue has been renamed to the more accurate `nntp`. - The runner has also been ported to Mailman 3 (LP: #967409). Beta testers - can safely remove `$var_dir/queue/news`. - * A mailing list's *moderator password* is no longer stored in the clear; it - is hashed with the currently selected scheme. - * An `AddressVerificationEvent` is triggered when an `IAddress` is verified - or unverified. (LP: #975698) - * A `PasswordChangeEvent` is triggered when an `IUser`'s password changes. - (LP: #975700) - * When a queue runner gets an exception in its _dispose() method, a - `RunnerCrashEvent` is triggered, which contains references to the queue - runner, mailing list, message, metadata, and exception. Interested parties - can subscribe to that `zope.event` for notification. - * Events renamed and moved: - * `mailman.chains.accept.AcceptNotification` - * `mailman.chains.base.ChainNotification` - * `mailman.chains.discard.DiscardNotification` - * `mailman.chains.hold.HoldNotification` - * `mailman.chains.owner.OwnerNotification` - * `mailman.chains.reject.RejectNotification` - changed to (respectively): - * `mailman.interfaces.chains.AcceptEvent` - * `mailman.interfaces.chains.ChainEvent` - * `mailman.interfaces.chains.DiscardEvent` - * `mailman.interfaces.chains.HoldEvent` - * `mailman.interfaces.chains.AcceptOwnerEvent` - * `mailman.interfaces.chains.RejectEvent` - * A `ConfigurationUpdatedEvent` is triggered when the system-wide global - configuration stack is pushed or popped. - * The policy for archiving has now been collapsed into a single enum, called - ArchivePolicy. This describes the three states of never archive, archive - privately, and archive_publicly. (LP: #967238) +* `passlib`_ is now used for all password hashing instead of flufl.password. + The default hash is `sha512_crypt`. (LP: #1015758) +* Internally, all datetimes are kept in the UTC timezone, however because of + LP: #280708, they are stored in the database in naive format. +* `received_time` is now added to the message metadata by the LMTP runner + instead of by `Switchboard.enqueue()`. This latter no longer depends on + `received_time` in the metadata. +* The `ArchiveRunner` no longer acquires a lock before it calls the + individual archiver implementations, since not all of them need a lock. If + they do, the implementations must acquire said lock themselves. +* The `news` runner and queue has been renamed to the more accurate `nntp`. + The runner has also been ported to Mailman 3 (LP: #967409). Beta testers + can safely remove `$var_dir/queue/news`. +* A mailing list's *moderator password* is no longer stored in the clear; it + is hashed with the currently selected scheme. +* An `AddressVerificationEvent` is triggered when an `IAddress` is verified + or unverified. (LP: #975698) +* A `PasswordChangeEvent` is triggered when an `IUser`'s password changes. + (LP: #975700) +* When a queue runner gets an exception in its _dispose() method, a + `RunnerCrashEvent` is triggered, which contains references to the queue + runner, mailing list, message, metadata, and exception. Interested parties + can subscribe to that `zope.event` for notification. +* Events renamed and moved: + * `mailman.chains.accept.AcceptNotification` + * `mailman.chains.base.ChainNotification` + * `mailman.chains.discard.DiscardNotification` + * `mailman.chains.hold.HoldNotification` + * `mailman.chains.owner.OwnerNotification` + * `mailman.chains.reject.RejectNotification` + changed to (respectively): + * `mailman.interfaces.chains.AcceptEvent` + * `mailman.interfaces.chains.ChainEvent` + * `mailman.interfaces.chains.DiscardEvent` + * `mailman.interfaces.chains.HoldEvent` + * `mailman.interfaces.chains.AcceptOwnerEvent` + * `mailman.interfaces.chains.RejectEvent` +* A `ConfigurationUpdatedEvent` is triggered when the system-wide global + configuration stack is pushed or popped. +* The policy for archiving has now been collapsed into a single enum, called + ArchivePolicy. This describes the three states of never archive, archive + privately, and archive_publicly. (LP: #967238) Database -------- - * Schema migrations (LP: #971013) +* Schema migrations (LP: #971013) - - mailinglist.include_list_post_header -> allow_list_posts - - mailinglist.news_prefix_subject_too -> nntp_prefix_subject_too - - mailinglist.news_moderation -> newsgroup_moderation - - mailinglist.archive and mailinglist.archive_private have been collapsed - into archive_policy. - - mailinglist.nntp_host has been removed. - - mailinglist.generic_nonmember_action has been removed (LP: #975696) + - mailinglist.include_list_post_header -> allow_list_posts + - mailinglist.news_prefix_subject_too -> nntp_prefix_subject_too + - mailinglist.news_moderation -> newsgroup_moderation + - mailinglist.archive and mailinglist.archive_private have been collapsed + into archive_policy. + - mailinglist.nntp_host has been removed. + - mailinglist.generic_nonmember_action has been removed (LP: #975696) - * Schema migrations (LP: #1024509) - - member.mailing_list -> list_id - * The PostgreSQL port of the schema accidentally added a moderation_callback - column to the mailinglist table. Since this is unused in Mailman, it was - simply commented out of the base schema for PostgreSQL. +* Schema migrations (LP: #1024509) + - member.mailing_list -> list_id +* The PostgreSQL port of the schema accidentally added a moderation_callback + column to the mailinglist table. Since this is unused in Mailman, it was + simply commented out of the base schema for PostgreSQL. REST ---- - * Expose `archive_policy` in the REST API. Contributed by Alexander - Sulfrian. (LP: #1039129) +* Expose `archive_policy` in the REST API. Contributed by Alexander + Sulfrian. (LP: #1039129) Configuration ------------- - * New configuration variables `clobber_date` and `clobber_skew` supported in - every `[archiver.<name>]` section. These are used to determine under what - circumstances a message destined for a specific archiver should have its - `Date:` header clobbered. (LP: #963612) - * With the switch to `passlib`_, `[passwords]password_scheme` has been - removed. Instead use `[passwords]path` to specify where to find the - `passlib.cfg` file. See the comments in `schema.cfg` for details. - * Configuration schema variable changes: - * [nntp]username -> [nntp]user - * [nntp]port (added) - * Header check specifications in the `mailman.cfg` file have changed quite - bit. The previous `[spam.header.foo]` sections have been removed. - Instead, there's a new `[antispam]` section that contains a `header_checks` - variable. This variable takes multiple lines of `Header: regexp` values, - one per line. There is also a new `jump_chain` variable which names the - chain to jump to should any of the header checks (including the - list-specific, and programmatically added ones) match. +* New configuration variables `clobber_date` and `clobber_skew` supported in + every `[archiver.<name>]` section. These are used to determine under what + circumstances a message destined for a specific archiver should have its + `Date:` header clobbered. (LP: #963612) +* With the switch to `passlib`_, `[passwords]password_scheme` has been + removed. Instead use `[passwords]path` to specify where to find the + `passlib.cfg` file. See the comments in `schema.cfg` for details. +* Configuration schema variable changes: + * [nntp]username -> [nntp]user + * [nntp]port (added) +* Header check specifications in the `mailman.cfg` file have changed quite + bit. The previous `[spam.header.foo]` sections have been removed. + Instead, there's a new `[antispam]` section that contains a `header_checks` + variable. This variable takes multiple lines of `Header: regexp` values, + one per line. There is also a new `jump_chain` variable which names the + chain to jump to should any of the header checks (including the + list-specific, and programmatically added ones) match. Documentation ------------- - * Some additional documentation on related components such as Postorius and - hyperkitty have been added, given by Stephen J Turnbull. +* Some additional documentation on related components such as Postorius and + hyperkitty have been added, given by Stephen J Turnbull. Bug fixes --------- - * Fixed the RFC 1153 digest footer to be compliant. (LP: #887610) - * Fixed a UnicodeError with non-ascii message bodies in the `approved` rule, - given by Mark Sapiro. (LP: #949924) - * Fixed a typo when returning the configuration file's header match checks. - (LP: #953497) - * List-Post should be NO when posting is not allowed. (LP: #987563) - * Non-unicode values in msgdata broke pending requests. (LP: #1031391) - * Show devmode in `bin/mailman info` output. (LP: #1035028) - * Fix residual references to the old `IMailingList` archive variables. - (LP: #1031393) +* Fixed the RFC 1153 digest footer to be compliant. (LP: #887610) +* Fixed a UnicodeError with non-ascii message bodies in the `approved` rule, + given by Mark Sapiro. (LP: #949924) +* Fixed a typo when returning the configuration file's header match checks. + (LP: #953497) +* List-Post should be NO when posting is not allowed. (LP: #987563) +* Non-unicode values in msgdata broke pending requests. (LP: #1031391) +* Show devmode in `bin/mailman info` output. (LP: #1035028) +* Fix residual references to the old `IMailingList` archive variables. + (LP: #1031393) .. _`passlib`: http://packages.python.org/passlib/index.html @@ -791,128 +801,128 @@ Bug fixes Architecture ------------ - * Schema migrations have been implemented. - * Implement the style manager as a utility instead of an attribute hanging - off the `mailman.config.config` object. - * PostgreSQL support contributed by Stephen A. Goss. (LP: #860159) - * Separate out the RFC 2369 header adding handler. - * Dynamically calculate the `List-Id` header instead of storing it in the - database. This means it cannot be changed. - * Major redesign of the template search system, fixing LP: #788309. $var_dir - is now used when search for all template overrides, site, domain, or - mailing list. The in-tree English templates are used only as a last - fallback. - * Support downloading templates by URI, including mailman:// URIs. This is - used in welcome and goodbye messages, as well as regular and digest headers - and footers, and supports both language and mailing list specifications. - E.g. mailman:///test@example.com/it/welcome.txt - * $user_password is no longer supported as a placeholder in headers and - footers. - * Mailing lists get multiple chains and pipelines. For example, normal - postings go through the `posting_chain` while messages to owners to through - `owners_chain`. The default `built-in` chain is renamed to - `default-posting-chain` while the `built-in` pipeline is renamed - `default-posting-pipeline`. - * The experimental `maildir` runner is removed. Use LMTP. - * The LMTP server now requires that the incoming message have a `Message-ID`, - otherwise it rejects the message with a 550 error. Also, the LMTP server - adds the `X-Message-ID-Hash` header automatically. The `inject` cli - command will also add the `X-Message-ID-Hash` header, but it will craft a - `Message-ID` header first if one is missing from the injected text. Also, - `inject` will always set the correct value for the `original_size` - attribute on the message object, instead of trusting a possibly incorrect - value if it's already set. The individual `IArchiver` implementations no - longer set the `X-Message-ID-Hash` header. - * The Prototype archiver now stores its files in maildir format inside of - `$var_dir/archives/prototype`, given by Toshio Kuratomi. - * Improved "8 mile high" document distilled by Stephen J Turnbull from the - Pycon 2012 Mailman 3 sprint. Also improvements to the Sphinx build given - by Andrea Crotti (LP: #954718). - * Pipermail has been eradicated. - * Configuration variable `[mailman]filtered_messages_are_preservable` - controls whether messages which have their top-level `Content-Type` - filtered out can be preserved in the `bad` queue by list owners. - * Configuration section `[scrubber]` removed, as is the scrubber handler. - This handler was essentially incompatible with Mailman 3 since it required - coordination with Pipermail to store attachments on disk. +* Schema migrations have been implemented. +* Implement the style manager as a utility instead of an attribute hanging + off the `mailman.config.config` object. +* PostgreSQL support contributed by Stephen A. Goss. (LP: #860159) +* Separate out the RFC 2369 header adding handler. +* Dynamically calculate the `List-Id` header instead of storing it in the + database. This means it cannot be changed. +* Major redesign of the template search system, fixing LP: #788309. $var_dir + is now used when search for all template overrides, site, domain, or + mailing list. The in-tree English templates are used only as a last + fallback. +* Support downloading templates by URI, including mailman:// URIs. This is + used in welcome and goodbye messages, as well as regular and digest headers + and footers, and supports both language and mailing list specifications. + E.g. mailman:///test@example.com/it/welcome.txt +* $user_password is no longer supported as a placeholder in headers and + footers. +* Mailing lists get multiple chains and pipelines. For example, normal + postings go through the `posting_chain` while messages to owners to through + `owners_chain`. The default `built-in` chain is renamed to + `default-posting-chain` while the `built-in` pipeline is renamed + `default-posting-pipeline`. +* The experimental `maildir` runner is removed. Use LMTP. +* The LMTP server now requires that the incoming message have a `Message-ID`, + otherwise it rejects the message with a 550 error. Also, the LMTP server + adds the `X-Message-ID-Hash` header automatically. The `inject` cli + command will also add the `X-Message-ID-Hash` header, but it will craft a + `Message-ID` header first if one is missing from the injected text. Also, + `inject` will always set the correct value for the `original_size` + attribute on the message object, instead of trusting a possibly incorrect + value if it's already set. The individual `IArchiver` implementations no + longer set the `X-Message-ID-Hash` header. +* The Prototype archiver now stores its files in maildir format inside of + `$var_dir/archives/prototype`, given by Toshio Kuratomi. +* Improved "8 mile high" document distilled by Stephen J Turnbull from the + Pycon 2012 Mailman 3 sprint. Also improvements to the Sphinx build given + by Andrea Crotti (LP: #954718). +* Pipermail has been eradicated. +* Configuration variable `[mailman]filtered_messages_are_preservable` + controls whether messages which have their top-level `Content-Type` + filtered out can be preserved in the `bad` queue by list owners. +* Configuration section `[scrubber]` removed, as is the scrubber handler. + This handler was essentially incompatible with Mailman 3 since it required + coordination with Pipermail to store attachments on disk. Database -------- - * Schema changes: - - welcome_msg -> welcome_message_uri - - goodbye_msg -> goodbye_message_uri - - send_welcome_msg -> send_welcome_message - - send_goodbye_msg -> send_goodbye_message - - msg_header -> header_uri - - msg_footer -> footer_uri - - digest_header -> digest_header_uri - - digest_footer -> digest_footer_uri - - start_chain -> posting_chain - - pipeline -> posting_pipeline - - real_name -> display_name (mailinglist, user, address) - * Schema additions: - - mailinglist.filter_action - - mailinglist.owner_chain - - mailinglist.owner_pipeline +* Schema changes: + - welcome_msg -> welcome_message_uri + - goodbye_msg -> goodbye_message_uri + - send_welcome_msg -> send_welcome_message + - send_goodbye_msg -> send_goodbye_message + - msg_header -> header_uri + - msg_footer -> footer_uri + - digest_header -> digest_header_uri + - digest_footer -> digest_footer_uri + - start_chain -> posting_chain + - pipeline -> posting_pipeline + - real_name -> display_name (mailinglist, user, address) +* Schema additions: + - mailinglist.filter_action + - mailinglist.owner_chain + - mailinglist.owner_pipeline REST ---- - * Held messages can now be moderated through the REST API. Mailing list - resources now accept a `held` path component. GETing this returns all held - messages for the mailing list. POSTing to a specific request id under this - url can dispose of the message using `Action` enums. - * Mailing list resources now have a `member_count` attribute which gives the - number of subscribed members. Given by Toshio Kuratomi. +* Held messages can now be moderated through the REST API. Mailing list + resources now accept a `held` path component. GETing this returns all held + messages for the mailing list. POSTing to a specific request id under this + url can dispose of the message using `Action` enums. +* Mailing list resources now have a `member_count` attribute which gives the + number of subscribed members. Given by Toshio Kuratomi. Interfaces ---------- - * Add property `IUserManager.members` to return all `IMembers` in the system. - * Add property `IListmanager.name_components` which returns 2-tuples for - every mailing list as (list_name, mail_host). - * Remove previously deprecated `IListManager.get_mailing_lists()`. - * `IMailTransportAgentAliases` now explicitly accepts duck-typed arguments. - * `IRequests` interface is removed. Now just use adaptation from - `IListRequests` directly (which takes an `IMailingList` object). - * `handle_message()` now allows for `Action.hold` which is synonymous with - `Action.defer` (since the message is already being held). - * `IListRequests.get_request()` now takes an optional `request_type` - argument to narrow the search for the given request. - * New `ITemplateLoader` utility. - * `ILanguageManager.add()` returns the `ILanguage` object just created. - * `IMailinglist.decorators` removed; it was unused - * `IMailingList.real_name` -> `IMailingList.display_name` - * `IUser.real_name` -> `IUser.display_name` - * `IAddress.real_name` -> `IAddress.display_name` - * Add property `IRoster.member_count`. +* Add property `IUserManager.members` to return all `IMembers` in the system. +* Add property `IListmanager.name_components` which returns 2-tuples for + every mailing list as (list_name, mail_host). +* Remove previously deprecated `IListManager.get_mailing_lists()`. +* `IMailTransportAgentAliases` now explicitly accepts duck-typed arguments. +* `IRequests` interface is removed. Now just use adaptation from + `IListRequests` directly (which takes an `IMailingList` object). +* `handle_message()` now allows for `Action.hold` which is synonymous with + `Action.defer` (since the message is already being held). +* `IListRequests.get_request()` now takes an optional `request_type` + argument to narrow the search for the given request. +* New `ITemplateLoader` utility. +* `ILanguageManager.add()` returns the `ILanguage` object just created. +* `IMailinglist.decorators` removed; it was unused +* `IMailingList.real_name` -> `IMailingList.display_name` +* `IUser.real_name` -> `IUser.display_name` +* `IAddress.real_name` -> `IAddress.display_name` +* Add property `IRoster.member_count`. Commands -------- - * IPython support in `bin/mailman shell` contributed by Andrea Crotti. - (LP: #949926). - * The `mailman.cfg` configuration file will now automatically be detected if - it exists in an `etc` directory which is a sibling of argv0. - * `bin/mailman shell` is an alias for `withlist`. - * The `confirm` email command now properly handles `Re:`-like prefixes, even - if they contain non-ASCII characters. (LP: #685261) - * The `join` email command no longer accepts an `address=` argument. Its - `digest=` argument now accepts the following values: `no` (for regular - delivery), `mime`, or `plain`. - * Added a `help` email command. - * A welcome message is sent when the user confirms their subscription via - email. - * Global ``-C`` option now accepts an absolute path to the configuration - file. Given by Andrea Crotti. (LP: #953707) +* IPython support in `bin/mailman shell` contributed by Andrea Crotti. + (LP: #949926). +* The `mailman.cfg` configuration file will now automatically be detected if + it exists in an `etc` directory which is a sibling of argv0. +* `bin/mailman shell` is an alias for `withlist`. +* The `confirm` email command now properly handles `Re:`-like prefixes, even + if they contain non-ASCII characters. (LP: #685261) +* The `join` email command no longer accepts an `address=` argument. Its + `digest=` argument now accepts the following values: `no` (for regular + delivery), `mime`, or `plain`. +* Added a `help` email command. +* A welcome message is sent when the user confirms their subscription via + email. +* Global ``-C`` option now accepts an absolute path to the configuration + file. Given by Andrea Crotti. (LP: #953707) Bug fixes --------- - * Subscription disabled probe warning notification messages are now sent - without a `Precedence:` header. Given by Mark Sapiro. (LP: #808821) - * Fixed KeyError in retry runner, contributed by Stephen A. Goss. - (LP: #872391) - * Fixed bogus use of `bounce_processing` attribute (should have been - `process_bounces`, with thanks to Vincent Fretin. (LP: #876774) - * Fix `test_moderation` for timezones east of UTC+0000, given by blacktav. - (LP: #890675) +* Subscription disabled probe warning notification messages are now sent + without a `Precedence:` header. Given by Mark Sapiro. (LP: #808821) +* Fixed KeyError in retry runner, contributed by Stephen A. Goss. + (LP: #872391) +* Fixed bogus use of `bounce_processing` attribute (should have been + `process_bounces`, with thanks to Vincent Fretin. (LP: #876774) +* Fix `test_moderation` for timezones east of UTC+0000, given by blacktav. + (LP: #890675) 3.0 alpha 8 -- "Where's My Thing?" @@ -921,93 +931,93 @@ Bug fixes Architecture ------------ - * Factor out bounce detection to `flufl.bounce`. - * Unrecognized bounces can now also be forwarded to the site owner. - * mailman.qrunner log is renamed to mailman.runner - * master-qrunner.lck -> master.lck - * master-qrunner.pid -> master.pid - * Four new events are created, and notifications are sent during mailing list - lifecycle changes: - - ListCreatingEvent - sent before the mailing list is created - - ListCreatedEvent - sent after the mailing list is created - - ListDeletingEvent - sent before the mailing list is deleted - - ListDeletedEvent - sent after the mailing list is deleted - * Four new events are created, and notifications are sent during domain - lifecycle changes: - - DomainCreatingEvent - sent before the domain is created - - DomainCreatedEvent - sent after the domain is created - - DomainDeletingEvent - sent before the domain is deleted - - DomainDeletedEvent - sent after the domain is deleted - * Using the above events, when a domain is deleted, associated mailing lists - are deleted. (LP: #837526) - * IDomain.email_host -> .mail_host (LP: #831660) - * User and Member ids are now proper UUIDs. - * Improved the way enums are stored in the database, so that they are more - explicitly expressed in the code, and more database efficient. +* Factor out bounce detection to `flufl.bounce`. +* Unrecognized bounces can now also be forwarded to the site owner. +* mailman.qrunner log is renamed to mailman.runner +* master-qrunner.lck -> master.lck +* master-qrunner.pid -> master.pid +* Four new events are created, and notifications are sent during mailing list + lifecycle changes: + - ListCreatingEvent - sent before the mailing list is created + - ListCreatedEvent - sent after the mailing list is created + - ListDeletingEvent - sent before the mailing list is deleted + - ListDeletedEvent - sent after the mailing list is deleted +* Four new events are created, and notifications are sent during domain + lifecycle changes: + - DomainCreatingEvent - sent before the domain is created + - DomainCreatedEvent - sent after the domain is created + - DomainDeletingEvent - sent before the domain is deleted + - DomainDeletedEvent - sent after the domain is deleted +* Using the above events, when a domain is deleted, associated mailing lists + are deleted. (LP: #837526) +* IDomain.email_host -> .mail_host (LP: #831660) +* User and Member ids are now proper UUIDs. +* Improved the way enums are stored in the database, so that they are more + explicitly expressed in the code, and more database efficient. REST ---- - * Preferences for addresses, users, and members can be accessed, changed, and - deleted through the REST interface. Hierarchical, combined preferences for - members, and system preferences can be read through the REST interface. - (LP: #821438) - * The IMailingList attribute ``host_name`` has been renamed to ``mail_host`` - for consistency. This changes the REST API for mailing list - resources. (LP: #787599) - * New REST resource http://.../members/find can be POSTed to in order to find - member records. Optional arguments are `subscriber` (email address to - search for), `fqdn_listname`, and `role` (i.e. MemberRole). (LP: #799612) - * You can now query or change a member's `delivery_mode` attribute through - the REST API (LP: #833132). Given by Stephen A. Goss. - * New REST resource http://.../<domain>/lists can be GETed in order to find - all the mailing lists in a specific domain (LP: #829765). Given by - Stephen A. Goss. - * Fixed /lists/<fqdn_listname>/<role>/<email> (LP: #825570) - * Remove role plurals from /lists/<fqdn_listname/rosters/<role> - * Fixed incorrect error code for /members/<bogus> (LP: #821020). Given by - Stephen A. Goss. - * DELETE users via the REST API. (LP: #820660) - * Moderators and owners can be added via REST (LP: #834130). Given by - Stephen A. Goss. - * Getting the roster or configuration of a nonexistent list did not give a - 404 error (LP: #837676). Given by Stephen A. Goss. - * PATCHing an invalid attribute on a member did not give a 400 error - (LP: #833376). Given by Stephen A. Goss. - * Getting the memberships for a non-existent address did not give a 404 error - (LP: #848103). Given by Stephen A. Goss. +* Preferences for addresses, users, and members can be accessed, changed, and + deleted through the REST interface. Hierarchical, combined preferences for + members, and system preferences can be read through the REST interface. + (LP: #821438) +* The IMailingList attribute ``host_name`` has been renamed to ``mail_host`` + for consistency. This changes the REST API for mailing list + resources. (LP: #787599) +* New REST resource http://.../members/find can be POSTed to in order to find + member records. Optional arguments are `subscriber` (email address to + search for), `fqdn_listname`, and `role` (i.e. MemberRole). (LP: #799612) +* You can now query or change a member's `delivery_mode` attribute through + the REST API (LP: #833132). Given by Stephen A. Goss. +* New REST resource http://.../<domain>/lists can be GETed in order to find + all the mailing lists in a specific domain (LP: #829765). Given by + Stephen A. Goss. +* Fixed /lists/<fqdn_listname>/<role>/<email> (LP: #825570) +* Remove role plurals from /lists/<fqdn_listname/rosters/<role> +* Fixed incorrect error code for /members/<bogus> (LP: #821020). Given by + Stephen A. Goss. +* DELETE users via the REST API. (LP: #820660) +* Moderators and owners can be added via REST (LP: #834130). Given by + Stephen A. Goss. +* Getting the roster or configuration of a nonexistent list did not give a + 404 error (LP: #837676). Given by Stephen A. Goss. +* PATCHing an invalid attribute on a member did not give a 400 error + (LP: #833376). Given by Stephen A. Goss. +* Getting the memberships for a non-existent address did not give a 404 error + (LP: #848103). Given by Stephen A. Goss. Commands -------- - * `bin/qrunner` is renamed to `bin/runner`. - * `bin/mailman aliases` gains `-f` and `-s` options. - * `bin/mailman create` no longer allows a list to be created with bogus owner - addresses. (LP: #778687) - * `bin/mailman start --force` option is fixed. (LP: #869317) +* `bin/qrunner` is renamed to `bin/runner`. +* `bin/mailman aliases` gains `-f` and `-s` options. +* `bin/mailman create` no longer allows a list to be created with bogus owner + addresses. (LP: #778687) +* `bin/mailman start --force` option is fixed. (LP: #869317) Documentation ------------- - * Update the COPYING file to contain the GPLv3. (LP: #790994) - * Major terminology change: ban the terms "queue runners" and "qrunners" since - not all runners manage queue directories. Just call them "runners". Also, - the master is now just called "the master runner". +* Update the COPYING file to contain the GPLv3. (LP: #790994) +* Major terminology change: ban the terms "queue runners" and "qrunners" since + not all runners manage queue directories. Just call them "runners". Also, + the master is now just called "the master runner". Testing ------- - * New configuration variable in [devmode] section, called `wait` which sets - the timeout value used in the test suite for starting up subprocesses. - * Handle SIGTERM in the REST server so that the test suite always shuts down - correctly. (LP: #770328) +* New configuration variable in [devmode] section, called `wait` which sets + the timeout value used in the test suite for starting up subprocesses. +* Handle SIGTERM in the REST server so that the test suite always shuts down + correctly. (LP: #770328) Other bugs and changes ---------------------- - * Moderating a message with Action.accept now sends the message. (LP: #827697) - * Fix AttributeError triggered by i18n call in autorespond_to_sender() - (LP: #827060) - * Local timezone in X-Mailman-Approved-At caused test failure. (LP: #832404) - * InvalidEmailAddressError no longer repr()'s its value. - * Rewrote a test for compatibility between Python 2.6 and 2.7. (LP: #833208) - * Fixed Postfix alias file generation when more than one mailing list - exists. (LP: #874929). Given by Vincent Fretin. +* Moderating a message with Action.accept now sends the message. (LP: #827697) +* Fix AttributeError triggered by i18n call in autorespond_to_sender() + (LP: #827060) +* Local timezone in X-Mailman-Approved-At caused test failure. (LP: #832404) +* InvalidEmailAddressError no longer repr()'s its value. +* Rewrote a test for compatibility between Python 2.6 and 2.7. (LP: #833208) +* Fixed Postfix alias file generation when more than one mailing list + exists. (LP: #874929). Given by Vincent Fretin. 3.0 alpha 7 -- "Mission" @@ -1016,85 +1026,85 @@ Other bugs and changes Architecture ------------ - * Significant updates to the subscription model. Members can now subscribe - with a preferred address, and changes to that will be immediately reflected - in mailing list subscriptions. Users who subscribe with an explicit - address can easily change to a different address, as long as that address - is verified. (LP: #643949) - * IUsers and IMembers are now assigned a unique, random, immutable id. - * IUsers now have created_on and .preferred_address properties. - * IMembers now have a .user attribute for easy access to the subscribed user. - * When created with add_member(), passwords are always stored encrypted. - * In all interfaces, "email" refers to the textual email address while - "address" refers to the `IAddress` object. - * mailman.chains.base.Chain no longer self registers. - * New member and nonmember moderation rules and chains. This effectively - ports moderation rules from Mailman 2 and replaces attributes such as - member_moderation_action, default_member_moderation, and - generic_nonmember_action. Now, nonmembers exist as subscriptions on a - mailing list and members have a moderation_action attribute which describes - the disposition for postings from that address. - * Member.is_moderated was removed because of the above change. - * default_member_action and default_nonmember_action were added to mailing - lists. - * All sender addresses are registered (unverified) with the user manager by - the incoming queue runner. This way, nonmember moderation rules will - always have an IAddress that they can subscribe to the list (as - MemberRole.nonmember). - * Support for SMTP AUTH added via smtp_user and smtp_pass configuration - variables in the [mta] section. (LP: #490044) - * IEmailValidator interface for pluggable validation of email addresses. - * .subscribe() is moved from the IAddress to the IMailingList - * IAddresses get their registered_on attribute set when the object is created. +* Significant updates to the subscription model. Members can now subscribe + with a preferred address, and changes to that will be immediately reflected + in mailing list subscriptions. Users who subscribe with an explicit + address can easily change to a different address, as long as that address + is verified. (LP: #643949) +* IUsers and IMembers are now assigned a unique, random, immutable id. +* IUsers now have created_on and .preferred_address properties. +* IMembers now have a .user attribute for easy access to the subscribed user. +* When created with add_member(), passwords are always stored encrypted. +* In all interfaces, "email" refers to the textual email address while + "address" refers to the `IAddress` object. +* mailman.chains.base.Chain no longer self registers. +* New member and nonmember moderation rules and chains. This effectively + ports moderation rules from Mailman 2 and replaces attributes such as + member_moderation_action, default_member_moderation, and + generic_nonmember_action. Now, nonmembers exist as subscriptions on a + mailing list and members have a moderation_action attribute which describes + the disposition for postings from that address. +* Member.is_moderated was removed because of the above change. +* default_member_action and default_nonmember_action were added to mailing + lists. +* All sender addresses are registered (unverified) with the user manager by + the incoming queue runner. This way, nonmember moderation rules will + always have an IAddress that they can subscribe to the list (as + MemberRole.nonmember). +* Support for SMTP AUTH added via smtp_user and smtp_pass configuration + variables in the [mta] section. (LP: #490044) +* IEmailValidator interface for pluggable validation of email addresses. +* .subscribe() is moved from the IAddress to the IMailingList +* IAddresses get their registered_on attribute set when the object is created. Configuration ------------- - * [devmode] section gets a new 'testing' variable. - * Added password_scheme and password_length settings for defining the - default password encryption scheme. - * creator_pw_file and site_pw_file are removed. +* [devmode] section gets a new 'testing' variable. +* Added password_scheme and password_length settings for defining the + default password encryption scheme. +* creator_pw_file and site_pw_file are removed. Commands -------- - * 'bin/mailman start' does a better job of producing an error when Mailman is - already running. - * 'bin/mailman status' added for providing command line status on the master - queue runner watcher process. - * 'bin/mailman info' now prints the REST root url and credentials. - * mmsitepass removed; there is no more site password. +* 'bin/mailman start' does a better job of producing an error when Mailman is + already running. +* 'bin/mailman status' added for providing command line status on the master + queue runner watcher process. +* 'bin/mailman info' now prints the REST root url and credentials. +* mmsitepass removed; there is no more site password. REST ---- - * Add Basic Auth support for REST API security. (Jimmy Bergman) - * Include the fqdn_listname and email address in the member JSON - representation. - * Added reply_goes_to_list, send_welcome_msg, welcome_msg, - default_member_moderation to the mailing list's writable attributes in the - REST service. (Jimmy Bergman) - * Expose the new membership model to the REST API. Canonical member resource - URLs are now much shorter and live in their own top-level namespace instead - of within the mailing list's namespace. - * /addresses/<email>/memberships gets all the memberships for a given email - address. - * /users is a new top-level URL under which user information can be - accessed. Posting to this creates new users. - * Users can subscribe to mailing lists through the REST API. - * Domains can be deleted via the REST API. - * PUT and PATCH to a list configuration now returns a 204 (No Content). +* Add Basic Auth support for REST API security. (Jimmy Bergman) +* Include the fqdn_listname and email address in the member JSON + representation. +* Added reply_goes_to_list, send_welcome_msg, welcome_msg, + default_member_moderation to the mailing list's writable attributes in the + REST service. (Jimmy Bergman) +* Expose the new membership model to the REST API. Canonical member resource + URLs are now much shorter and live in their own top-level namespace instead + of within the mailing list's namespace. +* /addresses/<email>/memberships gets all the memberships for a given email + address. +* /users is a new top-level URL under which user information can be + accessed. Posting to this creates new users. +* Users can subscribe to mailing lists through the REST API. +* Domains can be deleted via the REST API. +* PUT and PATCH to a list configuration now returns a 204 (No Content). Build ----- - * Support Python 2.7. (LP: #667472) - * Disable site-packages in buildout.cfg because of LP: #659231. - * Don't include eggs/ or parts/ in the source tarball. (LP: #656946) - * flufl.lock is now required instead of locknix. +* Support Python 2.7. (LP: #667472) +* Disable site-packages in buildout.cfg because of LP: #659231. +* Don't include eggs/ or parts/ in the source tarball. (LP: #656946) +* flufl.lock is now required instead of locknix. Bugs fixed ---------- - * Typo in scan_message(). (LP: #645897) - * Typo in add_member(). (LP: #710182) (Florian Fuchs) - * Re-enable bounce detectors. (LP: #756943) - * Clean up many pyflakes problems; ditching pylint. +* Typo in scan_message(). (LP: #645897) +* Typo in add_member(). (LP: #710182) (Florian Fuchs) +* Re-enable bounce detectors. (LP: #756943) +* Clean up many pyflakes problems; ditching pylint. 3.0 alpha 6 -- "Cut to the Chase" @@ -1103,53 +1113,53 @@ Bugs fixed Commands -------- - * The functionality of 'bin/list_members' has been moved to - 'bin/mailman members'. - * 'bin/mailman info' -v/--verbose output displays the file system - layout paths Mailman is currently configured to use. +* The functionality of 'bin/list_members' has been moved to + 'bin/mailman members'. +* 'bin/mailman info' -v/--verbose output displays the file system + layout paths Mailman is currently configured to use. Configuration ------------- - * You can now configure the paths Mailman uses for queue files, lock files, - data files, etc. via the configuration file. Define a file system 'layout' - and then select that layout in the [mailman] section. Default layouts - include 'local' for putting everything in /var/tmp/mailman, 'dev' for local - development, and 'fhs' for Filesystem Hierarchy Standard 2.3 (LP #490144). - * Queue file directories now live in $var_dir/queues. +* You can now configure the paths Mailman uses for queue files, lock files, + data files, etc. via the configuration file. Define a file system 'layout' + and then select that layout in the [mailman] section. Default layouts + include 'local' for putting everything in /var/tmp/mailman, 'dev' for local + development, and 'fhs' for Filesystem Hierarchy Standard 2.3 (LP #490144). +* Queue file directories now live in $var_dir/queues. REST ---- - * lazr.restful has been replaced by restish as the REST publishing technology - used by Mailman. - * New REST API for getting all the members of a roster for a specific mailing - list. - * New REST API for getting and setting a mailing list's configuration. GET - and PUT are supported to retrieve the current configuration, and set all - the list's writable attributes in one request. PATCH is supported to - partially update a mailing list's configuration. Individual options can be - set and retrieved by using subpaths. - * Subscribing an already subscribed member via REST now returns a 409 HTTP - error. LP: #552917 - * Fixed a bug when deleting a list via the REST API. LP: #601899 +* lazr.restful has been replaced by restish as the REST publishing technology + used by Mailman. +* New REST API for getting all the members of a roster for a specific mailing + list. +* New REST API for getting and setting a mailing list's configuration. GET + and PUT are supported to retrieve the current configuration, and set all + the list's writable attributes in one request. PATCH is supported to + partially update a mailing list's configuration. Individual options can be + set and retrieved by using subpaths. +* Subscribing an already subscribed member via REST now returns a 409 HTTP + error. LP: #552917 +* Fixed a bug when deleting a list via the REST API. LP: #601899 Architecture ------------ - * X-BeenThere header is removed. - * Mailman no longer touches the Sender or Errors-To headers. - * Chain actions can now fire Zope events in their _process() - implementations. - * Environment variable $MAILMAN_VAR_DIR can be used to control the var/ - directory for Mailman's runtime files. New environment variable - $MAILMAN_UNDER_MASTER_CONTROL is used instead of the qrunner's --subproc/-s - option. +* X-BeenThere header is removed. +* Mailman no longer touches the Sender or Errors-To headers. +* Chain actions can now fire Zope events in their _process() + implementations. +* Environment variable $MAILMAN_VAR_DIR can be used to control the var/ + directory for Mailman's runtime files. New environment variable + $MAILMAN_UNDER_MASTER_CONTROL is used instead of the qrunner's --subproc/-s + option. Miscellaneous ------------- - * Allow X-Approved and X-Approve headers, equivalent to Approved and - Approve. LP: #557750 - * Various test failure fixes. LP: #543618, LP: #544477 - * List-Post header is retained in MIME digest messages. LP: #526143 - * Importing from a Mailman 2.1.x list is partially supported. +* Allow X-Approved and X-Approve headers, equivalent to Approved and + Approve. LP: #557750 +* Various test failure fixes. LP: #543618, LP: #544477 +* List-Post header is retained in MIME digest messages. LP: #526143 +* Importing from a Mailman 2.1.x list is partially supported. 3.0 alpha 5 -- "Distant Early Warning" @@ -1158,31 +1168,31 @@ Miscellaneous REST ---- - * Add REST API for subscription services. You can now: +* Add REST API for subscription services. You can now: - - list all members in all mailing lists - - subscribe (and possibly register) an address to a mailing list - - unsubscribe an address from mailing list + - list all members in all mailing lists + - subscribe (and possibly register) an address to a mailing list + - unsubscribe an address from mailing list Commands -------- - * 'bin/dumpdb' is now 'bin/mailman qfile' - * 'bin/unshunt' is now 'bin/mailman unshunt' - * Mailman now properly handles the '-join', '-leave', and '-confirm' email - commands and sub-addresses. '-subscribe' and '-unsubscribe' are aliases - for '-join' and '-leave' respectively. +* 'bin/dumpdb' is now 'bin/mailman qfile' +* 'bin/unshunt' is now 'bin/mailman unshunt' +* Mailman now properly handles the '-join', '-leave', and '-confirm' email + commands and sub-addresses. '-subscribe' and '-unsubscribe' are aliases + for '-join' and '-leave' respectively. Configuration ------------- - * devmode settings now live in their own [devmode] section. - * Mailman now searches for a configuration file using this search order. The - first file that exists is used. +* devmode settings now live in their own [devmode] section. +* Mailman now searches for a configuration file using this search order. The + first file that exists is used. - - -C config command line argument - - $MAILMAN_CONFIG_FILE environment variable - - ./mailman.cfg - - ~/.mailman.cfg - - /etc/mailman.cfg + - -C config command line argument + - $MAILMAN_CONFIG_FILE environment variable + - ./mailman.cfg + - ~/.mailman.cfg + - /etc/mailman.cfg 3.0 alpha 4 -- "Vital Signs" @@ -1191,37 +1201,37 @@ Configuration Commands -------- - * 'bin/inject' is now 'bin/mailman inject', with some changes - * 'bin/mailmanctl' is now 'bin/mailman start|stop|reopen|restart' - * 'bin/mailman version' is added (output same as 'bin/mailman --version') - * 'bin/mailman members' command line arguments have changed. It also - now ignores blank lines and lines that start with #. It also no longer - quits when it sees an address that's already subscribed. - * 'bin/withlist' is now 'bin/mailman withlist', and its command line - arguments have changed. - * 'bin/mailman lists' command line arguments have changed. - * 'bin/genaliases' is now 'bin/mailman aliases' +* 'bin/inject' is now 'bin/mailman inject', with some changes +* 'bin/mailmanctl' is now 'bin/mailman start|stop|reopen|restart' +* 'bin/mailman version' is added (output same as 'bin/mailman --version') +* 'bin/mailman members' command line arguments have changed. It also + now ignores blank lines and lines that start with #. It also no longer + quits when it sees an address that's already subscribed. +* 'bin/withlist' is now 'bin/mailman withlist', and its command line + arguments have changed. +* 'bin/mailman lists' command line arguments have changed. +* 'bin/genaliases' is now 'bin/mailman aliases' Architecture ------------ - * A near complete rewrite of the low-level SMTP delivery machinery. This - greatly improves readability, testability, reuse and extensibility. Almost - all the old functionality has been retained. The smtp_direct.py handler is - gone. - * Refactor model objects into the mailman.model subpackage. - * Refactor most of the i18n infrastructure into a separate flufl.i18n package. - * Switch from setuptools to distribute. - * Remove the dependency on setuptools_bzr - * Do not create the .mo files during setup. +* A near complete rewrite of the low-level SMTP delivery machinery. This + greatly improves readability, testability, reuse and extensibility. Almost + all the old functionality has been retained. The smtp_direct.py handler is + gone. +* Refactor model objects into the mailman.model subpackage. +* Refactor most of the i18n infrastructure into a separate flufl.i18n package. +* Switch from setuptools to distribute. +* Remove the dependency on setuptools_bzr +* Do not create the .mo files during setup. Configuration ------------- - * All log files now have a '.log' suffix by default. - * The substitution placeholders in the verp_format configuration variable - have been renamed. - * Add a devmode configuration variable that changes some basic behavior. - Most importantly, it allows you to set a low-level SMTP recipient for all - mail for testing purposes. See also devmode_recipient. +* All log files now have a '.log' suffix by default. +* The substitution placeholders in the verp_format configuration variable + have been renamed. +* Add a devmode configuration variable that changes some basic behavior. + Most importantly, it allows you to set a low-level SMTP recipient for all + mail for testing purposes. See also devmode_recipient. 3.0 alpha 3 -- "Working Man" @@ -1230,37 +1240,37 @@ Configuration Configuration ------------- - * Configuration is now done through lazr.config. Defaults.py is - dead. lazr.config files are essentially hierarchical ini files. - * Domains are now stored in the database instead of in the configuration file. - * pre- and post- initialization hooks are now available to plugins. Specify - additional hooks to run in the configuration file. - * Add the environment variable $MAILMAN_CONFIG_FILE which overrides the -C - command line option. - * Make LMTP more compliant with Postfix docs (Patrick Koetter) - * Added a NullMTA for mail servers like Exim which just work automatically. +* Configuration is now done through lazr.config. Defaults.py is + dead. lazr.config files are essentially hierarchical ini files. +* Domains are now stored in the database instead of in the configuration file. +* pre- and post- initialization hooks are now available to plugins. Specify + additional hooks to run in the configuration file. +* Add the environment variable $MAILMAN_CONFIG_FILE which overrides the -C + command line option. +* Make LMTP more compliant with Postfix docs (Patrick Koetter) +* Added a NullMTA for mail servers like Exim which just work automatically. Architecture ------------ - * 'bin/mailman' is a new super-command for managing Mailman from the command - line. Some older bin scripts have been converted, with more to come. - * Mailman now has an administrative REST interface which can be used to get - information from and manage Mailman remotely. - * Back port of Mailman 2.1's limit on .bak file restoration. After 3 - restores, the file is moved to the bad queue, with a .psv extension. (Mark - Sapiro) - * Digest creation is moved into a new queue runner so it doesn't block main - message processing. +* 'bin/mailman' is a new super-command for managing Mailman from the command + line. Some older bin scripts have been converted, with more to come. +* Mailman now has an administrative REST interface which can be used to get + information from and manage Mailman remotely. +* Back port of Mailman 2.1's limit on .bak file restoration. After 3 + restores, the file is moved to the bad queue, with a .psv extension. (Mark + Sapiro) +* Digest creation is moved into a new queue runner so it doesn't block main + message processing. Other changes ------------- - * bin/make_instance is no longer necessary, and removed - * The debug log is turned up to info by default to reduce log file spam. +* bin/make_instance is no longer necessary, and removed +* The debug log is turned up to info by default to reduce log file spam. Building and installation ------------------------- - * All doc tests can now be turned into documentation, via Sphinx. Just run - bin/docs after bin/buildout. +* All doc tests can now be turned into documentation, via Sphinx. Just run + bin/docs after bin/buildout. 3.0 alpha 2 -- "Grand Designs" @@ -1270,59 +1280,59 @@ Building and installation Licensing --------- - * Mailman 3 is now licensed under the GPLv3. +* Mailman 3 is now licensed under the GPLv3. Bug fixes --------- - * Changed bin/arch to attempt to open the mbox before wiping the old - archive. Launchpad bug #280418. +* Changed bin/arch to attempt to open the mbox before wiping the old + archive. Launchpad bug #280418. - * Added digest.mbox and pending.pck to the 'list' files checked by - check_perms. Launchpad bug #284802. +* Added digest.mbox and pending.pck to the 'list' files checked by + check_perms. Launchpad bug #284802. Architecture ------------ - * Converted to using zope.testing as the test infrastructure. Use bin/test - now to run the full test suite. - <http://pypi.python.org/pypi/zope.testing/3.7.1> - * Partially converted to using lazr.config as the new configuration - regime. Not everything has been converted yet, so some manual editing - of mailman/Defaults.py is required. This will be rectified in future - versions. <http://launchpad.net/lazr.config> - * All web-related stuff is moved to its own directory, effectively moving - it out of the way for now. - * The email command infrastructure has been reworked to play more nicely - with the plug-in architecture. Not all commands have yet been - converted. +* Converted to using zope.testing as the test infrastructure. Use bin/test + now to run the full test suite. + <http://pypi.python.org/pypi/zope.testing/3.7.1> +* Partially converted to using lazr.config as the new configuration + regime. Not everything has been converted yet, so some manual editing + of mailman/Defaults.py is required. This will be rectified in future + versions. <http://launchpad.net/lazr.config> +* All web-related stuff is moved to its own directory, effectively moving + it out of the way for now. +* The email command infrastructure has been reworked to play more nicely + with the plug-in architecture. Not all commands have yet been + converted. Other changes ------------- - * The LMTP server now properly calculates the message's original size. - * For command line scripts, -C names the configuration file to use. For - convenient testing, if -C is not given, then the environment variable - MAILMAN_CONFIG_FILE is consulted. - * Support added for a local MHonArc archiver, as well as archiving - automatically in the remote Mail-Archive.com service. - * The permalink proposal for supporting RFC 5064 has been adopted. - * Mailing lists no longer have a .web_page_url attribute; this is taken from - the mailing list's domain's base_url attribute. - * Incoming MTA selection is now taken from the config file instead of - plugins. An MTA for Postfix+LMTP is added. bin/genaliases works again. - * If a message has no Message-ID, the stock archivers will return None for - the permalink now instead of raising an assertion. - * IArchiver no longer has an is_enabled property; this is taken from the - configuration file now. +* The LMTP server now properly calculates the message's original size. +* For command line scripts, -C names the configuration file to use. For + convenient testing, if -C is not given, then the environment variable + MAILMAN_CONFIG_FILE is consulted. +* Support added for a local MHonArc archiver, as well as archiving + automatically in the remote Mail-Archive.com service. +* The permalink proposal for supporting RFC 5064 has been adopted. +* Mailing lists no longer have a .web_page_url attribute; this is taken from + the mailing list's domain's base_url attribute. +* Incoming MTA selection is now taken from the config file instead of + plugins. An MTA for Postfix+LMTP is added. bin/genaliases works again. +* If a message has no Message-ID, the stock archivers will return None for + the permalink now instead of raising an assertion. +* IArchiver no longer has an is_enabled property; this is taken from the + configuration file now. Installation ------------ - * Python 2.6 is the minimal requirement. - * Converted to using zc.buildout as the build infrastructure. See - docs/ALPHA.txt for details. - <http://pypi.python.org/pypi/zc.buildout/1.1.1> +* Python 2.6 is the minimal requirement. +* Converted to using zc.buildout as the build infrastructure. See + docs/ALPHA.txt for details. + <http://pypi.python.org/pypi/zc.buildout/1.1.1> 3.0 alpha 1 -- "Leave That Thing Alone" @@ -1332,148 +1342,148 @@ Installation User visible changes -------------------- - * So called 'new style' subject prefixing is the default now, and the only - option. When a list's subject prefix is added, it's always done so before - any Re: tag, not after. E.g. '[My List] Re: The subject'. - * RFC 2369 headers List-Subscribe and List-Unsubscribe now use the preferred - -join and -leave addresses instead of the -request address with a subject - value. +* So called 'new style' subject prefixing is the default now, and the only + option. When a list's subject prefix is added, it's always done so before + any Re: tag, not after. E.g. '[My List] Re: The subject'. +* RFC 2369 headers List-Subscribe and List-Unsubscribe now use the preferred + -join and -leave addresses instead of the -request address with a subject + value. Configuration ------------- - * There is no more separate configure; make; make install step. Mailman 3.0 - is a setuptools package. - * Mailman can now be configured via a 'mailman.cfg' file which lives in - $VAR_PREFIX/etc. This is used to separate the configuration from the - source directory. Alternative configuration files can be specified via - -C/--config for most command line scripts. mailman.cfg contains Python - code. mm_cfg.py is no more. You do not need to import Defaults.py in - etc/mailman.cfg. You should still consult Defaults.py for the list of site - configuration variables available to you. +* There is no more separate configure; make; make install step. Mailman 3.0 + is a setuptools package. +* Mailman can now be configured via a 'mailman.cfg' file which lives in + $VAR_PREFIX/etc. This is used to separate the configuration from the + source directory. Alternative configuration files can be specified via + -C/--config for most command line scripts. mailman.cfg contains Python + code. mm_cfg.py is no more. You do not need to import Defaults.py in + etc/mailman.cfg. You should still consult Defaults.py for the list of site + configuration variables available to you. - See the etc/mailman.cfg.sample file. - * PUBLIC_ARCHIVE_URL and DEFAULT_SUBJECT_PREFIX now takes $-string - substitutions instead of %-string substitutions. See documentation in - Defaults.py.in for details. - * Message headers and footers now only accept $-string substitutions; - %-strings are no longer supported. The substitution variable - '_internal_name' has been removed; use $list_name or $real_name - instead. The substitution variable $fqdn_listname has been added. - DEFAULT_MSG_FOOTER in Defaults.py.in has been updated accordingly. - * The KNOWN_SPAMMERS global variable is replaced with HEADER_MATCHES. The - mailing list's header_filter_rules variable is replaced with header_matches - which has the same semantics as HEADER_MATCHES, but is list-specific. - * DEFAULT_MAIL_COMMANDS_MAX_LINES -> EMAIL_COMMANDS_MAX_LINES - * All SMTP_LOG_* templates use $-strings and all consistently write the - Message-ID as the first item in the log entry. - * DELIVERY_MODULE now names a handler, not a module (yes, this is a - misnomer, but it will likely change again before the final release). + See the etc/mailman.cfg.sample file. +* PUBLIC_ARCHIVE_URL and DEFAULT_SUBJECT_PREFIX now takes $-string + substitutions instead of %-string substitutions. See documentation in + Defaults.py.in for details. +* Message headers and footers now only accept $-string substitutions; + %-strings are no longer supported. The substitution variable + '_internal_name' has been removed; use $list_name or $real_name + instead. The substitution variable $fqdn_listname has been added. + DEFAULT_MSG_FOOTER in Defaults.py.in has been updated accordingly. +* The KNOWN_SPAMMERS global variable is replaced with HEADER_MATCHES. The + mailing list's header_filter_rules variable is replaced with header_matches + which has the same semantics as HEADER_MATCHES, but is list-specific. +* DEFAULT_MAIL_COMMANDS_MAX_LINES -> EMAIL_COMMANDS_MAX_LINES +* All SMTP_LOG_* templates use $-strings and all consistently write the + Message-ID as the first item in the log entry. +* DELIVERY_MODULE now names a handler, not a module (yes, this is a + misnomer, but it will likely change again before the final release). Architecture ------------ - * Internally, all strings are Unicodes. - * Implementation of a chain-of-rules based approach for deciding whether a - message should initially be accepted, held for approval, rejected/bounced, - or discarded. This replaces most of the disposition handlers in the - pipeline. The IncomingRunner now only processes message through the rule - chains, and once accepted, places the message in a new queue processed by - the PipelineRunner. - * Substantially reworked the entire queue runner process management, - including mailmanctl, a new master script, and the qrunners. This should - be much more robust and reliable now. - * The Storm ORM is used for data storage, with the SQLite backend as the - default relational database. - * Zope interfaces are used to describe the major components. - * Users are now stored in a unified database, and shared across all mailing - lists. - * Mailman's web interface is now WSGI compliant. WSGI is a Python standard - (PEP 333) allowing web applications to be (more) easily integrated with any - number of existing Python web application frameworks. For more information - see: +* Internally, all strings are Unicodes. +* Implementation of a chain-of-rules based approach for deciding whether a + message should initially be accepted, held for approval, rejected/bounced, + or discarded. This replaces most of the disposition handlers in the + pipeline. The IncomingRunner now only processes message through the rule + chains, and once accepted, places the message in a new queue processed by + the PipelineRunner. +* Substantially reworked the entire queue runner process management, + including mailmanctl, a new master script, and the qrunners. This should + be much more robust and reliable now. +* The Storm ORM is used for data storage, with the SQLite backend as the + default relational database. +* Zope interfaces are used to describe the major components. +* Users are now stored in a unified database, and shared across all mailing + lists. +* Mailman's web interface is now WSGI compliant. WSGI is a Python standard + (PEP 333) allowing web applications to be (more) easily integrated with any + number of existing Python web application frameworks. For more information + see: - http://www.wsgi.org/wsgi - http://www.python.org/dev/peps/pep-0333/ + http://www.wsgi.org/wsgi + http://www.python.org/dev/peps/pep-0333/ - Mailman can still be run as a traditional CGI program of course. - * Mailman now provides an LMTP server for more efficient integration with - supporting mail servers (e.g. Postfix, Sendmail). The Local Mail Transport - Protocol is defined in RFC 2033: + Mailman can still be run as a traditional CGI program of course. +* Mailman now provides an LMTP server for more efficient integration with + supporting mail servers (e.g. Postfix, Sendmail). The Local Mail Transport + Protocol is defined in RFC 2033: - http://www.faqs.org/rfcs/rfc2033.html - * Virtual domains are now fully supported in that mailing lists of the same - name can exist in more than one domain. This is accomplished by renaming - the lists/ and archives/ subdirectories after the list's posting address. - For example, data for list foo in example.com and list foo in example.org - will be stored in lists/foo@example.com and lists/foo@example.org. + http://www.faqs.org/rfcs/rfc2033.html +* Virtual domains are now fully supported in that mailing lists of the same + name can exist in more than one domain. This is accomplished by renaming + the lists/ and archives/ subdirectories after the list's posting address. + For example, data for list foo in example.com and list foo in example.org + will be stored in lists/foo@example.com and lists/foo@example.org. - For Postfix or manual MTA users, you will need to regenerate your mail - aliases. Use bin/genaliases. + For Postfix or manual MTA users, you will need to regenerate your mail + aliases. Use bin/genaliases. - VIRTUAL_HOST_OVERVIEW has been removed, effectively Mailman now operates - as if it were always enabled. If your site has more than one domain, - you must configure all domains by using add_domain() in your - etc/mailman.cfg flie (see below -- add_virtual() has been removed). - * If you had customizations based on Site.py, you will need to re-implement - them. Site.py has been removed. - * The site list is no more. You can remove your 'mailman' site list unless - you want to retain it for other purposes, but it is no longer used (or - required) by Mailman. You should set NO_REPLY_ADDRESS to an address that - throws away replies, and you should set SITE_OWNER_ADDRESS to an email - address that reaches the person ultimately responsible for the Mailman - installation. The MAILMAN_SITE_LIST variable has been removed. - * qrunners no longer restart on SIGINT; SIGUSR1 is used for that now. + VIRTUAL_HOST_OVERVIEW has been removed, effectively Mailman now operates + as if it were always enabled. If your site has more than one domain, + you must configure all domains by using add_domain() in your + etc/mailman.cfg flie (see below -- add_virtual() has been removed). +* If you had customizations based on Site.py, you will need to re-implement + them. Site.py has been removed. +* The site list is no more. You can remove your 'mailman' site list unless + you want to retain it for other purposes, but it is no longer used (or + required) by Mailman. You should set NO_REPLY_ADDRESS to an address that + throws away replies, and you should set SITE_OWNER_ADDRESS to an email + address that reaches the person ultimately responsible for the Mailman + installation. The MAILMAN_SITE_LIST variable has been removed. +* qrunners no longer restart on SIGINT; SIGUSR1 is used for that now. Internationalization Big Changes -------------------------------- - * Translators should work only on messages/<lang>/LC_MESSAGES/mailman.po. - Templates files are generated from mailman.po during the build process. +* Translators should work only on messages/<lang>/LC_MESSAGES/mailman.po. + Templates files are generated from mailman.po during the build process. New Features ------------ - * Confirmed member change of address is logged in the 'subscribe' log, and if - admin_notify_mchanges is true, a notice is sent to the list owner using a - new adminaddrchgack.txt template. - * There is a new list attribute 'subscribe_auto_approval' which is a list of - email addresses and regular expressions matching email addresses whose - subscriptions are exempt from admin approval. RFE 403066. +* Confirmed member change of address is logged in the 'subscribe' log, and if + admin_notify_mchanges is true, a notice is sent to the list owner using a + new adminaddrchgack.txt template. +* There is a new list attribute 'subscribe_auto_approval' which is a list of + email addresses and regular expressions matching email addresses whose + subscriptions are exempt from admin approval. RFE 403066. Command line scripts -------------------- - * Most scripts have grown a -C/--config flag to allow you to specify a - different configuration file. Without this, the default etc/mailman.cfg - file will be used. - * the -V/--virtual-host-overview switch in list_lists has been removed, while - -d/--domain and -f/--full have been added. - * bin/newlist is renamed bin/create_list and bin/rmlist is renamed - bin/remove_list. Both take fully-qualified list names now (i.e. the list's - posting address), but also accept short names, in which case the default - domain is used. newlist's -u/--urlhost and -e/--emailhost switches have - been removed. The domain that the list is being added to must already - exist. - * Backport the ability to specify additional footer interpolation variables - by the message metadata 'decoration-data' key. +* Most scripts have grown a -C/--config flag to allow you to specify a + different configuration file. Without this, the default etc/mailman.cfg + file will be used. +* the -V/--virtual-host-overview switch in list_lists has been removed, while + -d/--domain and -f/--full have been added. +* bin/newlist is renamed bin/create_list and bin/rmlist is renamed + bin/remove_list. Both take fully-qualified list names now (i.e. the list's + posting address), but also accept short names, in which case the default + domain is used. newlist's -u/--urlhost and -e/--emailhost switches have + been removed. The domain that the list is being added to must already + exist. +* Backport the ability to specify additional footer interpolation variables + by the message metadata 'decoration-data' key. Bug fixes and other patches --------------------------- - * Removal of DomainKey/DKIM signatures is now controlled by Defaults.py - mm_cfg.py variable REMOVE_DKIM_HEADERS (default = No). - * Queue runner processing is improved to log and preserve for analysis in the - shunt queue certain bad queue entries that were previously logged but lost. - Also, entries are preserved when an attempt to shunt throws an exception - (1656289). - * The processing of Topics regular expressions has changed. Previously the - Topics regexp was compiled in verbose mode but not documented as such which - caused some confusion. Also, the documentation indicated that topic - keywords could be entered one per line, but these entries were not handled - properly. Topics regexps are now compiled in non-verbose mode and multi- - line entries are 'ored'. Existing Topics regexps will be converted when - the list is updated so they will continue to work. - * The List-Help, List-Subscribe, and List-Unsubscribe headers were - incorrectly suppressed in messages that Mailman sends directly to users. - * The 'adminapproved' metadata key is renamed 'moderator_approved'. +* Removal of DomainKey/DKIM signatures is now controlled by Defaults.py + mm_cfg.py variable REMOVE_DKIM_HEADERS (default = No). +* Queue runner processing is improved to log and preserve for analysis in the + shunt queue certain bad queue entries that were previously logged but lost. + Also, entries are preserved when an attempt to shunt throws an exception + (1656289). +* The processing of Topics regular expressions has changed. Previously the + Topics regexp was compiled in verbose mode but not documented as such which + caused some confusion. Also, the documentation indicated that topic + keywords could be entered one per line, but these entries were not handled + properly. Topics regexps are now compiled in non-verbose mode and multi- + line entries are 'ored'. Existing Topics regexps will be converted when + the list is updated so they will continue to work. +* The List-Help, List-Subscribe, and List-Unsubscribe headers were + incorrectly suppressed in messages that Mailman sends directly to users. +* The 'adminapproved' metadata key is renamed 'moderator_approved'. diff --git a/src/mailman/docs/contribute.rst b/src/mailman/docs/contribute.rst index 136a4460d..6db6fffa5 100644 --- a/src/mailman/docs/contribute.rst +++ b/src/mailman/docs/contribute.rst @@ -62,7 +62,6 @@ of these command, depending on which version of Python 3 you have:: $ tox -e py36-nocov $ tox -e py35-nocov - $ tox -e py34-nocov You can run individual tests in any given environment by providing additional positional arguments. For example, to run only the tests that match a |
