2013-10-24 4 views
0

전체 메시지를 다운로드 할 필요없이 Gmail의 전자 메일 본문 (일반적으로 imap 서버)을 얻고 싶습니다.imaplib을 사용하여 전자 메일 본문 구문 분석

mail_box.fetch(message_ids, '(RFC822)') 

을하지만 너무 많은 메시지가 첨부 파일과 함께, 시간이 많이 걸리는 경우이 문제는 다음과 같습니다

내가 RC822에 대한 가져올 경우, 내가 잘 모든 것을 얻을 수 있습니다.

내가 할 수 내가 함께해야 할 바로 헤더와 텍스트 본문을 얻을 :

mail_box.fetch(message_ids, '(RFC822.HEADER BODY.PEEK[1])') 

하지만 텍스트 본문을 구문 분석 할 수 없습니다 이런 식으로, 그것은 이상한 형식은 :

'\r\n------=_NextPart_001_0011_01CB63DF.D39BA1C0\r\nContent-Type: text/plain;\r\n\tcharset="iso-8859-1"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nRafael, ...other content like html tags and css...------=_NextPart_001_0011_01CB63DF.D39BA1C0--\r\n' 

을 시도를 email.message_from_string 및 quopri 모듈을 사용하여 구문을 분석하지만 지금까지는 아무런 운이 없었습니다.

가능합니까? 첨부 파일을 다운로드하지 않고 RFC822와 같은 형식의 메시지를 가져 오려면?

+0

'------ = _ NextPart_001_0011_01CB63DF.D39BA1C0' 헤더 필드'Content-Type : multipart/....;가있는 멀티 파트 메시지 인 메시지에 대한 힌트. 경계 = ---- = _ NextPart ... '. 어쩌면 당신은 Body를 디코딩하는 함수에'Content-Type' 헤더를 넘겨줘서 NextPart와 무엇을 해야할지 알 수 있습니다. 몇 가지 추가 정보 : https://en.wikipedia.org/wiki/MIME#Multipart_messages – User

+1

BODYSTRUCTURE를 가져 와서 구문 분석하면 필요한 부분 만 가져 오거나 1과 함께 갈 수 있도록 MIME 부분 헤더를 가져올 수 있습니다. MIME 메시지 IMAP에는 "그냥 몸을주세요"(HTML? 텍스트? RTF? PDF?)라고 말하는 방법이 없으므로 BODYSTRUCTURE를 추측하거나 실제로 어떤 부분을 식별하는지 추측 할 수 있습니다 1.1 또는 1.1.1처럼 그것을 가져오고 가져오고 .... – Max

+0

내가 해냈어, 나는 첫 번째 BODYSTRUCTURE를 가져오고 나는 1로 텍스트 일반 메시지를 발견했다 (BODY.PEEK [1]을 가져 오는 이유이다). 그러나 이것을 가져 오면 텍스트 문자열에 이상한 헤더가옵니다. 더 나은 방법이 있는지 궁금해서 슬라이스와 하위 문자열을 수동으로 구문 분석합니다. – rafanunes

답변

0

올바른 방법은 메시지의 BODYSTRUCTURE을 요청하고 관련 부분 만 가져 오는 것입니다.

의견에서 이미 BODYSTRUCTURE을 가져 왔으며 1 부분은 text/plain MIME 부분에 해당합니다. 우리에게 처리되지 않은 전체를 보여주십시오. BODYSTRUCTURE; 이를 사용하지 않으면 사용중인 IMAP 서버가 버그인지 여부 또는 BODYSTRUCTURE에 대한 이해가 잘못되었는지 여부를 알 수 없습니다.

관련 문제