| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
| |
is composed. Be sure to add a MIME-Version: header and use
set_payload() instead of add_payload() to include the forwarded copy.
|
| |
|
|
| |
admindb.py pages.
|
| |
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
|
| |
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!
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
Send these out at 9am localtime.
Also, change the admin reminders to run at 8am local time instead of
10pm local time.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
still don't implement weighted scoring, but we could if we improved
the bounce detection framework.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
changes.
|
| |
|
|
| |
memberships.
|
| |
|
|
|
| |
confirmation processing switch. This sure does call out for an
object-oriented approach. ;)
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
| |
re-enable reminders when they're due.
|
| |
|
|
| |
deprecated in Python 2.2, in favor of our good ol' standard LockFile.
|
| |
|
|
| |
mail/mailman.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
| |
wrapper program to `mailman'.
|
| | |
|
| |
|
|
| |
program to `mailman'.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
| |
It's sanitize to make sure it ends in a slash.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
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().
|
| |
|
|
|
|
| |
getDeliveryStatus() instead of getMemberOption(). Also, tailor the
disable notification based on the actual status -- gives more detail
about how the membership was actually disabled.
|
| |
|
|
|
| |
setDeliveryStatus() to change the delivery status -- instead of the
member options. When disabling, do it BYUSER.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
DisableDelivery member option to the new delivery_status dictionary.
|
| |
|
|
| |
changes.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
kudos go to holger jahn
|
| |
|
|
| |
VERP decoding. Use mm_cfg.VERP_REGEXP instead.
|
| | |
|