使用Python IMAP阅读Gmail邮件

时间:2018-12-25 10:28:50

标签: python imap gmail-imap

尽管在从许多站点进行了大量搜索之后,我做了大部分工作,但仍然无法获得想要的正确输出。

代码:

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”

     

hello444444444

     

巴拉特·乔希(Bharath Joshi)演绎:从没人那里星期二12月25日   15:48:52 2018内容类型:文本/纯文本; charset =“ UTF-8”

     

33333

     

巴拉特·乔希(Bharath Joshi)演绎:从没人那里星期二12月25日   15:48:53 2018内容类型:文本/纯文本; charset =“ UTF-8”

     

hello--22

困扰我的是我得到的额外的东西。

“来自无人……”和“内容类型...”。

我如何将其删除?

1 个答案:

答案 0 :(得分:2)

啊,电子邮件的“美丽”……显然,您面对的是多部分电子邮件,对于这些电子邮件,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 stackoverflow answer