| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
messages should be sent to the -owner address rather than the
self.owner[s] directly. Also, the messages should look like they're
coming from the site list's -owner.
|
| |
|
|
|
| |
reply_to_address value, since this is already done in
GUIBase.HandleForm().
|
| |
|
|
| |
this off by default for the MM2.1 release.
|
| |
|
|
|
| |
DeleteMember(). whence is destined for the log files, so it should
definitely not be translated!
|
| |
|
|
| |
confirm mail script.
|
| | |
|
| |
|
|
|
| |
Pending.SUBSCRIPTION key now uses UserDesc instances instead of
tuples.
|
| |
|
|
|
|
|
|
|
|
| |
button which changes the action of this page. When invite is chosen,
the addresses in the list are invited to the mailing list instead of
immediately subscribed.
mass_subscribe(), mass_remove(): Rewrite the questions table to use a
RadioButtonArray for consistency and cleanliness. Also the ui is
slightly better (I think).
|
| |
|
|
|
|
|
|
|
|
| |
database, we need to use pickle instead of marshal. Pickle's more
reliable and portable anyway.
We can do auto-upgrade from marshal to pickle. If the .pck file isn't
found, we'll read the .db file. But we always write the .pck file and
if that's successful we can delete the .db file. We also do the
standard "write a .tmp file and rotate with os.rename()" dance.
|
| |
|
|
|
|
|
|
|
|
|
| |
confirmation messages. Requires the confirmation cookie.
InviteNewMember(): Perform the actions to invite a person to the
mailing list. This involves sending the person an invitation
confirmation message and sticking them in the pending database.
AddMember(), ProcessConfirmation(): Pending.SUBSCRIPTION now takes a
single object, a UserDesc, instead of a tuple of components.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
variables which control an alternative way to do confirmations.
Instead of relying on an error prone recitation of a Subject: line, we
can (optionally) use a VERP-ish From: field with the confirmation
cookie in the reply address. This has the added advantage of being
able to include an actual human intelligible Subject: header in the
confirmation message. ;)
Currently, on the new invitation confirmation feature uses this,
although the confirmation conversations should be converted.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
_open_list() caches the MailList instances in a WeakValueDictionary
which don't contribute to the reference count, but ensure that each
runner will get one and only one copy of the MailList data.
This should help in the memory footprint of the runners, but I suspect
we may still be leaking something.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
two LockFile instances on the same file, both would report that they
owned the lock. This is a bug because unlocking the one that
shouldn't have had the lock will unlock both.
__init__(): To fix this for now we keep a class attribute counter
which is incremented each time a new LockFile instance is created.
This wouldn't work in a multithreaded environment, be we don't have
the problem. ;)
__repr__(): Add a little more information to the repr.
refresh(): When raising the NotLockedError, add a little useful
debugging string as the exception value.
|
| |
|
|
| |
the un-address that isn't on then <wink>.
|
| |
|
|
|
| |
creation, which is used to set the list's default_member_moderation
flag.
|
| |
|
|
|
|
|
| |
admin notification message on holds) by calling set_charset(None).
Because we're not passing anything on the `text' argument to the
UserNotification constructor, no charset will get automatically
added.
|
| |
|
|
|
|
|
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
GetConfigInfo(): Added gui elements for bounce_notify_owner_on_disable
and bounce_notify_owner_on_removal. Also add a separator between the
knobs for controlling bounce processing behavior and the knobs for
notification.
_setValue(): Teach it to convert the new list attributes to integers.
|
| |
|
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
NewVars(): Add bounce_notify_owner_on_disable and
bounce_notify_owner_on_removal if missing.
|
| |
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
Bump the DATA_FILE_VERSION to pick up the new list attributes.
|
| |
|
|
|
|
|
|
|
| |
the character set. The most common reason for this is that the
notification message is a multipart/mixed and it makes no sense to
give those type of messages a charset.
.send(): Set the `nodecorate' key to 1 so that messages that original
from the virgin queue don't get headers and footers.
|
| |
|
|
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE,
DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL: Default values for the list
config attributes of the similar name.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
InitVars(): Add bounce_notify_owner_on_disable, and
bounce_notify_owner_on_removal.
disableBouncingMember(): Only send the admin a bounce notification if
bounce_notify_owner_on_disable is true.
sendNextNotification(): In the ApprovedDeleteMember() call, set the
admin_notif argument to the value of bounce_notify_owner_on_removal.
|
| |
|
|
| |
stamp out passwords. Get rid of all vestiges.
|
| |
|
|
|
|
|
| |
(one-per-line) for the mass subscribe or mass unsubscribe. This
should make this feature immune to native line endings, as
splitlines() handles all the common line endings: CR for Mac, LF for
Unix, CRLF for Windows.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
instead of through the pipeline, we need to be able to disable
decoration even when going through SMTPDirect.process(). Examples
include messages sent to the -owners address and other messages
crafted internally.
Add a short-circuit recognition on the `nodecorate' metadata key.
|
| |
|
|
|
|
| |
more conveniently use a class attribute to specify this. On the
BounceRunner, turn off MailList object caching so that it'll be more
friendly to long-term memory use.
|
| |
|
|
|
| |
reply_to_address since, as the note says it's better to validate it on
entry, and we now have the architectural support for doing that.
|
| |
|
|
| |
strip Reply-To: headers.
|
| |
|
|
|
|
|
| |
describe the intent that an existing Reply-To: can always be stripped.
_setValue(): Check to make sure that the reply_to_address has a valid
email address before we allow the value to be set.
|
| |
|
|
|
|
|
|
| |
push the last chunk back on the undelivered list, then re-raise the
exception. This ensures that delivery will be re-attempted for the
last chunk. They'll get dupes but that's better than them missing the
message, and we don't know how many in that chunk may or may not have
gotten the message.
|
| |
|
|
| |
moderation bit comes from somewhere else.
|
| |
|
|
|
| |
the list's moderate attribute is enabled, then we need to set each
member's Moderate option to true.
|
| |
|
|
|
|
|
| |
and footer by concatenation if the list's charset is us-ascii, since
all charsets we support are strict supersets of us-ascii. Also,
coerce the message's charset parameter to lowercase for the
comparison.
|
| | |
|
| |
|
|
| |
we can unshunt it to the correct queue.
|
| |
|
|
|
|
|
| |
`undelivered' key in the message metadata to the list of chunks the
message will be sent to. If something breaks during delivery of this
message, the list of undelivered recipients will be saved with the
metadata, and should be restored when the message is unshunted.
|
| |
|
|
|
| |
for the list owner, unset the charset parameter on the multipart/mixed
Content-Type: header.
|
| |
|
|
| |
"can't digest". Noticed by Marc MERLIN.
|
| |
|
|
|
|
|
|
|
|
|
| |
user_options, skip the key if its not a member. This can happen when
upgrading legacy databases because I believe there were bugs long ago
that caused some keys to appear in user_options but not in members or
digest_members.
Also, we now have a mini-version id for the user_options stuff so
CanonicalizeUserOptions() won't try to run every time some other part
of the schema changes.
|
| |
|
|
| |
syslog error message.
|
| |
|
|
| |
Previously we were forgetting about VERP_PERSONALIZED_DELIVERIES.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
message until SMTP delivery time. This makes VERPish delivery much
more efficient. One casualty is that threaded delivery (which was
always marked as experimental) is now gone. It might be resurrected
as a separate delivery module -- possibly called SMTPThreaded.py -- if
there is enough pressure.
Specific changes:
Connection: New class which abstracts away the handling of disconnect
and re-establishment of a connection to the SMTP server in response to
the new SMTP_MAX_SESSIONS_PER_CONNECTION setting.
process(): Streamline this function now that threaded delivery is
gone, but add in the calculation of two types of single-threaded
delivery: verpdeliver() for any VERP or personalized delivery, and
bulkdeliver() for delivery of an identical copy to a set of
recipients. Note that verpdeliver() calls bulkdeliver() after setting
up the per-recipient specializations.
pre_deliver(), threaded_deliver(): Gone; a victim of threaded delivery
removal.
verpdeliver(): New function which takes a list of recipients and
crafts an in-memory copy of the message to be specialized and
delivered to exactly one recipient.
bulkdeliver(): Deliver an identical copy to a list of recipients.
That list may be of length 1 <wink>.
|
| |
|
|
| |
as its functionality has been subsumed by SMTPDirect.py
|
| |
|
|
|
|
| |
decorating a message with its headers and footers. The only change is
that the msgdata key is now a directive instead of state
(i.e. `personalized' -> `personalize').
|
| |
|
|
| |
longer munge the Sender: or Errors-To: headers in this module.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- We need to make VERPish delivery much more efficient from a disk
utilization pov. To that end, we no longer create a new copy on the
disk of every message for every recipient. Instead we'll stitch the
message together in memory as we're stuffing it down the SMTP
socket.
GLOBAL_PIPELINE: Don't call Decorate from the pipeline since we'll
need to defer this as late as possible. SMTPDirect.py will call it
now in the proper context (Decorate.py still does largely the same
job as before though).
Also, don't call Personalize. This module will go away as its
functionality has been subsumed into SMTPDirect.py
- Second change: Some MTAs have a limit on the number of SMTP sessions
they'll allow on a single connection.
SMTP_MAX_SESSIONS_PER_CONNECTION is the new variable that controls
how many sessions Mailman will stuff down the socket before it tears
it down and re-connects.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the membership test to check additional headers. I've modified
Jason's patch in the following ways:
- get_author() -> get_senders() even though I suggested the former. ;)
I'd like to eventually deprecate get_sender() so this will be its
eventual replacement.
- Some implementation details.
do_discard(): Changed the message that gets sent with auto-discarded
messages. It might have been discarded because of the default
non-member action, in which case the old message wasn't really
accurate. I don't think the reason for discarding is all that
important right now.
Translators: beware!
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
loosens the membership test to check additional headers. I've
modified Jason's patch in the following ways:
- get_author() -> get_senders() even though I suggested the former. ;)
I'd like to eventually deprecate get_sender() so this will be its
eventual replacement.
- added an optional `headers' argument which defaults to None, meaning
the list of headers we agreed on previously. This allows you to
pass in the exact headers you want to consult (and their order).
- Some implementation details.
|