diff options
Diffstat (limited to 'src/mailman/email/message.py')
| -rw-r--r-- | src/mailman/email/message.py | 53 |
1 files changed, 14 insertions, 39 deletions
diff --git a/src/mailman/email/message.py b/src/mailman/email/message.py index 1fca952c7..e653133ba 100644 --- a/src/mailman/email/message.py +++ b/src/mailman/email/message.py @@ -28,6 +28,7 @@ from __future__ import absolute_import, print_function, unicode_literals __metaclass__ = type __all__ = [ 'Message', + 'MultipartDigestMessage', 'OwnerNotification', 'UserNotification', ] @@ -36,9 +37,9 @@ __all__ = [ import email import email.message import email.utils -import email.mime.multipart from email.header import Header +from email.mime.multipart import MIMEMultipart from mailman.config import config @@ -54,29 +55,6 @@ class Message(email.message.Message): self.__version__ = VERSION email.message.Message.__init__(self) - def __getitem__(self, key): - # Ensure that header values are unicodes. - value = email.message.Message.__getitem__(self, key) - if isinstance(value, str): - return unicode(value, 'ascii') - return value - - def get(self, name, failobj=None): - # Ensure that header values are unicodes. - value = email.message.Message.get(self, name, failobj) - if isinstance(value, str): - return unicode(value, 'ascii') - return value - - def get_all(self, name, failobj=None): - # Ensure all header values are unicodes. - missing = object() - all_values = email.message.Message.get_all(self, name, missing) - if all_values is missing: - return failobj - return [(unicode(value, 'ascii') if isinstance(value, str) else value) - for value in all_values] - # BAW: For debugging w/ bin/dumpdb. Apparently pprint uses repr. def __repr__(self): return self.__str__() @@ -145,23 +123,20 @@ class Message(email.message.Message): field_values = self.get_all(header, []) senders.extend(address.lower() for (display_name, address) in email.utils.getaddresses(field_values)) - # Filter out None and the empty string. - return [sender for sender in senders if sender] - - def get_filename(self, failobj=None): - """Some MUA have bugs in RFC2231 filename encoding and cause - Mailman to stop delivery in Scrubber.py (called from ToDigest.py). - """ - try: - filename = email.message.Message.get_filename(self, failobj) - return filename - except (UnicodeError, LookupError, ValueError): - return failobj + # Filter out None and the empty string, and convert to unicode. + clean_senders = [] + for sender in senders: + if not sender: + continue + if isinstance(sender, bytes): + sender = sender.decode('ascii') + clean_senders.append(sender) + return clean_senders -class MultipartMessage(email.mime.multipart.MIMEMultipart, Message): - """Class for MIME digest messages""" +class MultipartDigestMessage(MIMEMultipart, Message): + """Mix-in class for MIME digest messages.""" @@ -191,7 +166,7 @@ class UserNotification(Message): :param mlist: The mailing list to send the message to. :type mlist: `IMailingList` - :param add_precedence: Flag indicating whether a `Precedence: bulk` + :param add_precedence: Flag indicating whether a `Precedence: bulk` header should be added to the message or not. :type add_precedence: bool |
