diff options
Diffstat (limited to 'mailman/Message.py')
| -rw-r--r-- | mailman/Message.py | 48 |
1 files changed, 18 insertions, 30 deletions
diff --git a/mailman/Message.py b/mailman/Message.py index 5ca763b30..ac41a758c 100644 --- a/mailman/Message.py +++ b/mailman/Message.py @@ -17,8 +17,8 @@ """Standard Mailman message object. -This is a subclass of mimeo.Message but provides a slightly extended interface -which is more convenient for use inside Mailman. +This is a subclass of email.message.Message but provides a slightly extended +interface which is more convenient for use inside Mailman. """ import re @@ -28,15 +28,15 @@ import email.utils from email.charset import Charset from email.header import Header +from lazr.config import as_boolean -from mailman import Defaults from mailman import Utils from mailman.config import config COMMASPACE = ', ' mo = re.match(r'([\d.]+)', email.__version__) -VERSION = tuple([int(s) for s in mo.group().split('.')]) +VERSION = tuple(int(s) for s in mo.group().split('.')) @@ -111,7 +111,7 @@ class Message(email.message.Message): self._headers = headers # I think this method ought to eventually be deprecated - def get_sender(self, use_envelope=None, preserve_case=0): + def get_sender(self): """Return the address considered to be the author of the email. This can return either the From: header, the Sender: header or the @@ -124,20 +124,13 @@ class Message(email.message.Message): - Otherwise, the search order is From:, Sender:, unixfrom - The optional argument use_envelope, if given overrides the - config.mailman.use_envelope_sender setting. It should be set to - either True or False (don't use None since that indicates - no-override). - unixfrom should never be empty. The return address is always - lowercased, unless preserve_case is true. + lower cased. This method differs from get_senders() in that it returns one and only one address, and uses a different search order. """ - senderfirst = config.mailman.use_envelope_sender - if use_envelope is not None: - senderfirst = use_envelope + senderfirst = as_boolean(config.mailman.use_envelope_sender) if senderfirst: headers = ('sender', 'from') else: @@ -166,46 +159,41 @@ class Message(email.message.Message): else: # TBD: now what?! address = '' - if not preserve_case: - return address.lower() - return address + return address.lower() - def get_senders(self, preserve_case=0, headers=None): + def get_senders(self): """Return a list of addresses representing the author of the email. The list will contain the following addresses (in order) depending on availability: 1. From: - 2. unixfrom + 2. unixfrom (From_) 3. Reply-To: 4. Sender: - The return addresses are always lower cased, unless `preserve_case' is - true. Optional `headers' gives an alternative search order, with None - meaning, search the unixfrom header. Items in `headers' are field - names without the trailing colon. + The return addresses are always lower cased. """ - if headers is None: - headers = Defaults.SENDER_HEADERS pairs = [] - for h in headers: - if h is None: + for header in config.mailman.sender_headers.split(): + header = header.lower() + if header == 'from_': # get_unixfrom() returns None if there's no envelope - fieldval = self.get_unixfrom() or '' + unix_from = self.get_unixfrom() + fieldval = (unix_from if unix_from is not None else '') try: pairs.append(('', fieldval.split()[1])) except IndexError: # Ignore badly formatted unixfroms pass else: - fieldvals = self.get_all(h) + fieldvals = self.get_all(header) if fieldvals: pairs.extend(email.utils.getaddresses(fieldvals)) authors = [] for pair in pairs: address = pair[1] - if address is not None and not preserve_case: + if address is not None: address = address.lower() authors.append(address) return authors |
