简体   繁体   中英

python decode email from base64

hello iam using python script to fetch a message from a specific address mail seems everything work fine but i have a problem with the printable result is a base64 code. i want to decode the result to get the decode message when do the final result with print, pls help!! already thanks

the code used.

# Importing libraries 
import imaplib, email 

user = 'USER_EMAIL_ADDRESS'
password = 'USER_PASSWORD'
imap_url = 'imap.gmail.com'

# Function to get email content part i.e its body part 
def get_body(msg): 
    if msg.is_multipart(): 
        return get_body(msg.get_payload(0)) 
    else: 
        return msg.get_payload(None, True) 

# Function to search for a key value pair 
def search(key, value, con): 
    result, data = con.search(None, key, '"{}"'.format(value)) 
    return data 

# Function to get the list of emails under this label 
def get_emails(result_bytes): 
    msgs = [] # all the email data are pushed inside an array 
    for num in result_bytes[0].split(): 
        typ, data = con.fetch(num, 'BODY.PEEK[1]') 
        msgs.append(data) 

    return msgs 

# this is done to make SSL connnection with GMAIL 
con = imaplib.IMAP4_SSL(imap_url) 

# logging the user in 
con.login(user, password) 

# calling function to check for email under this label 
con.select('Inbox') 

# fetching emails from this user "tu**h*****1@gmail.com" 
msgs = get_emails(search('FROM', 'MY_ANOTHER_GMAIL_ADDRESS', con)) 

# Uncomment this to see what actually comes as data 
# print(msgs) 


# Finding the required content from our msgs 
# User can make custom changes in this part to 
# fetch the required content he / she needs 

# printing them by the order they are displayed in your gmail 
for msg in msgs[::-1]: 
    for sent in msg: 
        if type(sent) is tuple: 

            # encoding set as utf-8 
            content = str(sent[1], 'utf-8') 
            data = str(content) 

            # Handling errors related to unicodenecode 
            try: 
                indexstart = data.find("ltr") 
                data2 = data[indexstart + 5: len(data)] 
                indexend = data2.find("</div>") 

                # printtng the required content which we need 
                # to extract from our email i.e our body 
                print(data2[0: indexend]) 

            except UnicodeEncodeError as e: 
                pass

THE RESULT PRINTED

'''

aGVsbG8gd29yZCBpYW0gdGhlIG1lc3NhZ2UgZnJvbSBnbWFpbA==

'''

You could just use the base64 module to decode base64 encoded strings:

import base64

your_string="aGVsbG8gV29ybGQ==" # the base64 encoded string you need to decode
result = base64.b64decode(your_string.encode("utf8")).decode("utf8")
print(result) 

encoding changed from ASCII to utf-8 on the advice of mCoding

If you need to find all encoded places (can be Subject, From, To email addresses with names), the code below might be useful. Given contentData is the entire email,

import re, base64
encodedParts=re.findall('(=\?(.+)\?B\?(.+)\?=)', contentData)
for part in encodedParts:
  encodedPart = part[0]
  charset = part[1]
  encodedContent = part[2]
  contentData = contentData.replace(encodedPart, base64.b64decode(encodedContent).decode(charset))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM