使用 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) 启用推送通知?