======================= GNU Mailman 3 changes ======================= Copyright (C) 1998-2017 by the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Here is a history of user visible changes to Mailman. 3.2.0 -- "La Villa Strangiato" ============================== (201X-XX-XX) 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) * Various message holds and rejects that gave 'N/A' as a reason now give an appropriate reason. (Closes #368) * Bounce messages are now composed for proper translations. * Messages with badly encoded ``Subject`` headers no longer crash the message moderation REST API. (Closes #383) 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) * If no listname is given, running ``mailman withlist -r`` must name a function taking no arguments. This can be used to introspect Mailman outside of the context of a mailing list. * Fix ``mailman withlist`` command parsing. (Closes #319) Configuration ------------- * The ``[mailman]pre_hook`` and ``[mailman]post_hook`` variables are deprecated. They can still be specified but they will not be run. * The ``[paths.*]ext_dir`` variable has been removed. * A new logger has been added called ``logging.plugins``. * The ``[styles]paths`` variable has been removed; you can now specify additional styles using the new plugin architecture. 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()``. * A new template ``list:user:notice:rejected`` has been added for customizing the bounce message rejection notice. Other ----- * Add a new plugin architecture, which allows third parties to add initialization hooks, REST endpoints, and additional components. Given by Jan Jancar. * 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" ============================= (2017-05-25) 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) 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. Command line ------------ * ``mailman create `` 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) 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. 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 ``$_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 ``/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 ``/lists//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. * ``/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 ``/system/pipelines`` and ``/system/chains`` respectively. Given by Simon Hanna. (Closes #66) * Support mass unsubscription of members via ``DELETE`` on the ``/lists//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 ``/users/
/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 `_ 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" ========================== (2015-04-28) 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) 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) 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. Documentation ------------- * 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 ``/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 ``/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" ==================================== (2014-12-29) 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) Commands -------- * The `mailman conf` command no longer takes the `-t/--sort` option; the output is always sorted. Configuration ------------- * 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. 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. Interfaces ---------- * 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. 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/
``. 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" =============================== (2014-04-22) 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. 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. 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]. 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) 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. 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) 3.0 beta 3 -- "Here Again" ========================== (2012-12-31) 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) 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: - `_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=