summaryrefslogtreecommitdiff
path: root/src/mailman/email/message.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/email/message.py')
-rw-r--r--src/mailman/email/message.py53
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