summaryrefslogtreecommitdiff
path: root/Mailman (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Convert from mimelib to email.bwarsaw2001-10-011-12/+12
| | | | | Also, use cStringIO directly instead of our own hack-around StringIO module.
* Use cStringIO directly instead of our own hack-around StringIObwarsaw2001-10-011-1/+1
| | | | module.
* Convert from mimelib to email.bwarsaw2001-10-014-34/+26
|
* Mostly cosmetic.bwarsaw2001-10-012-13/+2
|
* process(): Fixed typo in IOError error code comparison.bwarsaw2001-10-011-1/+1
|
* Convert from mimelib to email.bwarsaw2001-10-011-3/+4
| | | | | process(): Also, use the MembershipAdaptor API for calculating the recipients of an urgent message.
* Convert from mimelib to email.bwarsaw2001-10-011-2/+4
| | | | | | process(): Fixed buglet so that if there is no Subject: header in the original message, "(no subject)" -- properly i18nified -- will be used instead of "None".
* Add the code that would be used if personalized digests werebwarsaw2001-10-011-1/+46
| | | | supported.
* Convert from mimelib to email.bwarsaw2001-10-012-18/+7
| | | | | | | | Also, use cStringIO directly instead of our own hack-around StringIO module. admindb.py: Use ListAdmin.readMessage() to actually read the contents of the message from disk.
* Convert from mimelib to email.bwarsaw2001-10-0121-161/+83
| | | | | Also, use cStringIO directly instead of our own hack-around StringIO module.
* Use cStringIO directly instead of our own hack-around StringIObwarsaw2001-10-011-2/+1
| | | | module. Also, we don't need the string module.
* Use Python's default Cookie.py module instead of our own copy.bwarsaw2001-10-011-1/+1
|
* Convert from mimelib to email.bwarsaw2001-10-011-37/+45
| | | | | | | | | | | | | | | | | | | | | Also, use cStringIO directly instead of our own hack-around StringIO module. InitTempVars(): Don't set __filename here, since InitTempVars() is never called when the list is Create()'d (which may itself be a buglet). __filename(), __opendb(), __closedb(): New method to return the request.db absolute path on the fly. Use this in __opendb() and __closedb(). HoldMessage(): Store the message as a pickle instead of generating the plain text representation. This should be faster than reparsing on input. readMessage(): New function that will read either pickle or plain text held messages, depending on the file extension. This helps with backwards compatibility.
* Move the path hacking stuff to misc/paths.py.inbwarsaw2001-10-011-9/+0
|
* Convert from mimelib to email.bwarsaw2001-10-011-5/+5
|
* process(): Watch out for when the bounce has no X-Mailer: header.bwarsaw2001-09-101-1/+1
| | | | Reported by Luca Maranzano.
* Add Russian language hooks for when Mikhail Sobolev is ready with hisbwarsaw2001-09-081-0/+1
| | | | translation.
* Bump DATA_FILE_VERSION so existing lists will pick up one_last_digest.bwarsaw2001-09-081-1/+1
|
* InitVars(): For new lists, set one_last_digest to {}. Found by bothbwarsaw2001-09-081-0/+1
| | | | Mentor Cana and Michael Totschnig.
* __handlepost(): When a message is approved by the moderator, log abwarsaw2001-09-051-2/+6
| | | | | | | more informative message to logs/vette (one that includes the Message-ID: of the original message). Also, include an X-Moderated: header which lets recipients know when -- and by whom -- the message was approved.
* _dispose(): Reorganize the big if/elif/else switch so that it neverbwarsaw2001-09-051-9/+7
| | | | | | just short-circuit returns. We need to do this after moving the Save() into the try clause (which may turn out to not be the right thing to do...)
* AddMember(), ChangeMemberAddress(), ConfirmUnsubscription(): Fixedbwarsaw2001-09-051-3/+3
| | | | | confirm string construction to not use %(cookie)s -- unnecessary since de-i18n-ifying these strings. Found by Mikhail Sobolev.
* Convert all `reason' strings from class docstrings to attributes onbwarsaw2001-09-041-16/+17
| | | | | | | | | | the class, already i18n-ified. MessageTooBig.reason_notice(): Add this instead of setting a reason attribute, so that the proper i18n interpolation can occur. hold_for_approval(): Don't i18n-ify rejection-notice and don't str()-ify the reason string. Just send both through Utils.wrap().
* HoldMessage: Let's do this the non-clever way (which was causing toobwarsaw2001-09-041-3/+7
| | | | | | | | | many problem due to docstring non-extraction in pygettext). Now the attribute `reason' is used as the reason instead of the docstring, and reason_notice() is the called interface. This mirrors exactly how rejection notices are done. HoldMessage.__str__(): Removed.
* Add missing import of Mailman.Utilstwouters2001-09-041-0/+1
|
* AddMember(), ChangeMemberAddress(), ConfirmUnsubscription(): Thebwarsaw2001-08-301-3/+3
| | | | | | subject text, which contains the robot command "confirm" should not be translated, otherwise MailCommandHandler will break. Reported by Daniel Buchmann.
* request_deletion(): Fixed missing markup. Caught by Szilard Vizi.bwarsaw2001-08-301-1/+1
|
* Stop: a unique global value that bounce detectors can return in orderbwarsaw2001-08-291-0/+6
| | | | | | to stop processing immediately. This in effect provides for the recognition of temporary problem bounce messages which shouldn't RegisterBounce(), but /should/ discard the message.
* GetConfigInfo(): Added missing </ul> tag. Caught by Daniel Buchmann.bwarsaw2001-08-291-0/+1
|
* decorate(): String interpolation can throw either a ValueError /or/ abwarsaw2001-08-291-2/+2
| | | | | | | | TypeError, but only ValueError was being caught. This means stray %'s can still crash Mailman. Also, when interpolation fails, instead of using [INVALID FOOTER], return the raw footer text template.
* setMemberOption(): Stupid typo preventing users from setting anybwarsaw2001-08-291-3/+3
| | | | options. Caught by Ben Gertzfield.
* change_options(): Give some feedback on who's been removed.bwarsaw2001-08-291-0/+6
|
* GetMailmanFooter(): Don't hyperlink each individual list owner with abwarsaw2001-08-291-8/+5
| | | | | | | mailto: to their personal email address. Instead, hyperlink the lot of them with a mailto: to the list's -owner address. That let's us do a spam detect on the message before forwarding on the owners.
* KNOWN_SPAMMERS: Move this here from Mailman/Handlers/SpamDetect.pybwarsaw2001-08-291-0/+17
|
* Move KNOWN_SPAMMERS out of this file and into Defaults.py.in so it canbwarsaw2001-08-291-17/+9
| | | | | | | be properly configured in mm_cfg.py. process(): Don't support the header == None semantics (it was broken anyway). We may have to add this back later.
* _dispose(): Factor out common code paths to _toadmins().bwarsaw2001-08-291-25/+36
| | | | | | | | | | | | | | | | _toadmins(): Run the message through SpamDetect to filter out known spam patterns in messages to the list owners/moderators. Log such detected spam to logs/spam and discard the message. Also, for every message to a list's -owner or -admin address, we always send it on to the list owners and moderators, even though the moderators can't access the admin pages (only the admindb pages). Note 1: this makes the `tomoderators' key in the message metadata obsolete. Note 2: this may not be the Right Thing To Do.
* run(): Add a note about a minor bogosity in the calls tobwarsaw2001-08-291-1/+3
| | | | _doperiodic().
* process_request(): Don't use WebAuthenticate() here because that willbwarsaw2001-08-201-5/+7
| | | | | | | allow deletion of list by anybody with a valid cookie authentication. We /want/ to force the admin to enter the password explicitly, as an extra confirmation step, so use Authenticate() instead.
* process_request(): After the list is created, set the web_page_url andbwarsaw2001-08-201-45/+51
| | | | | | | | | | | | host_name attributes based on the calculated values. web_page_url's host name comes from get_domain() interpolated into DEFAULT_URL_PATTERN, while host_name comes from a lookup in the VIRTUAL_HOSTS table, defaulting to get_domain() if not found. Also, we're now responsible for saving the list, and once we've done so, we can unlock it and do the rest of the task (which doesn't require the lock, so can be done outside the try/finally).
* admin_overview(): Use get_domain() instead of hardcodedbwarsaw2001-08-201-2/+11
| | | | | | | | | DEFAULT_HOST_NAME to get the hostname. Also, do the same kind of virtual host filtering for the admin overview as we do in the listinfo overview. This more clearly separates the virtual domains (there perhaps should be a site overview).
* ScriptURL(): Instead of using DEFAULT_URL directly, usebwarsaw2001-08-201-2/+2
| | | | | | | | | | DEFAULT_URL_PATTERN and interpolate in the calculated web-request based host name (via get_domain()). This should improve vhost support. get_site_email(): Calculate hostname by looking up get_domain() results in VIRTUAL_HOSTS, defaulting to get_domain() if no vhost information was set.
* Create(): Let any exceptions in the os.makedirs() call percolate up.bwarsaw2001-08-201-5/+2
| | | | | | | I.e. don't catch and transform OSErrors to MMUnknownListErrors. Also, don't do a Save() here. The caller is now responsible for saving the list.
* Some improvements for virtual host support.bwarsaw2001-08-201-13/+38
| | | | | | | | | | | | | | | | | | | | | | | VIRTUAL_HOSTS is a dictionary mapping url base hostnames to email base hostnames. E.g. "mail.python.org" -> "python.org". When a new list is created, we attempt to ascertain the web host from the web request. We use that for web_page_url and then we look it up in VIRTUAL_HOSTS to find host_name. If not found, we use the same host for web_page_url and host_name. DEAFULT_EMAIL_HOST is now the preferred way to specify the default email host_name. It is set by configure to @FQDN@. DEFAULT_URL_HOST is now the preferred way to specify the default host for web_page_url. It is set by configure to @URL@. DEFAULT_URL_PATTERN is how to convert DEFAULT_URL_HOST to web_page_url. It must contain a single %s expansion. For backwards compatibility, DEFAULT_HOST_NAME = DEFAULT_EMAIL_HOST and DEFAULT_URL = DEFAULT_URL_PATTERN % DEFAULT_URL_HOST. Also, added another commented out MAILMAN_URL mirror.
* Process(): When personalizing regular deliveries, set the To: headerbwarsaw2001-08-171-0/+13
| | | | to point at the recipient instead of the list.
* GetConfigInfo(): Rewrite the `personalize' details to describe the To:bwarsaw2001-08-171-10/+16
| | | | header munging.
* FormatSubscriptionMsg(): Use triple quoted strings instead ofbwarsaw2001-08-171-36/+25
| | | | multiline individual strings.
* hold_for_approval(): dont_respond_to_post_requests =>bwarsaw2001-08-171-1/+1
| | | | respond_to_post_requests
* GetConfigInfo(): Typo. Also, say "list moderator" instead ofbwarsaw2001-08-171-4/+5
| | | | | "administrator". Add a VARHELP link to member_posting_only when describing "Restrict..." in the posters option
* GetConfigInfo(): For the `owner' option, add a link to thebwarsaw2001-08-171-13/+14
| | | | | | | | | | general#passwords section, and to the `moderator' option where appropriate. Likewise for `moderator' option. Also, dont_respond_to_post_requests => respond_to_post_requests and switch the polarity of the No/Yes radio.
* Convert lots of split-line strings to triple-quoted strings. Yes,bwarsaw2001-08-171-21/+18
| | | | | | | this is ugly, but it makes the job much easier for translators of certain languages. Also say "list moderator" instead of "list administrator".