2013-05-12 21 views
0

我有一封电子邮件,我正尝试从imaplib下载附件。为什么我使用imaplib损坏的.CAB附件?

我正在使用电子邮件库将消息转换为email.message类。对于我正在处理的所有电子邮件,这是完美的工作,但是当我获取此附件时,该文件看起来完好无损,并且使用Notepad ++的比较与通过Thunderbird下载的原始cab文件相匹配。

这是我使用的代码的一个例子。

fileContents = message.get_payload()[1].get_payload(decode=True) # 
fileName = message.get_payload()[1].get_filename() 
with open(fileName, 'w') as f: 
    f.write(fileContents) 

正如我所说的,文件内容看起来与通过其他客户端下载的原始文件相同。它的尺寸正好相同。但是,当我在WinRar,7zip或使用Window的EXPAND.exe打开下载的文件时,它会显示以下消息。

! H:\Code\Backup Monitor\backupsite\tst.CAB: The archive is corrupt 

有没有人有任何想法,为什么这可能会发生?

+0

是否 “通过雷鸟下载” 文件提取OK?如果是这样,请确保这两个文件是相同的。既可以将它们装载为字节串并进行比较。或者,如果文件很大,请使用'hashlib.sha512'并验证校验和是否相同。 – 2013-05-12 18:26:19

回答

0

我修正了我自己的问题。我需要以二进制模式打开文件。

所以

with open(fileName, 'w') as f: 

成为

with open(fileName, 'wb') as f: 
相关问题