================================================ Mailman - The GNU Mailing List Management System ================================================ Copyright (C) 1998-2016 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.0.4 -- "Show Don't Tell" ========================== (2016-XX-XX) 3.0.3 -- "Show Don't Tell" ========================== (2016-03-29) Bugs ---- * 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) * 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) * Pin the Falcon version to < 1.0. * Fix ``mailman shell`` processing of ``$PYTHONSTARTUP``. (Closes #224) 3.0.2 -- "Show Don't Tell" ========================== (2016-02-08) Bugs ---- * Fix IntegrityErrors raised under PostreSQL when deleting users and addresses. Given by Aurélien Bompard. * Fix traceback in approved handler when the moderator password is None. 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 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) Interfaces ---------- * ``IMessageStore.delete_message()`` no longer raises a ``LookupError`` when you attempt to delete a nonexistent message from the message store. REST ---- * When ``[devmode]enabled`` is set, the JSON output is sorted. Given by Aurélien Bompard. * Fixed a number of corner cases for the return codes when PUTing or PATCHing list configuration variables. (Closes: #182) * Don't crash the REST server when trying to subscribe a user without a preferred address. (Closes: #185) 3.0.1 -- "Show Don't Tell" ========================== (2015-11-13) 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) * The ``prototype`` archiver is not web accessible so it does not have a ``list_url`` or permalink. 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) * By POSTing to a user resource with an existing unlinked address, you can link the address to the user. Given by Abhilash Raj. * 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) * Fix the logging of moderation reasons. Given by Aurélien Bompard. Also, update the postauth.txt and postheld.txt templates to not include the bogus URLs, and to include the translated moderation reasons. * 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 pagination values `start` and `total_size` in the REST API. Given by Aurélien Bompard. (Closes: #154) * Fix ``UnicodeEncodeError`` in the hold chain when sending the authorization email to the mailing list moderators. (Closes: #144) 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=