2008-11-11 3 views
4

J'ai un objet.corps de l'e-mail d'un objet e-mail analysé en jython

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

self.currentEmailParsedInstance, de cet objet que je veux obtenir le corps d'un e-mail, le texte ne pas HTML ....

Comment puis-je faire?


quelque chose comme ça?

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

puis dépouiller le html du corps. tout ce que .... pour renvoyer le texte réel ... peut-être je mal ce que vous comprenez

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

output = 'liste' Type


l'email

Return-Path:
Reçu: de xx.xx.net (exemple) par mxx3.xx.net (xxx)
id 485EF65F08EDX5E12 pour [email protected]; Thu, 23 Oct 2008 06:07:51 +0200
Reçu: à partir de xxxxx2 (ccc) par example.net (ccc) (authentifié comme [email protected]) id 48798D4001146189 par [email protected] .com; Jeu, 23 octobre 2008 06:07:51 +0200
De: "exemple"
Pour:
Sujet: FW: exemple Date: Thu, 23 octobre 2008 12:07:45
Organisation 0800: exemple Message-ID: < 001601c934c4 $ xxxx30 $ a9ff460a @ xxx>
Version MIME: 1.0
Type de contenu: multipart/mixed;
boundary = "---- = _ NextPart_000_0017_01C93507.F6F64E30"
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: Produit par Microsoft MimeOLE V6.00.2900.3138
Discussion-Index: Ack0wLaumqgZo1oXSBuIpUCEg/wfOAABAFEA

Il s'agit d'un message en plusieurs parties au format MIME.

------ = _ NextPart_000_0017_01C93507.F6F64E30
Type de contenu: multipart/alternative;
boundary = "---- = _ NextPart_001_0018_01C93507.F6F64E30"

------ = _ NextPart_001_0018_01C93507.F6F64E30
Content-Type: text/plain;
charset = "us-ascii"
Content-Transfer-Encoding: 7bit

De: example.example [mailto: [email protected]]
Envoyée: Le jeudi 23 Octobre 2008 11:37
A: [email protected]
Sujet: S/I par exemple (B/L
N °: 4357-0120-810.044)

S'il vous plaît trouver ci-joint le Exemple.doc),

Merci.

B.rgds,

xxx xxx

------ = _ NextPart_001_0018_01C93507.F6F64E30
Content-Type: text/html;
charset = "us-ascii"
Content-Transfer-Encoding: quoted-imprimable

xmlns: o = 3D "urn: schemas-microsoft-com: office: office" =
xmlns: w = 3D "urn: schemas-microsoft-com: office: mot" =
xmlns: st1 = 3D "urn: schemas-microsoft-com: office: SmartTags" =
xmlns = 3D "http://www.w3.org/TR/REC-html40">

HTML STUFF jusqu'à

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

------ = _ NextPart_000_0017_01C93507.F6F64E30
Content-Type: application/msword;
nom = "xxxx.doc"
Content-Transfer-Encoding: base64
Contenu-Disposition: attachement;
filename = "xxxx.doc"

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

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


Je veux juste obtenir:

De: xxxx.xxxx [mailto: [email protected]]
Envoyée: Le jeudi 23 Octobre 2008 11:37
pour: [email protected]
Sujet: S/I pour xxxxx (B/l
No.:4357-0120-810.044)

Veuillez trouver ci-joint le xxxx.doc),

Merci.

B.rgds,

xxx xxx


ne sais pas si le courrier est malformé! semble si vous obtenez une page html que vous devez faire ceci:

 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!! 

Merci beaucoup Vinko. Donc, c'est un peu comme traiter avec XML, récursif dans la nature.

+0

get_payload() retourne le corps du message. Si vos messages sont en plusieurs parties, vous devez fournir un index, comme je l'ai dit dans la réponse. Veuillez être plus explicite –

+0

donc c'est la sortie pour msg = self._currentEmailParsedInstance.get_payload (0); print msg; "ImportError: aucun module nommé locale" – Setori

+0

c'est ce que je comprends quand vous dites lui donner un index. Je suis sûr que je vous ai mal compris. Ou je le comprends comme ceci newmsg = self._currentEmailParsedInstance.get_payload(); body = newmsg [0] .get_content ....?; Im essayant d'être aussi explicite que je peux. – Setori

Répondre

4

Cela vous obtenir le contenu du message

self.currentEmailParsedInstance.get_payload() 

En ce qui concerne le texte qu'une partie vous devrez dépouiller HTML sur votre propre, par exemple en utilisant BeautifulSoup.

Vérifiez this link pour plus d'informations sur la classe Message renvoyée par l'analyseur. Si vous voulez dire que le texte fait partie des messages contenant à la fois du HTML et une version en texte brut d'eux-mêmes, vous pouvez spécifier un index à get_payload() pour obtenir la partie que vous voulez.

J'ai essayé avec un email MIME différent parce que ce que vous avez collé semble mal formé, j'espère qu'il a été mal formé quand vous l'avez édité.

>>> 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' 

parties contiennent toutes les parties du message multipart, vous pouvez vérifier leurs types de contenu comme indiqué et obtenir que le texte/les plaine, par exemple.

Bonne chance.

+0

Salut, je veux juste le texte, je veux jeter le code HTML. pls regarder la question à nouveau – Setori

+0

S'il vous plaît réécrire votre question. Comment ces emails ressemblent-ils? Quel est le problème avec ce que vous obtenez avec get_payload()? Pourquoi utilisez-vous dans un exemple self.currentEmailParsedInstance et dans l'autre self._email? –

0

a fini avec cette

 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"