5 The Postorius Django app provides a web user interface to
8 Postorius is free software: you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public License as
10 published by the Free Software Foundation, version 3 of the License.
12 Postorius is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
15 General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public License
18 along with Postorius. If not, see <http://www.gnu.org/licenses/>.
28 * Fix a bug where various form(s) allowed setting empty values for
29 ``delivery_mode`` and ``language``. (Fixes #540, #522)
30 * Rename labels description and info fields as 'Short Description'
31 and 'Long Description' to signify what they mean. (Fixes #510)
44 * Add 'Delivery Mode' and 'Moderation Action' columns to List members
46 * Add support to list and handle pending un-subscription requests. (Closes
48 * Add support to specify a reason when handling (un)subscription requests
50 * Success messages to mass subscribes now properly distinguish subscription
51 from invitation and indicate possible pending confirmation or approval.
53 * User profile dropdown no longer is too far right. (Closes #486)
54 * Expose ``archive_rendering_mode`` in Archiver settings to choose between
55 plaintext and rich text rendering of emails in Hyperkitty. (Closes #487)
56 * Allow choosing ``delivery_mode`` and ``delivery_status`` when subscribing to
58 * Redirect to ``domain_index`` after ``domain_edit`` succeeds. (Closes
60 * Expose new ``bounce_notify_owner_on_bounce_increment`` list setting on
61 ``Bounce Processing`` settings, and expose the corresponding template.
62 * Expose the ``forward_unrecognized_bounces_to`` setting on
63 ``Bounce Processing`` settings.
64 * Clarified the description of ``Maximum number of recipients``. (Closes #515)
65 * List summary view will now display a table for all subscriptions with
66 ``delivery_mode`` and ``delivery_status``. (Closes #470)
67 * Add a new user management interface for superusrs. (See #518)
68 * Allow searching for users in list user views. (See #518)
69 * Show both display name and email in user management interface if available,
71 * Allow ``list:admin:notice:pending`` template to be set in Postorius. (Closes
77 * Use mass-subscription API in core for Mass Removal of Members. (Closes #464)
78 * Fix a bug where users with multiple subscriptions to a List couldn't view
79 their Preferences for all addresses. (Closes #472)
80 * Check for pending unsubscription requests and notify user when the request is
81 pending approval. (Closes #473)
82 * Improve the performance of Members' page by skipping an API call. (Closes
84 * Improve the performance of List index page for Superuser. (See !599)
85 * Skip looking up choosable_domains for non-superuser to reduce API calls. (See
87 * Improve the performance of List owner access checks. (See !598)
88 * Add a new ``APICountingMiddleware`` to performance testing purposes. (See
90 * Use ``user_id`` as ``subscriber`` instead of addresses to improve the
91 efficiency of list index page. (Closes #419)
92 * ``AUTOCREATE_MAILMAN_USER`` setting is now removed and a Mailman user is
93 always created when a User object in created in Django. Also remove duplicate
94 implementation of ``get_mailman_user`` from ``MailmanUserManager`` so that we
95 can use a single implementation that uses caching for efficient lookups.
96 * Bump bundled jQuery to 3.6.0.slim version. (See !637)
97 * Use the full jQuery not the slim version. (Closes #523)
98 * Do not show Ownerships and Moderator roles in the 'Subscriptions' page
99 under mange new user interface. (Closes #534)
103 * Move the focus to the textarea in mass subscribe page if there are errors in
104 the form. (Closes #493)
114 * ``AUTOCREATE_MAILMAN_USER`` setting is now removed and a Mailman user is
115 always created when a User object in created in Django. Also remove duplicate
116 implementation of ``get_mailman_user`` from ``MailmanUserManager`` so that we
117 can use a single implementation that uses caching for efficient lookups.
121 * Check that a user owns the email address they are trying to unsubscribe. This
122 fixes a bug in which any logged-in user could unsubscribe any email address
123 from any mailing list, leaking whether that address was subscribed originally.
124 (CVE-2021-40347, Closes #531)
134 * Update the default Site when creating a domain to match the domain if it is
135 ``example.com``. (Closes #427)
136 * Add the ability to subscribe via Primary Address instead of specific
138 * Fix a bug where the user's display name would be ignore when
139 subscribing. (Closes #429)
140 * Display a user's name in the pending subscription request list. (Closes #430)
141 * Set a user's preferrred_address in Core if it isn't already set and the user
142 has a Primary Address that is verified.
143 * Use the new APIs in Core to get the count of held messages and pending
144 subscriptions to improve peroformance of settings page for list
146 * Show held message is local time of the User. (Closes #434)
147 * Fix a bug where non-member options page would show an owner's options if the
148 same email was subscribed as owner and non-member in a list. (Closes #436)
149 * Switching subscription from one email address to other or Primary Address now
150 preserves preferences and does not require Moderator approval. (Closes #425)
151 * Make 'Archives' and 'List Options' urls more prominently visible in the
152 list summary page as buttons. (Closes #439)
153 * Added the ability to issue invitations from the mass subscribe view.
154 * Expose ``emergency`` moderation setting for MailingList.
155 * Fixed some minor HTML errors. (Closes #442)
156 * Fix the bug where ListOfStringsField couldn't be unset in Postorius. (Closes
158 * Allow ``list:user:action:invite`` template to be set in Postorius. (Closes
160 * Fix a bug where the Bans form would always use default language instead of
161 current request's language. (Closes #441)
162 * Fix the URL on cancel buttons in template's confirm delete page. (Closes
164 * Use server side filtering for pending subscription requests for moderator
166 * Allow setting moderation action for a nonmember from Held Message modal. (
168 * Add a new view to confirm subscriptions or new emails for Users using
169 Postorius. (Fixes #459)
170 * Fix a bug where membership check compared email addresses in different
172 * Mass removal now accepts address formats with display names and/or angle
173 brackets. (Closes #455)
174 * Add support to override ``send_welcome_message`` when mass subscribing to
175 suppress welcome messages. (Closes #99)
176 * Add support for Django 3.1.x. (See !574)
177 * The list's ``send_goodbye_message`` is now settable on the Automatic
178 Responses view. (Closes #466)
179 * Support ``HYPERKITTY_ENABLE_GRAVATAR`` setting to control the user gravatar.
189 * Expose additional list settings. (See !483)
190 * Correct description of Digest Frequency. (Closes #395)
191 * Added links to Reply-To munging articles. (Closes #401)
192 * Fix "Show Headers" button to show the held message headers in the
193 held message popup. (Closes #407)
194 * Fix the held message popup structure and increase the max width of the popup
195 to be 800px(modal-lg) for larger screens. (Closes #405)
196 * Fix FILTER_VHOST = True option to try to find the email host corresponding
197 to the requesting web host. (Closes #394)
198 * Allow specifying a reason when rejecting a held message. (Closes #412)
199 * Allow users to set their preferred language in their preferences. (Closes #413)
200 * Add support to ban addresses for the entire Mailman installation. (Closes #357)
201 * Un-handled ``HTTPError`` exception raised from MailmanClient now results in an
202 error page and proper logging instead of mysterious ``KeyError`` in logs.
204 * Change List settings navigation to be vertical instead of horizontal. (See
206 * Move bounce processing settings into a new vertical tab for better
208 * Add URL to edit the Web host for each domain in Domain Index page. Also, show
209 the ``SITE_ID`` for each webhost. (Closes #426)
217 * Do not show pagination, when user is authenticated. (Closes #387)
218 * Drop support for Django 1.11.
219 * Add support to choose options for ``pre_confirm``, ``pre_approve`` and
220 ``pre_verify`` when mass subscribing. (Fixes #203)
227 * Show templates' file names in selection list where admins can pick
228 individual templates for customization. (See !425)
229 * Make template short names more prominent on all email templates related
231 * Bind object attributes to local variables in {% blocktrans %} (See !439)
232 * Set the initial style in new list form as the default style. (Closes #310)
233 * Fix a bug where logged in users's index page view would cap the total number
234 of lists for a role to 50. (Closes #335)
235 * Fix a bug where handling non-existent held message can raise 500
236 exception. (Closes #349)
237 * Emit appropriate signals when Domain and MailingList is updated. (Closes
239 * Do not strip leading whitespaces in Email Templates. (Closes #301)
240 * Hold date for held messages are now displayed correctly. (Closes #312)
241 * Add support for Python 3.8.
242 * Add support for Django 3.0.
249 * Fix a string substitution bug which would cause un-substituted raw string to
250 be exposed as notification to admin. (Closes #327)
251 * Add support for ``FILTER_VHOST`` option to filter MalingLists based on
252 ``HOST`` header of incoming request. (Closes #330)
253 * List Summary page now renders List info as markdown. (Closes #244)
254 * Moderation action for held message's sender can now be set from held
255 message's view.(Closes #127)
256 * Add a 'Ban' button to list of subscription requests to help administrators
257 against spams. (Closes #339)
258 * Added support for Django 2.2.
259 * ``pytest`` will be used to run tests instead of default Django's test runner.
260 * Remove ``vcrpy`` and use fixtures to start and stop Mailman's REST API to
261 test against, without having to record tapes to be replayed.
262 * Corrected display message in 'recieve_list_copy' option in global mailman
263 preferences of mailman settings. (Closes #351)
264 * Allow setting a MailingList's Preferred Language. (Closes #303)
265 * Allow a empty templates as a workaround for missing settings to skip
266 email decoration. (Closes #331)
267 * Expose ``digest_volume_frequency``, ``digest_send_periodict`` and
268 ``digests_enabled`` settings for MailingLists.
269 * Add a badge with count of held messages and pending subscription requests
270 for moderator approval. (Closes #308)
271 * Add support to add, view and remove domain owners.
272 * Allow setting the visibility options for MailingList's member list.
273 * Make page titles localizable.
280 * Add support for ``explicit_header_only`` in list settings.
288 * Expose ``max_num_recipients`` in list settings. (Closes #297)
289 * Add support for Non-member management in Postorius. (Closes #265)
290 * ``Members`` tab in Mailing List settings page is now called ``Users``.
292 * Show pending subscription requests are only pending for Moderator.
300 * Add support for Python 3.7 with Django 2.0+
301 * Index page only shows related lists for signed-in users with option to
302 filter based on role.
303 * Expose respond_to_post_requests in Postorius. (Closes #223)
310 * A Django migration was missing from version 1.2.0. This is now added.
316 * Postorius now runs only on Python 3.4+ and supports Django 1.8 and 1.11+
317 * Added the ability to set and edit ``alias_domain`` to the ``domains`` forms.
318 * List Create form now allows selecting the ``style``. A ``style`` is how a new
319 mailing list is configured.
320 * Minimum supported Mailman Core version is now 3.2.0. This is because the
321 ``styles`` attribute for MailingList resource is exposed in 3.2, which
322 contains all the default ``styles`` supported by Core and their human readable
324 * Account subscription page now lists all the memberships with their respective
325 roles. This avoids repeated API calls for the way data was displayed
326 before. (Closes #205)
327 * Postorius now supports only Django 1.11+.
328 * Duplicate MailingList names doesn't return a 500 error page and instead adds
329 an error to the New MailingList form. (Fixes #237)
330 * Pending subscription requests page is now paginated. (See !298)
331 * Add owners/moderators form now allows specifying a Display Name, along with
332 their email. (Fixes #254)
333 * Members views now show total number of members at the top. (See !315)
334 * Fixed a bug where GET on views that only expect a POST would cause 500 server
335 errors instead of 405 method not allowed. (Fixes #185)
336 * Member preferences form can now be saved without having to change all the
338 * Fixed a bug where the 'Delete' button to remove list owners didn't work due to
339 wrong URL being rendered in the templates. (Fixes #274)
340 * Require Explicit Destination is added to the Message Acceptance form.
342 * Delete Domain page now shows some extra warning information about all the
343 mailing lists that would be deleted after deleting the Domain. (See !250)
344 * Superusers can now view Mailman Core's current version and REST API version
345 being used under 'System Information' menu in the top navigation bar. (See !325)
346 * Fixed a bug where 500 error template wouldn't render properly due to missing
347 context variables in views that render that templates (See !334)
348 * Postorius now allows adding and editing templates for email headers, footers
349 and some of the automatic responses sent out by Mailman. (See !327)
355 * Added a new ``reset_passwords`` command that resets _all_ user's passwords
356 inside of Core. This password is different from the one Postorius
357 maintains. The Postorius password is the one used for logging users in.
358 * Postorius now sets the 'Display Name' of the user in Core correctly. This
359 fixes a security vulnerability where user's display_name would be set as their
367 * Improved testing and internal bug fixes.
368 * Preserve formatting of Mailing List description in the summary view.
369 * Site's Name isn't capitalized anymore in the navigation bar.
370 * html5shiv and response.js libraries are now included, instead of loading from a CDN.
372 1.1.0 -- "Welcome to This World"
373 ================================
376 * Added DMARC mitigation settings
377 * Switch to Allauth auth library
378 * Preference page improvements
379 * Moderation page improvements
380 * Django support up to Django 1.11
381 * Added form to edit header matches
382 * Domain edit form improvements
383 * All pipelines recognized in alter messages form
384 * Use django-mailman3 to share common code with HyperKitty
385 * Various bug fixes, code cleanup, and performance improvements
406 * Help texts Small visual alignment fix; removed unnecessary links to
408 * Import fix in fieldset_forms module (Django1.6 only)
411 1.0.0 -- "Frizzle Fry"
412 ======================
415 * French translation. Provided by Guillaume Libersat
416 * Addedd an improved test harness using WebTest. Contributed by Aurélien Bompard.
417 * Show error message in login view. Contributed by Aurélien Bompard (LP: 1094829).
418 * Fix adding the a list owner on list creation. Contributed by Aurélien Bompard (LP: 1175967).
419 * Fix untranslatable template strings. Contributed by Sumana Harihareswara (LP: 1157947).
420 * Fix wrong labels in metrics template. Contributed by Sumana Harihareswara (LP: 1409033).
421 * URLs now contain the list-id instead of the fqdn_listname. Contributed by Abhilash Raj (LP: 1201150).
422 * Fix small bug moderator/owner forms on list members page. Contributed by Pranjal Yadav (LP: 1308219).
423 * Fix broken translation string on the login page. Contributed by Pranjal Yadav.
424 * Show held message details in a modal window. Contributed by Abhilash Raj (LP: 1004049).
425 * Rework of internal testing
426 * Mozilla Persona integration: switch from django-social-auto to django-browserid: Contributed by Abhilash Raj.
427 * Fix manage.py mmclient command for non-IPython shells. Contributed by Ankush Sharma (LP: 1428169).
428 * Added archiver options: Site-wide enabled archivers can not be enabled
429 on a per-list basis through the web UI.
430 * Added functionality to choose or switch subscription addresses. Contributed by Abhilash Raj.
431 * Added subscription moderation, pre_verification/_confirmation.
432 * Several style changes.
435 1.0 beta 1 -- "Year of the Parrot"
436 ==================================
439 * fixed pip install (missing MANIFEST) (LP: 1307624). Contributed by Aurélien Bompard
440 * list owners: edit member preferences
441 * users: add multiple email addresses
442 * list info: show only subscribe or unsubscribe button. Contributed by Bhargav Golla
443 * remove members/owners/moderator. Contributed by Abhilash Raj
446 1.0 alpha 2 -- "Is It Luck?"
447 ============================
450 * dev setup fix for Django 1.4 contributed by Rohan Jain
451 * missing csrf tokens in templates contributed by Richard Wackerbarth (LP: 996658)
452 * moderation: fixed typo in success message call
453 * installation documentation for Apache/mod_wsgi
454 * moved project files to separate branch
455 * show error message if connection to Mailman API fails
456 * added list members view
457 * added developer documentation
458 * added test helper utils
459 * all code now conform to PEP8
460 * themes: removed obsolete MAILMAN_THEME settings from templates, contexts, file structure; contributed by Richard Wackerbarth (LP: 1043258)
461 * added access control for list owners and moderators
462 * added a mailmanclient shell to use as a ``manage.py`` command (``python manage.py mmclient``)
463 * use "url from future" template tag in all templates. Contributed by Richard Wackerbarth.
464 * added "new user" form. Contributed by George Chatzisofroniou.
465 * added user subscription page
466 * added decorator to allow login via http basic auth (to allow non-browser clients to use API views)
467 * added api view for list index
468 * several changes regarding style and navigation structure
469 * updated to jQuery 1.8. Contributed by Richard Wackerbarth.
470 * added a favicon. Contributed by Richard Wackerbarth.
471 * renamed some menu items. Contributed by Richard Wackerbarth.
472 * changed static file inclusion. Contributed by Richard Wackerbarth.
473 * added delete domain feature.
474 * url conf refactoring. Contributed by Richard Wackerbarth.
475 * added user deletion feature. Contributed by Varun Sharma.
479 1.0 alpha 1 -- "Space Farm"
480 ===========================
483 Many thanks go out to Anna Senarclens de Grancy and Benedict Stein for
484 developing the initial versions of this Django app during the Google Summer of
487 * add/remove/edit mailing lists
489 * show all mailing lists on server
490 * subscribe/unsubscribe/mass subscribe mailing lists
492 * show basic list info and metrics
493 * login using django user account or using BrowserID
494 * show basic user profile
495 * accept/discard/reject/defer messages
496 * Implementation of Django Messages contributed by Benedict Stein (LP: #920084)
497 * Dependency check in setup.py contributed by Daniel Mizyrycki
498 * Proper processing of acceptable aliases in list settings form contributed by