diff options
| author | Barry Warsaw | 2012-03-13 21:03:01 -0700 |
|---|---|---|
| committer | Barry Warsaw | 2012-03-13 21:03:01 -0700 |
| commit | 80ac803cb2816dde0503671fd117ed134680de53 (patch) | |
| tree | ed2d40855f6b45dedf421a7a98bd83d95b6e3b40 /src/mailman/utilities/email.py | |
| parent | 07685642934fe934098927a9a9d20c17080f3dab (diff) | |
| download | mailman-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.py | 33 |
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 |
