Gmail API Python-检索电子邮件正文
在我的Python代码中,我希望获得Gmail电子邮件的正文。我希望它能与任何电子邮件一起工作,独立于格式(纯文本、Mime等)和文本编码 据我所见,唯一的方法是编写一个能够处理任何场景的解码器。在开始之前,我有几个问题: 1-我说的对吗,或者有没有更简单的方法,从API或Python模块获取任何类型电子邮件的正文?(我对Python和Gmail API一无所知) 2-有没有人已经编写了这样的解码器,我可以导入到我的代码 谢谢,,Gmail API Python-检索电子邮件正文,python,python-2.7,gmail-api,Python,Python 2.7,Gmail Api,在我的Python代码中,我希望获得Gmail电子邮件的正文。我希望它能与任何电子邮件一起工作,独立于格式(纯文本、Mime等)和文本编码 据我所见,唯一的方法是编写一个能够处理任何场景的解码器。在开始之前,我有几个问题: 1-我说的对吗,或者有没有更简单的方法,从API或Python模块获取任何类型电子邮件的正文?(我对Python和Gmail API一无所知) 2-有没有人已经编写了这样的解码器,我可以导入到我的代码 谢谢,, Eric是一个简单而快速的沙盒案例,您必须重构某些部分 impo
Eric是一个简单而快速的沙盒案例,您必须重构某些部分
import re
import sys
import imaplib
import getpass
import email
import datetime
import string
import get_mail_search
from sys import stdout
M = imaplib.IMAP4_SSL('imap.gmail.com')
class Get_mail(object):
"""docstring for Get_mail"""
def __init__(self, *args):
super(Get_mail, self).__init__()
c=1
self.login(c)
self.toast_msg()
raw_input()
def toast_msg(self, *args):
"""docstring for Get_mail"""
M = self.mailbox()
stdout.write("\n{}\n".format(get_mail_search.search_help_info))
serach_input = raw_input()
rv, data = M.search(None, serach_input)
if rv != 'OK':
print "No messages found!"
id_ls = data[0].split()
rev_id_ls = [i for i in reversed(id_ls)]
if rev_id_ls:
for o in rev_id_ls:
try:
msg_content = self.process_mailbox(M, o)
_date_ = msg_content[0]
_from_ = msg_content[1]
_to_ = msg_content[2]
_subject_ = msg_content[3]
_msg_ = msg_content[4]
stdout.write("$$$$$$$$$$$\nDate: {}\nFrom: {}\nTo: {}\nSubject: {}\nMSG: {}\n".format(_date_,_from_,_to_,_subject_,_msg_))
except Exception, e:
pass
else:
stdout.write("No {} Mail Found!".format(serach_input))
raw_input()
self.toast_msg()
def login(self, try_c, *args):
"""docstring for Get_mail"""
try:
stdout.write("\nMail:\n")
mail = raw_input()
if mail:
M.login(str(mail), getpass.getpass())
else:
sys.exit(1)
except imaplib.IMAP4.error:
if try_c<=3:
stdout.write("Versuch: {}/3\n".format(try_c))
stdout.write("Die eingegebene E-Mail-Adresse und das Passwort stimmen nicht uberein. Nochmal versuchen")
try_c+=1
self.login(try_c)
else:
sys.exit(1)
def mailbox(self, *args):
"""docstring for Get_mail"""
rv, mailboxes = M.list()
if rv == 'OK':
for menu in mailboxes:
print('{}'.format(menu))
rv, data = M.select("inbox")
if rv == 'OK':
return M
def eval_decode(self, header, *args):
"""docstring for Get_mail"""
return email.Header.decode_header(header)[0]
def process_mailbox(self, M, num, *args):
"""docstring for Get_mail"""
rv, header = M.fetch(num, '(RFC822)')
if rv != 'OK':
print "ERROR getting message", num
header_msg = email.message_from_string(header[0][1])
if header_msg.is_multipart():
body=[payload.get_payload(decode=True) for payload in header_msg.get_payload()]
else:
body=payload.get_payload(decode=True)
from_decode = self.eval_decode(header_msg['From'])
subject_decode = self.eval_decode(header_msg['Subject'])
date_decode = self.eval_decode(header_msg['Date'])
to_decode = self.eval_decode(header_msg['To'])
return (date_decode[0], from_decode[0], to_decode[0], subject_decode[0], str(body[0]))
def run():
try:
Get_mail()
except KeyboardInterrupt:
M.close()
M.logout()
sys.exit(1)
run()
重新导入
导入系统
导入imaplib
导入getpass
导入电子邮件
导入日期时间
导入字符串
导入获取邮件搜索
从系统导入标准输出
M=imaplib.IMAP4_SSL('imap.gmail.com'))
类获取邮件(对象):
“”“获取邮件的文档字符串”“”
定义初始化(self,*args):
超级(获取邮件,自我)。\uuuu初始化
c=1
自我登录(c)
self.toast_msg()
原始输入()
def toast_msg(self,*args):
“”“获取邮件的文档字符串”“”
M=self.mailbox()
stdout.write(“\n{}\n”.format(get\u mail\u search.search\u help\u info))
serach_输入=原始_输入()
rv,数据=M.search(无,串行输入)
如果rv!='好的:
打印“未找到邮件!”
id_ls=数据[0]。拆分()
rev_id_ls=[i为i的反向(id_ls)]
如果版本id为:
对于版本id中的o:
尝试:
msg\u content=self.process\u邮箱(M,o)
_日期=消息内容[0]
_from=消息内容[1]
_to=味精内容[2]
_主题=信息内容[3]
_味精=味精含量[4]
stdout.write(“$$$$$$$$\n数据:{}\n从:{}\n到:{}\n对象:{}\nMSG:{}\n”。格式({date},{from},{to},{subject},{msg}))
除例外情况外,e:
通过
其他:
write(“找不到{}封邮件!”.format(serach_输入))
原始输入()
self.toast_msg()
def登录(self,try_c,*args):
“”“获取邮件的文档字符串”“”
尝试:
stdout.write(“\n邮件:\n”)
邮件=原始输入()
如果是邮寄:
M.login(str(mail),getpass.getpass()
其他:
系统出口(1)
除imaplib.IMAP4.error外:
如果尝试,cI将在接下来的几天内完成这项工作,并将结果发布在这里。我不使用IMAP来访问我的电子邮件,但您的process\u邮箱功能似乎是解决我问题的方法。无论如何,非常感谢!你可能想温习一下。