2013-05-12 2 views
0

У меня есть электронная почта, с которой я пытаюсь загрузить приложение, используя imaplib.Почему приложения .CAB я извлекаю с повреждением imaplib?

Я использую библиотеку электронной почты для перевода сообщений в класс email.message. Это отлично работает для всех электронных писем, с которыми я имею дело, но когда я извлекаю это вложение, файл выглядит неповрежденным и использует сравнение Notepad ++, соответствует исходному файлу cab, загружаемому через Thunderbird.

Это пример кода, который я использую.

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 или используя EXPAND.exe окна, он выводит следующее сообщение.

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

У кого-нибудь есть идеи, почему это может произойти?

+0

ли файл "загруженный через Thunderbird" экстракт OK? Если это так, убедитесь, что оба файла _really_ одинаковы. Либо загрузите их, либо как байты, и сравните их. Или, если файлы являются большими, используйте hashlib.sha512 и убедитесь, что контрольные суммы совпадают. –

ответ

0

Я исправил свою проблему. Мне также нужно было открыть файл в двоичном режиме.

Так

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

становится

with open(fileName, 'wb') as f: 
Смежные вопросы