From 9a3a1f2cb73ea71245e15292429f31db3f282bfc Mon Sep 17 00:00:00 2001 From: revsuine Date: Thu, 14 Nov 2024 18:46:30 +0000 Subject: [PATCH 1/3] encode the find and replaces for b64 decode --- gpgmymail | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gpgmymail b/gpgmymail index 1d23a23..c725fbf 100755 --- a/gpgmymail +++ b/gpgmymail @@ -82,8 +82,8 @@ def decode_email(message: email.message.Message) -> email.message.Message: for part in quopri_decoded_message.walk(): if not part.is_multipart(): if part.get("Content-Transfer-Encoding") == "base64": - b64_str = part.get_payload() - decoded_b64_str = part.get_payload(decode=True) + b64_str = part.get_payload().encode() + decoded_b64_str = part.get_payload(decode=True).encode() decoded_bytes = decoded_bytes.replace( b64_str, decoded_b64_str From b213a0ab52c6b645c566722979643d6d22c5a394 Mon Sep 17 00:00:00 2001 From: revsuine Date: Thu, 14 Nov 2024 18:52:18 +0000 Subject: [PATCH 2/3] don't encode decoded --- gpgmymail | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpgmymail b/gpgmymail index c725fbf..84fefb4 100755 --- a/gpgmymail +++ b/gpgmymail @@ -83,7 +83,7 @@ def decode_email(message: email.message.Message) -> email.message.Message: if not part.is_multipart(): if part.get("Content-Transfer-Encoding") == "base64": b64_str = part.get_payload().encode() - decoded_b64_str = part.get_payload(decode=True).encode() + decoded_b64_str = part.get_payload(decode=True) decoded_bytes = decoded_bytes.replace( b64_str, decoded_b64_str From 6590baafd19ae3ff422dc6d4daede19d60f32d0c Mon Sep 17 00:00:00 2001 From: revsuine Date: Thu, 14 Nov 2024 18:55:06 +0000 Subject: [PATCH 3/3] try do this by replacing entire payload --- gpgmymail | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gpgmymail b/gpgmymail index 84fefb4..41f6813 100755 --- a/gpgmymail +++ b/gpgmymail @@ -60,8 +60,7 @@ 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_string().encode() + decoded_bytes = message.as_bytes() decoded_bytes = quopri.decodestring(decoded_bytes) # replace any instances of the Content-Transfer-Encoding header @@ -82,11 +81,12 @@ def decode_email(message: email.message.Message) -> email.message.Message: for part in quopri_decoded_message.walk(): if not part.is_multipart(): if part.get("Content-Transfer-Encoding") == "base64": - b64_str = part.get_payload().encode() - 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