How do I determine if an email is Base64 encoded?
Asked Answered
H

2

6

I am having difficulty determining if the body of a text email message is base64 encoded. if it is then use this line of code; making use of jython 2.2.1

dirty=base64.decodebytes(dirty)

else continue as normal.

This is the code I have atm. What line of code will allow me to extract this from the email:

"Content-Transfer-Encoding: base64"

import email, email.Message
import base64

def _get_email_body(self):
    try:
        parts=self._email.get_payload()
        check=parts[0].get_content_type()
        if check=="text/plain":
            part=parts[0].get_payload()
            enc = part[0]['Content-Transfer-Encoding']
            if enc == "base64":
                dirty=base64.decodebytes(dirty)
        elif check=="multipart/alternative":
            part=parts[0].get_payload()
            enc = part[0]['Content-Transfer-Encoding']
            if part[0].get_content_type()=="text/plain":
                dirty=part[0].get_payload()
                if enc == "base64":
                    dirty=base64.decodebytes(dirty)
            else:
                return "cannot obtain the body of the email"
        else:
            return "cannot obtain the body of the email"
        return dirty
    except:
        raise

OKAY this code works now! thanks all

Helium answered 28/11, 2008 at 2:30 Comment(3)
It would help folks answering you if you could tell us what MIME library object(s) you're using. Are you using Python libraries or Java objects?Trimester
okay thanks for the reminder, normally quite good with this!Helium
Possible duplicate of how can I determine whether an email header is base64 encodedMillennium
W
6

Try:

enc = msg['Content-Transfer-Encoding']

It's a header so you won't be able to get it looking at the body. You should be able to get at the same place you find out the Subject.

Whirlpool answered 28/11, 2008 at 2:44 Comment(0)
N
1

It is a header but you have to get the payload first from the message.

It'll be:

header = msg.get_payload()[0]
header['Content-Transfer-Encoding']

I'm using Python 3

Nighthawk answered 25/5, 2017 at 18:0 Comment(2)
It seems that sometimes it's contained in message object, and sometimes it's contained in message.get_payload()[0], as Leon mentioned. Someone can please clarify this?Rosaleerosaleen
It's a header for each part of the message. So the main body parts (text or html) can be different, as can any attachments. As said above, you have to get the payload for each part, then determine the Content-Transfer-Encoding. I'm surprised it's not been added as a property, but as I'm not clever enough to write the whole email class, I won't criticise too much;-)Comfortable

© 2022 - 2024 — McMap. All rights reserved.