2016-09-28 1 views
1

저는 python 라이브러리 imaplib 및 전자 메일을 사용하여 메일을 가져 오는 중소 도구 용 Python 코드를 작성했습니다. 코드 문은 다음과 같습니다.imaplib : maintype을 결정하는 요소는 "text"또는 "multipart"입니다.

import imaplib 
import email 
mail = imaplib.IMAP4_SSL('imap.server') 
mail.login('[email protected]', 'password') 
result, data = mail.uid('search', None, "ALL") 
latest_email_uid = data[0].split()[-1] 
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)') 
raw_email = data[0][1] 
email_message = email.message_from_string(raw_email) 
maintype = email_message_instance.get_content_maintype() 

다른 호스트 컴퓨터에서 동시에 스크립트를 실행하고 있습니다. 내가 겪고있는 문제는 메일 본문을 가져 오는 동안 같은 수신 전자 메일의 경우 첫 번째 호스트의 mac maintype은 "텍스트"로 평가되는 반면 다른 호스트 컴퓨터의 경우 스크립트 실행 중에 "다중 파트"로 평가됩니다.

이 값이 런타임에 어떻게 결정되는지 알고 싶습니다. 메인 스타일을 "multipart"로 항상 지정하려면 이메일 본문에 이메일을 쓰는 동안 어떤 표준 레이아웃을 따라야합니다. 댓글에서

+0

그리고 한 컴퓨터의 raw_email과 다른 컴퓨터의 raw_email의 차이점은 무엇입니까? – zvone

+0

안녕하세요. 두 경우 모두 raw_email에는 여러 값을 가진 원시 HTML 코드가 있습니다. 대부분의 모든 html 코드는 몇 가지 차이점을 제외하고는 동일합니다. maintype = multipart, Content-Type = "multipart/alternative"의 경우 boundary 태그가 있습니다. maintype = text, Content-Type = "text/html"의 경우 경계 필드가 없습니다. – nil13

답변

0

: 두 경우 모두에 대한

raw_email 여러 값 원시 html 코드를 가지고있다. 대부분의 모든 html 코드는 몇 가지 차이점을 제외하고는 동일합니다. maintype = multipart, Content-Type = "multipart/alternative"의 경우 boundary 태그가 있습니다. maintype = text, Content-Type = "text/html"의 경우 경계 필드가 없습니다.

글쎄, 질문에 대한 대답입니다. get_content_maintypeContent-Type의 첫 번째 부분을 반환하며 멀티 파트/대체의 경우 multipart이고/html의 경우 text을 반환합니다.

multiplart/alternative은 여러 가지 대체 이메일 버전이 있음을 의미합니다. 대개 html + 텍스트입니다. 전자 메일은 종종 모든 클라이언트 (텍스트 부분)가 읽을 수 있기 때문에 그런 식으로 보내지 만이를 지원하는 클라이언트에서 사용되는 HTML 서식을 여전히 포함하게됩니다.

분명히 이메일 중 하나는 HTML과 텍스트로 보내졌지만 다른 하나는 HTML 만 포함되었습니다.

+0

주석에 대해 zvone에 감사드립니다. 그것은 내가 상세한 이해를 얻는 것을 도왔다. 그러나 multipart/alternative와 text/html 값은 본문을 파싱하는 동안 동일한 전자 메일에 대해 제공됩니다. – nil13

+0

그러면 서버가 다른 장소에 다른 응답을합니다. 이 교환인가? – Max

+0

@ nil13 귀하의 이메일이 다른 이유를 모르겠습니다. 전자 메일을 보내는 서버의 구성에 따라 다릅니다. 어떻게 윈도우즈와 맥에 같은 이메일을 보냅니 까? 그것을 두 개의 이메일로 보냅니 까? 그렇다면 하나의 이메일 서버와 다른 서버의 차이점은 무엇입니까? 또는 하나의 전자 메일로 보내지 만 두 클라이언트에서 읽으십니까? 그렇다면 어떻게? 팝? IMAP? 어쨌든, 미스터리의 파이썬 부분이 해결되었습니다. 그것은 단지 당신에게 진실을 알려줍니다. 이제 누가 이메일을 수정하고 있는지 누가 알아야합니다. – zvone

관련 문제