2008-11-11 2 views
4

У меня есть объект.тело электронной почты из разобранного объекта электронной почты в jython

fp = open(self.currentEmailPath, "rb") 
    p = email.Parser.Parser() 
    self._currentEmailParsedInstance= p.parse(fp) 
    fp.close() 

self.currentEmailParsedInstance, от этого объекта, я хочу, чтобы получить тело сообщения электронной почты, только текст без HTML ....

Как мне это сделать?


что-то вроде этого?

 newmsg=self._currentEmailParsedInstance.get_payload() 
     body=newmsg[0].get_content....? 

затем снять html с тела. только то, что .... способ вернуть фактический текст ... Может быть, я неправильно понимаю, вы

 msg=self._currentEmailParsedInstance.get_payload() 
     print type(msg) 

выход = тип 'список'


электронной

Обратный путь:
Поступило в редакцию: от xx.xx.net (пример) от mxx3.xx.net (xxx)
ID 485EF65F08EDX5E12 для [email protected]; Thu, 23 Oct 2008 06:07:51 +0200
Получено: от xxxxx2 (ccc) на example.net (ccc) (заверено как [email protected]) id 48798D4001146189 например [email protected] .com; Чт, 23 Октябрь 2008 06:07:51 +0200
От: "пример"
To:
Тема: FW: например Дата: Чт, 23 Октябрь 2008 12:07:45 +0800
Организация: пример Код сообщения: < 001601c934c4 $ xxxx30 $ a9ff460a @ xxx>
MIME-версия: 1.0
Тип контента: multipart/mixed;
граница = "---- = _ NextPart_000_0017_01C93507.F6F64E30"
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138
Thread-Index: Ack0wLaumqgZo1oXSBuIpUCEg/wfOAABAFEA

Это многочастное сообщение в формате MIME.

------ = _ NextPart_000_0017_01C93507.F6F64E30
Content-Type: multipart/alternative;
граница = "---- = _ NextPart_001_0018_01C93507.F6F64E30"

------ = _ NextPart_001_0018_01C93507.F6F64E30
Content-Type: Текст/равнину;
кодировок = "US-ASCII"
Content-Transfer-Encoding: 7bit

От: example.example [MAILTO: [email protected]]
Отправлено: Четверг, 23 октября 2008 11:37 утра
Кому: [email protected]
Тема: S/I, например (B/L
No.:4357-0120-810.044)

препровождает example.doc),

Спасибо.

B.rgds,

ххх ххх

------ = _ NextPart_001_0018_01C93507.F6F64E30
Content-Type: Текст/html;
кодировок = "US-ASCII"
Content-Transfer-Encoding: кавычко печати

XMLNS: о = 3D "урна: схемы-Microsoft-ком: офис:" =
XMLNS: ш = 3D "урна: схемы-Microsoft-ком: офис: слово" =
Xmlns: ST1 = 3D "урна: схемы-Microsoft-ком: офис: Смарт-теги" =
XMLNS = 3D "http://www.w3.org/TR/REC-html40">

HTML STUFF до

------ = _ NextP art_001_0018_01C93507.F6F64E30--

------ = _ NextPart_000_0017_01C93507.F6F64E30
Content-Type: применение/MSWord;
name = "xxxx.doc"
Content-Transfer-Encoding: base64
Содержание-Распорка: вложение;
имя_файла = "xxxx.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAYAAAAAAAAAAA EAAAYgAAAAEAAAD + //// AAAAAF8AAAD /////////////////////////// ////////////////// /////////////////////////////// //////////////////////////////////////////// //// ////////////////////////////////////////////////// ////////////////////// /////////////////////////// /////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////// /////////////////////// ////////////////////////////////////////////////// /// ///////////////////////////////// /////////////////////////////////////////// ////// ////////////////////////////////////////////////// /////////////////// s pcEAI2AJBAAA + FK/AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN/AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD // w8AAAAA AAAAAAD // w8AAAAAAAAAAAD // w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAA AAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAA

------ = _ NextPart_000_0017_01C93507.F6F64E30--


Я просто хочу, чтобы получить:

От: xxxx.xxxx [MAILTO: [email protected]]
Отправлены: Четверг, 23 Октября 2008 11:37 утра
для того, чтобы: [email protected]
Тема: S/I для ххххх (B/L
No.:4357-0120-810.044)

Pls найти прикреплен xxxx.doc),

Спасибо.

B.rgds,

ххх ххх


не уверен, что если почта имеет неверный формат! кажется, если вы получаете 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!! 

вы так много Винко.

Так что это своего рода, как дело с xml, рекурсивное в природе.

+0

get_payload() возвращает тело сообщения. Если ваши сообщения являются множественными, вам необходимо предоставить индекс, как я сказал в ответе. Пожалуйста, введите более явное значение – 2008-11-11 09:17:39

+0

, так что это вывод для msg = self._currentEmailParsedInstance.get_payload (0); print msg; «ImportError: no module named locale» – Setori 2008-11-11 09:47:01

ответ

4

Это поможет вам содержимое сообщения

self.currentEmailParsedInstance.get_payload() 

Что касается текста только часть вам придется раздеться HTML самостоятельно, например, с помощью BeautifulSoup.

Проверить this link для получения дополнительной информации о классе сообщений, который возвращает Parser. Если вы хотите получить текстовую часть сообщений, содержащих как 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' 

части будет содержать все части составного сообщения, вы можете проверить свои типы контента, как показано на рисунке и получить только текст/равнину из них, например.

Удачи.

0

закончил с этим

 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" 
Смежные вопросы