使用 Python IMAP 读取 Gmail 邮件

Bha*_*shi 4 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
Run Code Online (Sandbox Code Playgroud)

输出:

Bharath Joshi subj: hehe From nobody Tue Dec 25 15:48:52 2018 Content-Type: text/plain; 字符集=“UTF-8”

你好444444444

Bharath Joshi subj: From nobody Tue Dec 25 15:48:52 2018 Content-Type: text/plain; 字符集=“UTF-8”

33333

Bharath Joshi subj: From nobody Tue Dec 25 15:48:53 2018 Content-Type: text/plain; 字符集=“UTF-8”

你好--22

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

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

我怎样才能删除那些?

han*_*ast 6

啊,电子邮件的“美丽”……显然您正面临着多部分电子邮件,对于这些,该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()
Run Code Online (Sandbox Code Playgroud)

要获得更完整的答案,请查看此 stackoverflow 答案