Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mbox Python mdule解码和访问mbox文件_Python_Email_Mbox - Fatal编程技术网

使用mbox Python mdule解码和访问mbox文件

使用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'])

我需要将电子邮件数据库迁移到CRM,但有2个问题:

我可以访问mbox文件,但内容没有正确解码

我想创建一个类似dataframe的结构,包含以下列:“date、from、to、subject、body”

我尝试了以下方法:

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
跳过此类消息。如果可以将此类消息的字节转储到文件中,则可以提出一个新问题,包括作为证据的字节。