使用mbox Python mdule解码和访问mbox文件
我需要将电子邮件数据库迁移到CRM,但有2个问题: 我可以访问mbox文件,但内容没有正确解码 我想创建一个类似dataframe的结构,包含以下列:“date、from、to、subject、body” 我尝试了以下方法:使用mbox Python mdule解码和访问mbox文件,python,email,mbox,Python,Email,Mbox,我需要将电子邮件数据库迁移到CRM,但有2个问题: 我可以访问mbox文件,但内容没有正确解码 我想创建一个类似dataframe的结构,包含以下列:“date、from、to、subject、body” 我尝试了以下方法: for i, message in enumerate(mbox): print("from :",message['from']) print("subject:",message['subject'])
for i, message in enumerate(mbox):
print("from :",message['from'])
print("subject:",message['subject'])
if message.is_multipart():
content = (part.get_payload(decode=True) for part in message.get_payload())
else:
content = message.get_payload(decode=True)
print("content:",content)
print("**************************************")
if i == 10:
break
并获得以下输出:
from : =?UTF-8?Q?Gonzalo_Gasset_Yba=C3=B1ez?= <gonzalo.gasset@baud.es>
subject: =?UTF-8?Q?Marqu=C3=A9s_de_Vargas_=26_Baud?=
content: <generator object <genexpr> at 0x7fe025f3a350>
**************************************
from : Mailtrack Reminder <reminders@mailtrack.io>
subject: Re: Presupuesto de Logotipo y =?utf-8?Q?Dise=C3=B1o?= Corporativo
para nuevo proyecto
content: b'<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset="utf-8">\r\n <meta name="viewport" content="width=device-width">\r\n <title>Reminder</title>\r\n</head>\r\n<style media="screen">\r\n body {\r\n font-family: Helvetica;\r\n }\r\n</style>\r\n<body style="background-color: #f6f6f6; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; .....
from:=?UTF-8?Q?冈萨罗?加塞特?Yba=C3=B1ez?=
主题:=?UTF-8?Q?Marqu=C3=A9s\u de\u Vargas\u=26\u波特=
内容:
**************************************
发件人:邮件跟踪提醒
主题:Re:prespuesto de Logotipo y=?utf-8?Q?Dise=C3=B1o?=Corporativo
新项目
内容:b'\r\n\r\n\r\n\r\n\r\n提醒\r\n\r\n\r\n正文{\r\n字体系列:Helvetica;\r\n}\r\n\r\n接受可用于生成消息的工厂
参数的具体实现。通过传递用初始化的方法,我们可以生成s,它将自动解码标题和正文
选择实际的身体比较棘手,可能取决于您的特殊要求。在下面的代码示例中,所有“文本”类型的部分都连接在一起,而非文本部分则被拒绝。您可能希望应用自己的选择标准
从email.parser导入BytesParser
从email.policy导入默认值
导入邮箱
mbox=mailbox.mbox(路径到邮箱,工厂=BytesParser(策略=default.parse)
对于ux,枚举中的消息(mbox):
打印(“日期::”,消息['date'])
打印(“收件人:”,邮件['to'])
打印(“发件人:”,消息[“发件人])
打印(“主题:”,消息['subject'])
如果消息.is_multipart():
内容=[]
对于message.walk()中的部分:
maintype=part.get\u content\u maintype()
如果maintype=='multipart'或maintype!='文本':
#拒绝容器和非文本类型
持续
contents.append(part.get\u content())
内容='\n\n'。加入(内容)
其他:
内容=消息。获取内容()
打印(“内容:”,内容)
打印(“**********************************************”)
我设法读取了大多数“.mbox”文件,但在一个31Gb大小的文件上出现了一个错误。给我以下错误:LookupError:未知编码:我建议现在使用try/except
跳过此类消息。如果可以将此类消息的字节转储到文件中,则可以提出一个新问题,包括作为证据的字节。