2013-05-12 3 views
0

imaplib을 사용하여 첨부 파일을 다운로드하려고한다는 이메일이 있습니다.왜 Imaplib로 가져온 .CAB 첨부 파일이 손상 되었습니까?

전자 메일 라이브러리를 사용하여 전자 메일을 email.message 클래스로 변환하고 있습니다. 이것은 내가 다루고있는 모든 이메일에 대해 완벽하게 작동하지만이 첨부 파일을 가져 오면 파일이 손상되지 않고 메모장 ++의 비교 기능을 사용하여 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

는 "썬더 버드를 통해 다운로드"파일 추출 확인을합니까된다? 그렇다면 두 파일이 모두 동일해야합니다. 둘 다 바이트 체크로로드하고 비교하십시오. 또는 파일이 크면'hashlib.sha512'를 사용하고 체크섬이 동일한 지 확인하십시오. –

답변

0

제 자신의 문제가 수정되었습니다. 바이너리 모드에서도 파일을 열 필요가있었습니다.

그래서

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

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