2011-10-18 3 views
1

임베디드 이메일로 이미지를 잡으려고합니다. 문제는 내가 저장 한 이미지를 읽을 수 없으며 이유를 파악할 수 없다는 것입니다. (내가 코드의 시작 부분에서로드 파일로 저장) 이메일 :파이썬으로 이메일에 이미지 임베드 저장

MIME-Version: 1.0 

Received: by 10.100.120.7 with HTTP; Tue, 18 Oct 2011 10:36:48 -0700 (PDT) 

In-Reply-To: <[email protected]e.com> 

References: <[email protected]e.com> 

Date: Tue, 18 Oct 2011 19:36:48 +0200 

Delivered-To: [email protected] 

Message-ID: <[email protected]om> 

Subject: openme 

From: Simeon Shpiz <[email protected]> 

To: me <[email protected]> 

Content-Type: multipart/related; boundary=001636c5977303b92404af962ba6 



--001636c5977303b92404af962ba6 

Content-Type: multipart/alternative; boundary=001636c5977303b91d04af962ba5 



--001636c5977303b91d04af962ba5 

Content-Type: text/plain; charset=ISO-8859-1 



**** 



--001636c5977303b91d04af962ba5 

Content-Type: text/html; charset=ISO-8859-1 

Content-Transfer-Encoding: quoted-printable 



<div dir=3D"ltr"><div class=3D"gmail_quote"><div lang=3D"EN-US" link=3D"blu= 

e" vlink=3D"purple"><div><p class=3D"MsoNormal"><span style=3D"font-size:11= 

.0pt;color:#1F497D"><img width=3D"15" height=3D"13" src=3D"cid:image003.png= 

@01CC8DCD.30A2A7C0"></span><span style=3D"font-size:11.0pt;color:#1F497D"><= 

u></u><u></u></span></p> 



</div> 

</div></div><br></div> 



--001636c5977303b91d04af962ba5-- 

--001636c5977303b92404af962ba6 

Content-Type: image/png; name="image003.png" 

Content-Transfer-Encoding: base64 

Content-ID: <[email protected]> 

X-Attachment-Id: 3e79c375acccec3d_0.1 



iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAIAAAAWvsgoAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO 

yAAADsMBrahYpwAAAItJREFUKFNj/P//PwNxgIk4ZWBVQFOBoBsMsGqrqqr6CgYsaNIPHz6EiMjJ 

yb19+xbISE9PLy4uBjLQlSLrFBYWBnITExN9fHyADMJulZCQgOgnrFRUVJRYpXAnETb19evXxJr6 

4sULiFJ8IfDt2zegii1btmRkZGBRKi8vjxbSwKjJysoCCjISnwYATtwwhahioZoAAAAASUVORK5C 

YII= 

--001636c5977303b92404af962ba6-- 

파이썬 코드 내가 사용하고는 :

import email 
from BeautifulSoup import BeautifulSoup 

message = email.message_from_file(open(r'C:\shpiz\test\msg\12248')) 
cid_list = [] 
images = [] 
for part in message.walk(): 
    if str(part.get_content_type()) == 'text/html': 
     soup = BeautifulSoup(part.get_payload(decode=True)) 
     cid = '<%s>'%soup('img')[0]['src'][4:] 
     cid_list.append(cid) 

for part in message.walk(): 
    if part.get('Content-ID') in cid_list : 
     images.append((part.get_filename(),part.get_payload(decode=True))) 
for name, image in images: 
    with open(r'c:\shpiz\test\%s'%name,'w') as f: 
     f.write(image) 

저장된 이미지는 불행하게도 좋지 않다. (프로그램이 열리지 않습니다).

원본과 새로운 이미지 파일을 메모장 + +로보고 차이점이 있습니다. 원본에없는 생성 된 복사본을 줄 바꿈하는 것처럼 보입니다. 메모장에서 줄을 지우는 것만으로도 이미지를 열 수있는 것은 아니지만 유일한 차이점은 아닙니다. 설명 된 차이를 볼 수 있습니다 here

문제를 찾는 데 도움이되는 질문이 있으시면.

답변

2

이미지를 텍스트 모드로 쓰고 파이썬이 라인 결말을 변환하고 있습니다. 그것을 wb 모드로 열어 축 어적으로 작성하십시오.

+0

고마워. 그것이 문제였습니다. –

0

문제는이 라인에 있습니다

for name, image in images: 
    with open(r'c:\shpiz\test\%s'%name,'w') as f: 
     f.write(image) 

열거하여 만든 파일은 기본적으로 텍스트 파일입니다. 당신은 'w'와 함께 'b'를 사용해야합니다. 그러나 그것이 전체적인 문제를 해결할 수 있을지 나는 모른다. 그래픽 파일을위한 전문적인 리더/라이터가 필요할 수도 있습니다.

+0

실제로 'w +'대신 'wb'로 저장하는 것이 유일한 문제입니다. 너무 바보 같아서 그걸 알아 내는데 많은 시간을 낭비 했어 –

관련 문제