Jython의 구문 분석 이메일 객체에서 이메일 본문
문제
나는 물체가있다.
fp = open(self.currentEmailPath, "rb")
p = email.Parser.Parser()
self._currentEmailParsedInstance= p.parse(fp)
fp.close()
self.currenteMailparsedInstance,이 개체에서 나는 이메일의 본문을 얻고 싶습니다.
어떻게해야하나요?
이 같은?
newmsg=self._currentEmailParsedInstance.get_payload()
body=newmsg[0].get_content....?
그런 다음 HTML을 본체에서 벗겨냅니다. 그냥 그게 뭐야 .... 실제 텍스트를 반환하는 방법 ... 어쩌면 내가 당신을 잘못 이해했을 수도 있습니다.
msg=self._currentEmailParsedInstance.get_payload()
print type(msg)
출력 = 유형 '목록'
이메일
복귀 경로:
수신 : mxx3.xx.net (xxx)의 xx.xx.net (예)에서
xxx@xx.com의 ID 485EF65F08EDX5E12; Thu, 2008 년 10 월 23 일 06:07:51 +0200
수신 : example.net (ccc)의 xxxxx2 (ccc)에서 (xxxx.xxx@example.com으로 인증 됨) ID 48798D4001146189 examp.example@example-example.com; Thu, 2008 년 10 월 23 일 06:07:51 +0200
에서 : "예"
에게:
제목 : FW : 예제 날짜 : Thu, 2008 년 10 월 23 일 12:07:45 +0800
조직 : 예제 메시지 -ID : <001601C934C4 $ XXXX30 $ a9ff460A@xxx>
마임 버전 : 1.0
내용 유형 : 멀티 파트/혼합;
경계 = "---- = _ NextPart_000_0017_01C93507.F6F64E30"
X- 메일러 : Microsoft Office Outlook 11
X-Mimeole : Microsoft Mimeole V6.00.2900.3138에서 제작
스레드-인덱스 : ack0wlaumqgzo1oxsbuipuceg/wfoaabafea
이것은 MIME 형식의 멀티 파트 메시지입니다.
------ = _ NEXTPART_000_0017_01C93507.F6F64E30
내용 유형 : 멀티 파트/대안;
경계 = "---- = _ NextPart_001_0018_01C93507.F6F64E30"
------ = _ NEXTPART_001_0018_01C93507.F6F64E30
내용 유형 : 텍스트/일반;
charset = "us-ASCII"
컨텐츠 전송 인코딩 : 7 비트
보낸 사람 : example.example [mailto : example@example.com
보낸 : 2008 년 10 월 23 일 목요일 오전 11:37
to : xxxx@example.com
제목 : 예를 들어 S/I (B/L
No.:4357-0120-810.044)
audsement.doc), 첨부 된 것을 찾으십시오.
감사.
B.RGDS,
xxx xxx
------ = _ NEXTPART_001_0018_01C93507.F6F64E30
내용 유형 : 텍스트/html;
charset = "us-ASCII"
Content-Transfer-Encoding : 인용 인쇄 가능
XMLNS : O = 3D "URN : Schemas-Microsoft-Com : Office : Office"=
XMLNS : W = 3D "항아리 : Schemas-Microsoft-Com : Office : Word"=
XMLNS : ST1 = 3D "URN : Schemas-Microsoft-Com : Office : SmartTags"=
xmlns = 3d "http://www.w3.org/tr/rec-html40">
html 물건까지
------ = _ NEXTPART_001_0018_01C93507.F6F64E30--
------ = _ NEXTPART_000_0017_01C93507.F6F64E30
내용 유형 : 응용 프로그램/msword;
이름 = "xxxx.doc"
컨텐츠-트랜스퍼 인코딩 : Base64
내용화 : 첨부 파일;
filename = "xxxx.doc"
0m8r4kgxgueaaaaaaaaaaaaaaaaaaaaaaaaapgadap7/cqagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad+/// aaaaaf8aaad //////////////////////////////////////////////////////////////////////aaaaaaaaaaaaaaaaaad ////////////////////////////////////////////////////////////////////////////////4 //////////////////////////// ////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////4 /////////////////////////////////////////////////////////////////////////////////4 ///////////////////////////// /////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////4 ////////////////////////////////////////////////////////////////////////////////4 /////////////////////////////// ///////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////4 ///////////////////////////////////////////////////////////////////////////////4 ///////////////////////////////////s pcEAI2AJBAAA+FK/AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN/AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA AAAAAAD// w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAA
------ = _ NEXTPART_000_0017_01C93507.F6F64E30--
나는 단지 얻고 싶다 :
보낸 사람 : xxxx.xxxx [mailto : xxxx@example.com
보낸 : 2008 년 10 월 23 일 목요일 오전 11:37
to : xxxx@example.com
제목 : XXXXX 용 S/I (B/L
No.:4357-0120-810.044)
pls는 xxxx.doc 첨부)를 찾았습니다.
감사.
B.RGDS,
xxx xxx
메일이 기형이 있는지 확실하지 않습니다! HTML 페이지를 얻는 경우 다음을 수행해야합니다.
parts=self._currentEmailParsedInstance.get_payload()
print parts[0].get_content_type()
..._multipart/alternative_
textParts=parts[0].get_payload()
print textParts[0].get_content_type()
..._text/plain_
body=textParts[0].get_payload()
print body
...get the text without a problem!!
Vinko 감사합니다.
그래서 그것은 XML을 다루는 것과 비슷합니다.
해결책
이것은 당신에게 메시지의 내용을 얻을 것입니다
self.currentEmailParsedInstance.get_payload()
텍스트 전용 부분은 예를 들어 BeautifulSoup을 사용하는 것과 같이 HTML을 스스로 제거해야합니다.
확인하다 이 링크 메시지 클래스에 대한 자세한 내용은 파서가 반환합니다. HTML과 일반 텍스트 버전이 모두 포함 된 메시지의 텍스트 부분을 얻는 경우 get_payload ()로 인덱스를 지정하여 원하는 부품을 얻을 수 있습니다.
나는 당신이 붙여 넣은 것이 잘못된 것처럼 보이기 때문에 다른 Mime 이메일로 시도했습니다.
>>> parser = email.parser.Parser()
>>> message = parser.parse(open('/home/vinko/jlm.txt','r'))
>>> message.is_multipart()
True
>>> parts = message.get_payload()
>>> len(parts)
2
>>> parts[0].get_content_type()
'text/plain'
>>> parts[1].get_content_type()
'message/rfc822'
>>> parts[0].get_payload()
'Message Text'
부품에는 Multipart 메시지의 모든 부분이 포함되며, 예를 들어 내용 유형을 확인하고 예를 들어 텍스트/평원 만 얻을 수 있습니다.
행운을 빕니다.
다른 팁
이것으로 끝났습니다
parser = email.parser.Parser()
self._email = parser.parse(open('/home/vinko/jlm.txt','r'))
parts=self._email.get_payload()
check=parts[0].get_content_type()
if check == "text/plain":
return parts[0].get_payload()
elif check == "multipart/alternative":
part=parts[0].get_payload()
if part[0].get_content_type() == "text/plain":
return part[0].get_payload()
else:
return "cannot obtain the body of the email"
else:
return "cannot obtain the body of the email"