from email import policy from email.message import EmailMessage from email.parser import BytesParser import hashlib from io import BytesIO message_file = "test.eml" mave_mail_policy_parser = policy.EmailPolicy(max_line_length=998) message_parser = BytesParser(policy=mave_mail_policy_parser) def print_hash_parts(message): for part in message.walk(): part_body = part.get_payload(decode=True) if not part_body: continue hashvalue = hashlib.md5() hashvalue.update(part_body) hashvalue_hex = hashvalue.hexdigest() print(hashvalue_hex) def test_parsebytes(): with open(message_file, "rb") as f: data = f.read() message = message_parser.parsebytes(data) print_hash_parts(message) def test_parse_with_bytesio(): with open(message_file, "rb") as f: data = f.read() message = message_parser.parse(BytesIO(data)) print_hash_parts(message) def test_parse(): with open(message_file, "rb") as f: message = message_parser.parse(f) print_hash_parts(message) print("MD5 sums with parsebytes with bytes data") test_parsebytes() print("------------------------") print("MD5 sums with parse and BytesIO with bytes data") test_parse_with_bytesio() print("------------------------") print("MD5 sums with parse from file") test_parse()