diff --git a/gpgmymail b/gpgmymail index e7c6073..41f6813 100755 --- a/gpgmymail +++ b/gpgmymail @@ -60,7 +60,6 @@ def decode_email(message: email.message.Message) -> email.message.Message: # this is a kinda hacky way to do this by manipulating the message as a # string but i couldn't get it to work any other way # decoding needed: - # as_string() gives us str, encode() gives us bytes decoded_bytes = message.as_bytes() decoded_bytes = quopri.decodestring(decoded_bytes) @@ -79,26 +78,15 @@ def decode_email(message: email.message.Message) -> email.message.Message: # lol quopri_decoded_message = email.message_from_bytes(decoded_bytes) if quopri_decoded_message.is_multipart(): - most_recent_boundary = None for part in quopri_decoded_message.walk(): - # multipart and has boundary (not None) - if part.is_multipart() and part.get_boundary(): - most_recent_boundary = part.get_boundary() - else: + if not part.is_multipart(): if part.get("Content-Transfer-Encoding") == "base64": - b64_str = part.get_payload() - # remove the boundary as we don't want to change this - b64_str = b64_str.replace(most_recent_boundary, "") - # sometimes we have leftover hyphens from a boundary, so strip: - # hyphens not in base64 so we know not to use them - # strip whitespace first - b64_str = b64_str.strip() - b64_str = b64_str.strip('-') - b64_str = b64_str.encode() # turn into bytes-like object - decoded_b64_str = part.get_payload(decode=True) + new_part = part + new_part.replace_header("Content-Transfer-Encoding", "7bit") + new_part.set_payload(part.get_payload(decode=True)) decoded_bytes = decoded_bytes.replace( - b64_str, - decoded_b64_str + part.as_bytes(), + new_part.as_bytes() ) else: # TODO @@ -108,10 +96,8 @@ def decode_email(message: email.message.Message) -> email.message.Message: b'Content-Transfer-Encoding: base64', b'Content-Transfer-Encoding: 7bit' ) - - # if i do message_from_bytes it bizarrely changes it back to base64? - # utf-8 has encoding issues so do latin1 - return email.message_from_string(decoded_bytes.decode("latin1")) + + return email.message_from_bytes(decoded_bytes) def encrypt( message: email.message.Message,