summaryrefslogtreecommitdiff
path: root/src/mailman/utilities/email.py
diff options
context:
space:
mode:
authorBarry Warsaw2012-03-13 21:03:01 -0700
committerBarry Warsaw2012-03-13 21:03:01 -0700
commit80ac803cb2816dde0503671fd117ed134680de53 (patch)
treeed2d40855f6b45dedf421a7a98bd83d95b6e3b40 /src/mailman/utilities/email.py
parent07685642934fe934098927a9a9d20c17080f3dab (diff)
downloadmailman-80ac803cb2816dde0503671fd117ed134680de53.tar.gz
mailman-80ac803cb2816dde0503671fd117ed134680de53.tar.zst
mailman-80ac803cb2816dde0503671fd117ed134680de53.zip
Diffstat (limited to 'src/mailman/utilities/email.py')
-rw-r--r--src/mailman/utilities/email.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/mailman/utilities/email.py b/src/mailman/utilities/email.py
index 4b1023ce1..38c9980a2 100644
--- a/src/mailman/utilities/email.py
+++ b/src/mailman/utilities/email.py
@@ -21,10 +21,17 @@ from __future__ import absolute_import, unicode_literals
__metaclass__ = type
__all__ = [
+ 'add_message_hash',
'split_email',
]
+from base64 import b32encode
+from hashlib import sha1
+
+
+
+
def split_email(address):
"""Split an email address into a user name and domain.
@@ -39,3 +46,29 @@ def split_email(address):
# There was no at-sign in the email address.
return local_part, None
return local_part, domain.split('.')
+
+
+def add_message_hash(msg):
+ """Add a X-Message-ID-Hash header derived from Message-ID.
+
+ This function works by side-effect; the original message is mutated. Any
+ existing X-Message-ID-Headers are deleted if a Message-ID header is
+ found. If no Message-ID header is found, the original message is not
+ modified.
+
+ :param msg: An email message
+ :type msg: `email.message.Message` or derived
+ """
+ message_id = msg.get('message-id')
+ if message_id is None:
+ return
+ # The angle brackets are not part of the Message-ID. See RFC 2822
+ # and http://wiki.list.org/display/DEV/Stable+URLs
+ if message_id.startswith('<') and message_id.endswith('>'):
+ message_id = message_id[1:-1]
+ else:
+ message_id = message_id.strip()
+ digest = sha1(message_id).digest()
+ message_id_hash = b32encode(digest)
+ del msg['x-message-id-hash']
+ msg['X-Message-ID-Hash'] = message_id_hash