summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* __handlepost(): Slight modification in the way the forwarded messagebwarsaw2001-12-291-2/+3
| | | | | is composed. Be sure to add a MIME-Version: header and use set_payload() instead of add_payload() to include the forwarded copy.
* Added ACCEPT and HOLD, a couple of useful constants for the redesignedbwarsaw2001-12-291-0/+2
| | | | admindb.py pages.
* English templates for the redesigned admindb pages.bwarsaw2001-12-292-0/+74
| | | | | | | | admindbdetails.html gives detailed instructions on how to use the administrative database pages (stripped out of admindbpreamble.html). admindbsummary.html is the preamble for the summary page (which is now what you see when you hit .../mailman/admindb).
* New template which is sent periodically to members whose subscriptionsbwarsaw2001-12-270-0/+0
| | | | | | | have been disabled due to excessive bounces. This is to remind, goad, and prod them into re-enabling their memberships. Language translators: please provide translated templates!
* intermediatebwarsaw2001-12-271-0/+25
|
* This template is no longer necessary. Remove it in all the languages.bwarsaw2001-12-2710-26/+0
|
* Add calls for cron/disabled to send out the you-are-disabled notices.bwarsaw2001-12-272-3/+9
| | | | | | | Send these out at 9am localtime. Also, change the admin reminders to run at 8am local time instead of 10pm local time.
* __doperiodic(): RegisterBounce() -> registerBounce()bwarsaw2001-12-271-4/+4
|
* __verpbounce(): RegisterBounce() -> registerBounce()bwarsaw2001-12-271-2/+2
|
* The long-awaited rewrite of the bounce processing system. We'vebwarsaw2001-12-271-21/+101
| | | | | | | | | | | | | | | | | | | | | (hopefully) managed to make this both more understandable and much simpler. Simpler even than recent mailman-developer threads (and yet, I still believe this will work :). The algorithm is explained in the Mailman/Gui/Bounce.py, i.e. admin/bounce category, help string. Specifically here, GetConfigInfo(): Explain the new bounce scoring algorithm, and provide for configuration attributes bounce_processing, bounce_score_threshold, bounce_info_stale_after, bounce_you_are_disabled_warnings, and bounce_you_are_disabled_warnings_interval. Get rid of the old bounce configuration attributes. HandleForm(), GetValue(): Handle the setting and getting of the gui configuration variables, specifically the conversion from float-seconds to days. The former type is used internally, while the latter is presented to the user.
* Added support for the RE_ENABLE confirmation (i.e. thru-the-webbwarsaw2001-12-271-1/+115
| | | | | | | | re-enabling of a disabled membership). Specifically, reenable_cancel(), reenable_confirm(), reenable_prompt(): New functions to prompt for, cancel (i.e. defer) and confirm thru-the-web re-enabling of a disabled membership.
* Make it easier for gui components to implement specializations of thebwarsaw2001-12-271-13/+16
| | | | | | | | | | category form data processing. The intention is to eventually push most of the special casing out of this script, where it's simply too hard to maintain. Specifically, get_item_gui_value(): If the gui component has a GetValue() method, call it to get the current value of the attribute. This lets us implement the seconds<->days mapping in the Bounce.py gui component.
* ScanMessages(): Call registerBounce() now to register a bounce. Webwarsaw2001-12-271-1/+1
| | | | | still don't implement weighted scoring, but we could if we improved the bounce detection framework.
* ZapOldVars(): Get rid of old bounce processing attributesbwarsaw2001-12-271-0/+16
| | | | | | | | | | | | minimum_removal_date, minimum_post_count_before_bounce_action, automatic_bounce_action, and max_posts_between_bounces. NewVars(): Add new bounce scoring attributes bounce_score_threshold, bounce_info_stale_after, bounce_you_are_disabled_warnings, bounce_you_are_disabled_warnings_interval. UpdateOldVars(): Clear out bounce_info. We don't need to migrate any of this data. Instead we'll just start bounce scoring from scratch.
* DATA_FILE_VERSION: Bump up a few notches to pick up the schemabwarsaw2001-12-271-1/+1
| | | | changes.
* Added RE_ENABLE key for thru-the-web re-enabling of disabledbwarsaw2001-12-271-0/+2
| | | | memberships.
* ProcessConfirmation(): Add handling of Pending.RE_ENABLE to the bigbwarsaw2001-12-271-0/+5
| | | | | confirmation processing switch. This sure does call out for an object-oriented approach. ;)
* FormatDisabledNotice(): If the user has been disabled due to bounces,bwarsaw2001-12-271-0/+12
| | | | | | | they'll have a bounce info record, and if that record has a score above 0, we'll add a little bit of information to their options page explaining their current bounce score and some advice for fixing the problem.
* The long-awaited rewrite of the bounce processing system. We'vebwarsaw2001-12-271-19/+37
| | | | | | | | | | | | | | | | | | | (hopefully) managed to make this both more understandable and much simpler. Simpler even than recent mailman-developer threads (and yet, I still believe this will work :). The algorithm is explained in the Mailman/Gui/Bounce.py, i.e. admin/bounce category, help string. Specifically here, Get rid of DEFAULT_MINIMUM_REMOVAL_DATE, DEFAULT_MINIMUM_POST_COUNT_BEFORE_BOUNCE_ACTION, DEFAULT_AUTOMATIC_BOUNCE_ACTION, and DEFAULT_MAX_POSTS_BETWEEN_BOUNCES. Add an explanation of the new bounce scoring algorithm. Add DEFAULT_BOUNCE_SCORE_THRESHOLD, DEFAULT_BOUNCE_INFO_STALE_AFTER, DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS and DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL.
* The long-awaited rewrite of the bounce processing system. We'vebwarsaw2001-12-271-223/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (hopefully) managed to make this both more understandable and much simpler. Simpler even than recent mailman-developer threads (and yet, I still believe this will work :). The algorithm is explained in the Mailman/Gui/Bounce.py, i.e. admin/bounce category, help string. Specifically here, _BounceInfo: New class which encapsulates information about a member's bounce status -- not delivery status. This holds information about their bounce score, the date (YYYY, MM, DD) of their last detected bounce, the number of "you-have-been-disabled" notices remaining to be sent, the date of the last sent notice, and the confirmation cookie for thru-the-web/email-cmd re-enabling. InitVars(): Throw away old attributes minimum_removal_date, minimum_post_count_before_bounce_action, automatic_bounce_action, max_posts_between_bounces, and add new attributes bounce_score_threshold, bounce_info_stale_after, bounce_you_are_disabled_warnings, and bounce_you_are_disabled_warnings_interval. See schema migration code in versions.py. ClearBounce(), RegisterBounce(), HandleBouncingAddress(), DisableBouncingAddress(), RemoveBouncingAddress(): Gone. registerBounce(): New method which other bounce detection code can call to register a bounce on a member. The other code can supply a weight (hard bounces = 1.0, soft bounces = 0.5), defaulting to 1.0. This method handles all the bounce scoring policy, including registering only one bounce per member per day, and throwing away residual bounce information for members who are already disabled. __sendAdminBounceNotice(): Send a disabled-due-to-bounce notice to the list administrator. Used when a member is actually disabled. This uses the existing bounce.txt template, but in unusual ways, avoiding requiring the translators to provide new templates. sendNextNotification(): If a disabled member is still due some notification, then send another to the user, decrementing the noticesleft count. If noticesleft is <= to 0, then they haven't re-enabled their account in time and they get deleted.
* getDeliveryStatusMembers(): New interface method which returns a listbwarsaw2001-12-272-9/+27
| | | | | | | | | | | | | | | | of members whose delivery status is in the given argument. This can be used to e.g. find all the members who have been disabled due to excessive bounces. removeMember(): Use setBounceInfo(..., None) to clear a just-removed member's bounce information. MailList.ClearBounceInfo() is gone. setDeliveryStatus(): When setting the member's status to ENABLED, clear all the bounce information by calling setBounceInfo(..., None). This also deletes the member's entry in self.__mlist.delivery_status. setBounceInfo(): Fixed typo, also when info is None, delete the member's entry in the delivery_status dictionary.
* Build and install cron/disabledbwarsaw2001-12-272-2/+4
|
* New cron script to search for disabled-by-bounce memberships and sendbwarsaw2001-12-271-0/+116
| | | | re-enable reminders when they're due.
* GetArchLock(), DropArchLock(): Get rid of posixfile locking, which isbwarsaw2001-12-241-16/+7
| | | | deprecated in Python 2.2, in favor of our good ol' standard LockFile.
* main(): Get rid of the mail/wrapper program; it's been renamed tobwarsaw2001-12-241-1/+1
| | | | mail/mailman.
* Sigh. I think BerkeleyDB support is just plain broken in standardbwarsaw2001-12-241-1/+9
| | | | | | | Python. Fall back to the PyBSDDB module (a.k.a. bsddb3) if bsddb fails. Note to self: we need to fix the BerkeleyDB module for Python 2.3.
* makealiases(): To avoid name clashes with other MLM's, rename thebwarsaw2001-12-241-1/+1
| | | | wrapper program to `mailman'.
* ignore `mailman', delete `wrapper'bwarsaw2001-12-241-6/+6
|
* MAIL_PROGS: To avoid name clashes with other MLM's, rename the wrapperbwarsaw2001-12-241-2/+2
| | | | program to `mailman'.
* test_basic_option(), test_set_digests(),bwarsaw2001-12-191-19/+24
| | | | | | | | | | | test_set_dont_receive_own_posts(), test_disable_mime(), test_conceal_subscription(), test_suppress_password_reminder(), test_receive_nonmatching_topics(): Remove DisableDelivery tests -- they're obsolete. test_set_disable_delivery(): Convert to the new MemberAdaptor APIs. test_delivery_status_time(): New test.
* test_implicit_sender_and_errors_to(): The sender is now the -bouncesbwarsaw2001-12-191-4/+8
| | | | | | | | | address instead of the -admin address. Update the test. test_list_headers(): Hack around for PUBLIC_ARCHIVE_URL. test_list_headers_with_description(): Remove a test that we do elsewhere and is just problematic to do here.
* send_i18n_digests(): Use getDeliveryStatus().bwarsaw2001-12-191-1/+2
|
* save_attachment(): Why not actually /use/ the baseurl local variable?bwarsaw2001-12-191-1/+1
| | | | It's sanitize to make sure it ends in a slash.
* process(): Simplify the calculation of the List-Archive: header.bwarsaw2001-12-191-4/+1
|
* process(): Use getDeliveryStatus().bwarsaw2001-12-191-1/+2
|
* ProcessOptionsCmd(): Use getDeliveryStatus() instead ofbwarsaw2001-12-191-2/+20
| | | | | | | | getMemberOption(). Also, tailor the disable notification based on the actual status -- gives more detail about how the membership was actually disabled. ProcessSetCmd(): Set delivery status by setDeliveryStatus().
* FormatUsers(), FormatOptionButton(), FormatDisabledNotice(): Usebwarsaw2001-12-191-8/+22
| | | | | | getDeliveryStatus() instead of getMemberOption(). Also, tailor the disable notification based on the actual status -- gives more detail about how the membership was actually disabled.
* main(), global_options(): Use getDeliveryStatus() andbwarsaw2001-12-191-8/+29
| | | | | setDeliveryStatus() to change the delivery status -- instead of the member options. When disabling, do it BYUSER.
* membership_options(): Implement user-selected disabled delivery. Usebwarsaw2001-12-191-9/+25
| | | | | | | | | | getDeliveryStatus() instead of getMemberOption(). Fix the FIXME code which was doing a direct key search in mlist.members. This code is less efficient but plays nice with the MemberAdaptor API. change_options(): Handle the <user>_nomail option through the setDeliveryStatus() method instead of the setMemberOption() method. Disable BYADMIN.
* CanonicalizeUserOptions(): Implement the schema update frombwarsaw2001-12-191-1/+11
| | | | DisableDelivery member option to the new delivery_status dictionary.
* DATA_FILE_VERSION: Bump it up to get the delivery_status schemabwarsaw2001-12-191-1/+1
| | | | changes.
* First step on the bounce processer sanity road. These changes fixbwarsaw2001-12-191-2/+47
| | | | | | | | | | | | | | | | | | Mailman to keep track of why (and when) delivery is disabled. New list attribute delivery_status and new MemberAdaptor interface methods are added. Delivery status has the following states: ENABLED, BYUSER (disabled by user selection), BYADMIN (disabled by admin selection), BYBOUNCE (disabled by excessive bouncing), UNKNOWN (legacy disable). We no longer use the DisableDelivery user option. Also, for status changes from <anything> -> <anything-but-ENABLED>, we record the time.time(). This information gets thrown away when the delivery is re-enabled. Specific changes here: getDeliveryStatus(), getDeliveryStatusChangeTime(), getBounceInfo(), setDeliveryStatus(), setBounceInfo(): New implementations matching the interface changes.
* First step on the bounce processer sanity road. These changes fixbwarsaw2001-12-191-0/+78
| | | | | | | | | | | | | | | | | | | | Mailman to keep track of why (and when) delivery is disabled. New list attribute delivery_status and new MemberAdaptor interface methods are added. Delivery status has the following states: ENABLED, BYUSER (disabled by user selection), BYADMIN (disabled by admin selection), BYBOUNCE (disabled by excessive bouncing), UNKNOWN (legacy disable). We no longer use the DisableDelivery user option. Also, for status changes from <anything> -> <anything-but-ENABLED>, we record the time.time(). This information gets thrown away when the delivery is re-enabled. Specific changes here: Added delivery status ENABLED, UNKNOWN, BYUSER, BYADMIN, BYBOUNCE. getDeliveryStatus(), getDeliveryStatusChangeTime(), getBounceInfo(), setDeliveryStatus(), setBounceInfo(): New methods -- note the *BounceInfo() methods may change.
* First step on the bounce processer sanity road. These changes fixbwarsaw2001-12-191-1/+1
| | | | | | | | | | | | | | | | Mailman to keep track of why (and when) delivery is disabled. New list attribute delivery_status and new MemberAdaptor interface methods are added. Delivery status has the following states: ENABLED, BYUSER (disabled by user selection), BYADMIN (disabled by admin selection), BYBOUNCE (disabled by excessive bouncing), UNKNOWN (legacy disable). We no longer use the DisableDelivery user option. Also, for status changes from <anything> -> <anything-but-ENABLED>, we record the time.time(). This information gets thrown away when the delivery is re-enabled. Specific changes here: Add a comment that DisableDelivery is obsolete.
* First step on the bounce processer sanity road. These changes fixbwarsaw2001-12-191-2/+5
| | | | | | | | | | | | | | | | | | | | Mailman to keep track of why (and when) delivery is disabled. New list attribute delivery_status and new MemberAdaptor interface methods are added. Delivery status has the following states: ENABLED, BYUSER (disabled by user selection), BYADMIN (disabled by admin selection), BYBOUNCE (disabled by excessive bouncing), UNKNOWN (legacy disable). We no longer use the DisableDelivery user option. Also, for status changes from <anything> -> <anything-but-ENABLED>, we record the time.time(). This information gets thrown away when the delivery is re-enabled. Specific changes here: InitVars(): Add delivery_status attribute for new lists. DisableBouncingAddress(): Test getDeliveryStatus() against ENABLED to see if the address is already disabled or not. Also, when disabling, use the BYBOUNCE status.
* Mailman re-uses connections to the SMTP server when deliveringbwarsaw2001-12-161-8/+4
| | | | | | | | | | | | | | | | | multiple chunks. Marc Merlin points out that multi-transaction sessions aren't handled correctly; this fixes the problem. Specifically, process(): In the non-threaded delivery stanza, be sure to quit the connection when finished delivering instead of just closing it. This ensures an SMTP QUIT command is sent. threaded_deliver(): Same for thread-shared connections; quit instead of just close. deliver(): Get rid of the try/finally wrapper around the conn.sendmail() call. We definitely don't want to QUIT the session here.
* main(): Ben Gertzfield points out that newlist isn't consistent in itsbwarsaw2001-12-161-9/+34
| | | | | | | | | use of the language for the template and the Subject: header. Make sure both the header and the template is in the list's preferred language. Also, add -l/--language option so that the list's preferred language can be set from the command line.
* completed german message catalogjensv2001-12-102-787/+2754
| | | | kudos go to holger jahn
* __verpbounce(): Dan Mick points out that we were still hardcoding thebwarsaw2001-12-071-27/+26
| | | | VERP decoding. Use mm_cfg.VERP_REGEXP instead.
* one step at a time... this step courtesy of Holger Jahnjensv2001-12-062-66/+455
|