Python中的Gmail的IMAP - 获得电子邮件的主体文本不能在一个字符串(Python g

2019-09-27 09:52发布

我一直试图在这里弄清楚了这一点,并找到解决方案上的计算器和其他地方,但我不能得到它(在Python我想没有足够的经验),所以请帮助:

我使用Python中imaplib和电子邮件库,从我的Gmail帐户的电子邮件。 我可以登录并找到我想要的邮件,我已经实现了脚本来捕捉多的邮件,但邮件(通过get_payload法)的身体的输出文本是一个字符串,我想获得身体电子邮件的,因为它被发送,以使得每个新的线(作为一个字符串)被分离并存储成一个列表。 请看看我的代码的一部分:

    mail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
    mail.login('mymail@gmail.com', 'password')
    mail.select("inbox")
    date = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%d-%b-%Y")
    result, data = mail.uid('search', 'UNSEEN', '(SENTSINCE {date} FROM "someone@gmail.com")'.format(date=date))
    latest_email_uid = data[0].split()[-1]
    result, data = mail.uid('fetch', latest_email_uid, '(RFC822)')
    raw_email = data[0][1]
    email_message = email.message_from_string(raw_email)
    text = ''
    if email_message.is_multipart():
            html = None
            for part in email_message.get_payload():
                if part.get_content_charset() is None:
                    text = part.get_payload(decode=True)
                    continue
                charset = part.get_content_charset()
                if part.get_content_type() == 'text/plain':
                    text = unicode(part.get_payload(decode=True), str(charset), "ignore").encode('windows-1250', 'replace')
                if part.get_content_type() == 'text/html':
                    html = unicode(part.get_payload(decode=True), str(charset), "ignore").encode('windows-1250', 'replace')
            if text is not None:
                text.strip()
            else:
                html.strip()
    else:
        text = unicode(email_message.get_payload(decode=True), email_message.get_content_charset(), 'ignore').encode('windows-1250', 'replace')
        text.strip()
    print text

事先我有一些更多的代码,并在顶部的运行代码所需的进口图书馆,所以没有必要检查。 我试着声明文本= [],我试着不去条()文本或HTML,..但我只是无法得到它。 有一个简单的方法来获得身体的文本,因为它被送往,在它自己的行每串? 我觉得它是如此简单,但我不明白它..在此先感谢!

文章来源: Python gmail imap - get text of email body not in a single string