summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* __handlepost(): Use .attach() instead of .set_payload() to attach thebwarsaw2002-07-241-1/+1
| | | | | forwarding message to the outer container. Fixes and closes SF bug #585833.
* main(): When there are no more pending requests, include a reloadbwarsaw2002-07-241-0/+3
| | | | | link so you don't have to go back to the admin page if more helds have shown up.
* prefix_subject(): This should fix Fil's duplicate encoding problem.bwarsaw2002-07-231-7/+13
| | | | | | | | | | | | | | | | | | Before applying this patch, do this to reproduce the bug: - Set the language to something other than English (French makes a good choice) - Make sure the list has a prefix of some ascii text - Send a message to the list with the following Subject: =?iso-8859-1?Q?=E9?= Bingo, double encoding. This fixes the problem by making sure the prefix + original subject gets properly chunk encoded in a Header instance. There's a bit of extra goo in here that won't be necessary when I release email 2.2. See the comments for details. G'morning Fil! :)
* process(): Implement a suggestion by David W. Tamkin on list-managersbwarsaw2002-07-171-22/+24
| | | | | | | | | | | | | | | | | | | | | | | | (forward by JC Lawrence): Nick gave the example, | > Reply-to: listname@listdomain, posting-user@example.com JCL commented, | Having [mutiple addresses in] Reply-To is a Good ... and Damned Useful [Thing]. It seems to me, though, that the list membership would be better served with this form: Reply-To: postauthor@its.domain, listname@listserver.domain because the MUAs with which I'm familiar make it anywhere from slightly easier to far easier for the respondent to remove addresses from the right of the reply's To: than from the left. Also clean up some Pychecker nits.
* Some Pychecker suggested cleanupsbwarsaw2002-07-171-4/+3
|
* Need to import "email"bwarsaw2002-07-131-0/+1
|
* process(): Calculate the message content type once, falling back tobwarsaw2002-07-121-4/+5
| | | | | the default type if there is no Content-Type: header. Also, recognize that message/rfc822 parts are ismultipart() containers.
* _factory(): Removed as obsolete.bwarsaw2002-07-121-10/+1
| | | | | Mailbox.__init__(): We can simply pass email.message_from_file() as the factory.
* Simplify the configure checks for the mail host and url hostbwarsaw2002-07-111-2/+2
| | | | | | | | components, and add --with switches for easier overrides. Now, both default host names are chosen with socket.getfqdn(), and --with-mailhost overrides the email hostname part, while --with-urlhost overrides the url hostname part.
* send_i18n_digests(): Let's generate MIME digests the correct way, bybwarsaw2002-07-111-5/+9
| | | | | | | | | wrapping each message inside the multipart/digest in a MIMEMessage instance. We also no longer need to initialize the mimedigest instance's payload to the empty list. Also, when sending the digests, be sure to include isdigest=1 in the metadata, otherwise SMTPDirect will try to tack on another footer.
* find_textplain(): Don't recurse if the payload isn't a Messagebwarsaw2002-07-111-1/+4
| | | | instance.
* process(): Simply by just taking the first text/plain part.bwarsaw2002-07-111-2/+1
|
* ApprovedChangeMemberAddress(): Watch out for situations where the newbwarsaw2002-07-111-1/+6
| | | | | | address is already a member and don't make the address change in that case. However, if the old address is still a member, we'll just delete it.
* main(): Fixes for requesting a change of address where the new addressbwarsaw2002-07-111-5/+27
| | | | | | | | is already a member of the current list. If the change is requested globally, we'll output a warning message but still allow the change to go through (we'll catch already-a-member situations elsewhere). If the request is not global, then we'll refuse to make the change.
* ModeratedMemberPost: Reword the reason for doing this hold.bwarsaw2002-07-091-1/+1
|
* process(): Fix for confusing "you were subscribed and yourbwarsaw2002-07-091-3/+11
| | | | | | | | | | | | | confirmation string was invalid" messages. The problem was if the responder left the confirmation string in the Subject: and also copied it to the body, the second processing of the confirmation would find no cookie. So now we always stop after processing the first confirmation command (yes, that means no other commands in the message will be processed, which is fine). We also trim the unprocessed commands in the results to not include identical confirmation strings -- otherwise they'll see their confirmation as unprocessed.
* autorespondToSender(): Implement MAX_AUTORESPONSES_PER_DAY = 0 meansbwarsaw2002-07-091-0/+3
| | | | no limit.
* Document that MAX_AUTORESPONSES_PER_DAY = 0 means there's no limitbwarsaw2002-07-091-1/+2
| | | | (probably useful only for debugging).
* GetStandardReplacements(): Patch by Juan Carlos Rey Anaya to fix i18nbwarsaw2002-07-031-1/+1
| | | | display when only one language is available.
* sendNextNotification(): Fixed typo discovered by Jon Parise and Danbwarsaw2002-06-301-1/+1
| | | | Mick.
* MailUserPassword(): Missed a conversion to MemberAdaptor. Found bybwarsaw2002-06-291-1/+1
| | | | Tollef Fog Heen, with a friendly reminder from Marc MERLIN.
* Add the `nl' (Dutch) language specification.bwarsaw2002-06-281-0/+1
|
* InviteNewMember(): Prepend any text given in the mass subscribe pagebwarsaw2002-05-281-5/+13
| | | | | | | | | | | | | | | | to the invitation notification. Also, set an `invitation' attribute on the UserDesc record stored in the pending database. This is a hack so that ProcessConfirmation() can figure out if the subscription request was an invitation or not (easier than adding an INVITATION type to the Pending module). ApprovedAddMember(): Option text argument for passing in prepended text for subscription notifications. ProcessConfirmation(): If the SUBSCRIPTION action was an invitation (based on the magic existance of the `invitation' attribute on the UserDesc record), don't do additional approvals. If the user was invited, we /know/ the admin had to approve of that!
* SendSubscribeAck(): Prepend any text given in the mass subscribe pagebwarsaw2002-05-281-2/+2
| | | | to the subscription notification.
* mass_subscribe(), change_options(): Add a text box on the massbwarsaw2002-05-281-2/+12
| | | | | subscribe page so that the admin can add a custom message to be prepended to the welcome/invite notification.
* FormatSubscriptionMsg(): Fix missing space. Closes bug #555065 bybwarsaw2002-05-281-2/+4
| | | | Simone Piunno.
* make_response() -> send_response()bwarsaw2002-05-281-5/+15
| | | | | | 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.
* ackp(): New helper function.bwarsaw2002-05-281-1/+11
| | | | | | process(): Before sending the sender a notification message, check the X-Ack: and Precedence: headers, and also see if this sender has reached their auto-response limit.
* Bump the DATA_FILE_VERSION and add hold_and_cmd_autoresponses if it'sbwarsaw2002-05-282-1/+2
| | | | missing.
* midnight(): New utility function to calculate the epoch seconds of abwarsaw2002-05-281-0/+9
| | | | date in (year, month, day) format.
* InitVars(): Add a new attribute hold_and_cmd_autoresponses which is abwarsaw2002-05-281-0/+46
| | | | | | | | | | | | | | dictionary mapping sender addresses (they don't have to be members) to a 2-tuple of information (date, count). date is a 3-tuple of (year, month, day) and count is the number of auto-responses sent to the sender today. autorespondToSender(): This method is called whenever we're about to send a response to a -request message, or a hold notification. It returns 1 if the caller should send a normal autoresponse, and 0 otherwise. When we've just exceeded the maximum number of autoresponses, we send a message indicating that no more responses will be sent today (instead of the normal autoresponse).
* New site-wide variable MAX_AUTORESPONSES_PER_DAY which sets the limitbwarsaw2002-05-281-0/+8
| | | | | | on the number of -request and posting-hold responses any one list will send to any one recipient in a single day. This is to stop mail loops with email robots. Default this to 10.
* Some hacks to support notification of disabled delivery for reasonsbwarsaw2002-05-281-6/+31
| | | | | | | | | | | | | | | | | | | other than due to excessive bounces. Specifically, REASONS: sentence fragments for disable reasons (hopefully these can be translated). registerBounce(): The calculation of now and lastbounce was broken because the dst flag should have been set to -1 to let the library pick the right daylight savings time flag value. Use a new helper routine Utils.midnight() to calculate this. sendNextNotification(): Generalize a bit to handle notifications for other reasons. The ApprovedDeleteMember() message is now 'disabled address', and the syslog() message is generalized a bit too. Also, stick the reason sentence fragment into the modified disabled.txt template. TRANSLATORS TAKE NOTE!
* _getValidValue(): Widget types EmailList and EmailListEx may alreadybwarsaw2002-05-251-0/+6
| | | | | | | be lists when this method is called from config_list. If so, just return the value unmodified. Also, add the Topics widget type so config_list doesn't bomb out.
* get_item_gui_value(): Removed an unused local variable.bwarsaw2002-05-251-1/+0
|
* VIRTUAL_HOST_OVERVIEW: Fixed misleading comment. The admin overviewsbwarsaw2002-05-241-3/+3
| | | | are subject to this variable as well.
* _get_pipeline(): We don't need to send virgin messages through thebwarsaw2002-05-221-1/+1
| | | | Replybot.
* _dispose(): Send the message through the Replybot handler so -requestbwarsaw2002-05-221-3/+6
| | | | emails will be autoresponded. Closes bug #558909.
* process(): toadmin and the -admin address are deprecated.bwarsaw2002-05-221-4/+5
|
* GetConfigInfo(): The -admin address is deprecated.bwarsaw2002-05-221-6/+5
|
* QuoteHyperChars() -> websafe()bwarsaw2002-05-2214-37/+34
| | | | | Also, use Utils.websafe() consistently throughout, instead of the inconsistent calls to cgi.escape().
* process(): Use Precedence: list instead of bulk for mail list explodedbwarsaw2002-05-221-17/+8
| | | | | | | | messages. prefix_subject(): Since email.Header.Header.encode() already knows how to split long header lines, use this instead of our own attempts. This makes long subject lines much cleaner.
* UserNotification.send(): If the message doesn't already have abwarsaw2002-05-221-0/+5
| | | | | Precedence: header, add Precedence: bulk since these are typically internally crafted messages destined for a single address.
* get_senders(): Two fixes: first, make sure the unixfrom addition is abwarsaw2002-05-221-4/+4
| | | | | | 2-tuple with an empty realname item; second, we should extract all matching headers with Message.get_all() to make sure we don't miss anything (even though RFC 2822 says those should only appear once).
* _dispose(): Inhibit replybot when Precedence: is any of bulk, junk, orbwarsaw2002-05-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* process(): Inhibit replybot when Precedence: is any of bulk, junk, orbwarsaw2002-05-221-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* GetRequestURI(): Always cgi.escape() the url retrieved from thebwarsaw2002-05-201-5/+10
| | | | | environment. This closes a cross-site scripting hole in the admin login pages.
* process(), _dispose(): Where we were testing Precedence: againstbwarsaw2002-05-192-4/+5
| | | | "bulk", we now include "junk" and "list" as well.
* SMART_ADDRESS_MATCH: No longer used anywhere.bwarsaw2002-05-171-11/+4
| | | | Also, added support for Estonian.
* __handlepost(): Use localtime for the X-Mailman-Approved-At: header.bwarsaw2002-05-171-1/+1
|