Python3从Gmail读取body文本



我正在尝试使用Python3通过电子邮件解析并在字符串列表中输出身体内容。身体的内容总是遵循以下模式:字符串 n String n String n等。

我当前遇到的错误是initial_value must be str or None, not bytes

import imaplib
import email
import time
import smtplib
from_email = "someemail@gmail.com"
from_pwd = "somepass"
smtp_server = "imap.gmail.com"
smtp_port= 993
def readmail(from_email,from_pwd,smtp_server,smtp_port ):
        try:
                mail = imaplib.IMAP4_SSL(smtp_server)
                mail.login(from_email,from_pwd)
                mail.select('inbox')
                result, data = mail.search(None, 'ALL')
                mail_ids = data[0]
                id_list = mail_ids.split()
                first_email_id =id_list[0]
                latest_email_id = id_list[-1] #most recent email
                result,data = mail.fetch(latest_email_id, "(RFC822)")
                raw_email = data[0][1]
                #read the email 
                email_message = email.message_from_string(raw_email)
                return email_message_instance.get_payload()
        except Exception as e:
                print(e)

print(readmail(from_email,from_pwd,smtp_server,smtp_port))

我知道该错误在"#阅读电子邮件"评论之后,因为我能够打印出RAW_EMAIL

email.message_from_string()期望字符串参数。您可以使用 email.message_from_bytes()来解决此问题。

另外,您可以将 raw_email 转换为字符串,如下所示

mail_content = raw_email.decode('utf-8')

和Pass mail_content in emage.message_from_string()

最新更新