使用 Python IMAP 阅读 Gmail 邮件

Posted

技术标签:

【中文标题】使用 Python IMAP 阅读 Gmail 邮件【英文标题】:Reading Gmail messages using Python IMAP 【发布时间】:2019-05-24 02:12:10 【问题描述】:

虽然我在从很多网站搜索了很多内容后完成了大部分工作,但我仍然无法获得我想要的正确输出。

代码:

import imaplib

import smtplib

import email

mail=imaplib.IMAP4_SSL("imap.gmail.com")

mail.login("**************@gmail.com","********")

mail.select('inbox')

type,data=mail.search(None,'ALL')

mail_ids=data[0]

id_list=mail_ids.split()

for i in range(int(id_list[-1]),int(id_list[0])-1,-1):

    typ,data=mail.fetch(i,'(RFC822)') 
        for response_part in data :
            if isinstance(response_part,tuple):
                msg=email.message_from_string(response_part[1])
                email_from=msg['from']
                email_subj=msg['subject']
                c=msg.get_payload(0)
                print email_from
                print "subj:",email_subj
                print c

输出:

Bharath Joshi 主题:嘿嘿从没人星期二 2018 年 12 月 25 日 15:48:52 内容类型:文本/纯文本; charset="UTF-8"

你好444444444

Bharath Joshi 主题:来自没人 12 月 25 日星期二 15:48:52 2018 内容类型:文本/纯文本; charset="UTF-8"

33333

Bharath Joshi 主题:来自没人 12 月 25 日星期二 2018 年 15:48:53 内容类型:文本/纯文本; charset="UTF-8"

你好--22

困扰我的是我得到的额外的东西,即

“来自任何人......”和“内容类型......”

我怎样才能删除那些?

【问题讨论】:

【参考方案1】:

啊,电子邮件的“美”……显然您正面临多部分电子邮件消息,对于这些,get_payload() 方法也输出标题。您需要像这样使用msg.walk()

for response_part in data :
    if isinstance(response_part,tuple):
        msg=email.message_from_string(response_part[1])
        print "subj:", msg['subject']
        print "from:", msg['from']
        print "body:"
        for part in msg.walk():
            if part.get_content_type() == 'text/plain':
                print part.get_payload()

如需更完整的答案,请查看this *** answer

【讨论】:

@BharathJoshi 如果它解决了您的用例,请接受答案,否则请解释仍未回答的问题 fetch() 方法似乎同时返回元组(您实际要查找的内容)和字符串,例如)(我不完全理解为什么,here 是关于这个的一些讨论)。如果您不检查 response_part 是否为元组,则在执行 response_part[1] 时会遇到问题,因为当字符串的大小仅为 1 时,您会遇到您发布的字符串索引超出范围问题

以上是关于使用 Python IMAP 阅读 Gmail 邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中执行IMAP搜索(使用Gmail和imaplib)?

如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?

在 jsp 中使用 imap 从 gmail 读取电子邮件

使用 imaplib 阅读电子邮件 - “超过 10000 字节”错误

Python IMAP 从或到指定的电子邮件地址搜索

imaplib2:imap.gmail.com 处理程序 BYE 响应:系统错误