| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| | |
|
| |
|
|
| |
autorespond_requests == 1, which means answer and discard.
|
| |
|
|
|
| |
addresses were found, but for which those addresses were not members.
This is just annoying.
|
| |
|
|
|
|
|
|
|
| |
send_response() to enable or suppress confirmation responses. For
example, when confirming a subscription, if a welcome message is going
to be sent out, we don't need to also send a results of the
confirmation message.
send_response(): Suppress the response if the `respond' flag is false.
|
| |
|
|
|
|
| |
METADATA_FORMAT = METAFMT_ASCII. Because of patch #567288 by
Maximillian Dornseif, we have to upgrade the schema of any metadata
files (i.e. rejection-notice -> rejection_notice).
|
| |
|
|
|
|
|
| |
pulling the Subject out of the command message. That's so later
(e.g. in cmd_confirm.py) we won't try to .lower() a None.
Closes SF bug report # 620032 by Ron Jarrell.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
where if the list lock couldn't be obtained, we couldn't register the
bounce and the message would get forwarded to the list owners.
Instead, let's just requeue it and try again later.
Note: untested! I'm checking this into cvs so I can test it on
python.org... yes on a live system. ;/
|
| | |
|
| |
|
|
| |
UserNotification!
|
| |
|
|
|
| |
a forwarded bounce message. Complained upon by Daniel Buchmann,
improved upon by Greg Ward. Further mungulated by Barry.
|
| |
|
|
|
|
|
| |
or 2, and we remove any existing Approved header, replacing it for one
of our own, pointing to the posting address.
Also, a pychecker fix.
|
| | |
|
| | |
|
| |
|
|
|
| |
should go only to the list owners. I don't think the list moderators
need to be bothered.
|
| |
|
|
| |
method on the MailList instance.
|
| |
|
|
|
|
|
|
|
| |
message did not bounce match, or if no member addresses could be
extracted from it.
maybe_forward(): MIME Forward the given message to the list owner +
list moderator, if bounce_unrecognized_goes_to_list_owner is true.
Otherwise it discards the message. Write a log entry in either case.
|
| |
|
|
|
|
|
|
| |
email.Iterators.body_line_iterator() will return a generator, which
isn't len()'able directly, so we need to convert it to a list first,
and then get the resulting len.
Closes SF bug #593454.
|
| |
|
|
| |
so that it can be overridden in derived classes.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
munging, separate from the mail list. This actually restores the
original Subject: field which is stashed away in the metadata when
it's munged in CookHeaders. Closes SF patch #573508.
prepare_message(): Restore the original Subject: header if
news_prefix_subject_too is false.
|
| |
|
|
|
|
|
|
|
|
|
| |
bug # 571634. First, catch any ValueError coming from the mktime_tz()
call to calculate wildely out of date Date: headers. If we get the
ValueError it's likely because the year is insane <wink> and the Date:
should be clobbered.
The second fix narrows the region where the list gets locked to just
the .ArchiveMail() and .Save() calls. No wonder Daniel was getting
AlreadyLockedErrors here -- this was clearly broken.
|
| |
|
|
|
|
| |
send_response(): Check whether the sender has reached their
autoresponse limit before sending the results of the command. This
may not be the right time to do that check.
|
| |
|
|
| |
Replybot.
|
| |
|
|
| |
emails will be autoresponded. Closes bug #558909.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
list. Chuq gives us the relevant info from the sendmail docs:
When the name is found in a "Precedence:" field, the
message class is set to num. Higher numbers mean
higher precedence. Numbers less than zero have the
special property that if an error occurs during pro-
cessing the body of the message will not be returned;
this is expected to be used for "bulk" mail such as
through mailing lists. The default precedence is
zero. For example, our list of precedences is:
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100
People writing mailing list exploders are encouraged
to use "Precedence: list". Older versions of sendmail
(which discarded all error returns for negative prece-
dences) didn't recognize this name, giving it a
default precedence of zero. This allows list main-
tainers to see error returns on both old and new ver-
sions of sendmail.
|
| |
|
|
| |
"bulk", we now include "junk" and "list" as well.
|
| |
|
|
| |
have "X-Ack: yes".
|
| |
|
|
|
|
| |
addresses sucked out of the bounce message actually matched a member
of any mailing list. If not, we still don't forward it, but we do log
this situation.
|
| |
|
|
| |
header.
|
| |
|
|
|
| |
unprocessed lines, check for line == None (can happen if the message
is sent to e.g. mylist-join with no body).
|
| |
|
|
| |
text/plain parts in the message.
|
| |
|
|
|
|
| |
failed, it might be because of a Re: prefix (or localized version
thereof). Pop off the first component of the args, use that as the
command and try again... once.
|
| |
|
|
|
| |
the site list to send the message. If there's no site list, you're in
heap big trouble.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
MailCommandHandler.py. Specific changes include:
class Results: Basically a bag to hold state during the processing of
a particular email message loaded with commands. This makes it easy
to pass data around (like the mailing list object and the message).
It also contains the results of the command processing and gloms up
the response email.
_dispose(): This method actually gets simplified because it just needs
to pass things to the Results instance and let it do the job of
processing the email commands.
|
| |
|
|
|
| |
msgdata's "recips" key to the list of recipients that were rejected,
otherwise lots of folks on the list will get duplicates!
|
| |
|
|
| |
sure why that is, but let's filter them out anyway.
|
| |
|
|
|
|
|
|
|
| |
delivery module (i.e. SMTPDirect) when it couldn't connect to the smtp
server. When this happens, log an error message, but only do it once
so we don't fill up logs/error with a message-per-second. We keep a
self.__logged flag which is set when we log the error and reset in the
class constructor, and when the process() function returned
successfully.
|
| |
|
|
|
| |
list's state via xlist.Load() -- conservative if the state hasn't
changed.
|
| |
|
|
| |
call mlist.Load() so we can be sure we've got the most current state.
|
| | |
|
| |
|
|
|
| |
list, call mlist.Load() so we can be sure we've got the most current
state.
|
| |
|
|
|
| |
additional indirection that's overridden by the BounceRunner.
Defaults to QRUNNER_SLEEP_TIME for backwards compatibility.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
perform better. In general there are two changes: 1) we never lock a
list until and unless absolutely necessary, 2) we only run the bounce
runner once every minute (as opposed to the normal runners'
once-per-second sleep time). Specifically,
SLEEPTIME: The base class now looks at this attribute to decide how
long to sleep between loop iterations, and it defines a default. We
override the bounce runner's value to lengthen the time it sleeps to 1
minute (we may eventually want to move this to Defaults.py).
__scanbounce(): Gone. All its functionality is subsumed in the new
ScanMessages() method and the new _dispose().
__verpbounce(): Renamed to the non-method verp_bounce(). Also, we rip
out the code that iterates through all the lists if the bounce came to
the site list's -bounces address.
_dispose(): Simply calls verp_bounce() to find bouncing addresses, and
if that returns a false value (empty list), calls ScanMessages() to
see if the bounce detector can find some bouncing addresses. If not,
we're done (after possibly forwarding the non-matching message).
Otherwise, we register the bounce either on the target mailing list,
or on all the mailing lists if this came to the site's -bounces
address.
|
| | |
|
| |
|
|
|
| |
ParseMailCommands() calls in this runner need to be wrapped around a
catch of TimeOutError.
|
| |
|
|
|
| |
acquisition of the shared pending.db database lock fails, we want to
requeue the message for another try later.
|
| |
|
|
| |
confirm mail script.
|