cuerpo del correo electrónico de un objeto de correo electrónico analizado en jython
Pregunta
Tengo un objeto.
fp = open(self.currentEmailPath, "rb")
p = email.Parser.Parser()
self._currentEmailParsedInstance= p.parse(fp)
fp.close()
self.currentEmailParsedInstance, de este objeto quiero obtener el cuerpo de un correo electrónico, solo texto sin HTML ...
¿Cómo lo hago?
algo como esto?
newmsg=self._currentEmailParsedInstance.get_payload()
body=newmsg[0].get_content....?
luego quite el html del cuerpo. qué es eso ... método para devolver el texto real ... tal vez te entiendo mal
msg=self._currentEmailParsedInstance.get_payload()
print type(msg)
output = type 'list'
el correo electrónico
Ruta de retorno:
Recibido: de xx.xx.net (ejemplo) por mxx3.xx.net (xxx)
id 485EF65F08EDX5E12 para xxx@xx.com; Jue, 23 oct 2008 06:07:51 +0200
Recibido: de xxxxx2 (ccc) por example.net (ccc) (autenticado como xxxx.xxx@example.com)
id 48798D4001146189 por ejemplo.ejemplo@ejemplo-ejemplo.com; Jue, 23 oct 2008 06:07:51 +0200
De: & Quot; ejemplo & Quot;
Para:
Asunto: FW: ejemplo
Fecha: jue, 23 de octubre de 2008 12:07:45 +0800
Organización: ejemplo
ID de mensaje: & Lt; 001601c934c4 $ xxxx30 $ a9ff460a @ xxx & Gt;
Versión MIME: 1.0
Tipo de contenido: multiparte / mixto;
boundary = " ---- = _ NextPart_000_0017_01C93507.F6F64E30 "
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: Producido por Microsoft MimeOLE V6.00.2900.3138
Índice de subprocesos: Ack0wLaumqgZo1oXSBuIpUCEg / wfOAABAFEA
Este es un mensaje de varias partes en formato MIME.
------ = _ NextPart_000_0017_01C93507.F6F64E30
Tipo de contenido: multiparte / alternativa;
boundary = " ---- = _ NextPart_001_0018_01C93507.F6F64E30 "
------ = _ NextPart_001_0018_01C93507.F6F64E30
Tipo de contenido: texto / sin formato;
charset = " us-ascii "
Codificación de transferencia de contenido: 7 bits
De: ejemplo.ejemplo [mailto: ejemplo@ejemplo.com]
Enviado: jueves 23 de octubre de 2008 11:37 am
Para: xxxx@ejemplo.com
Asunto: S / I por ejemplo (B / L
No.:4357-0120-810.044)
Por favor encuentre adjunto el ejemplo.doc),
Gracias.
B.rgds,
xxx xxx
------ = _ NextPart_001_0018_01C93507.F6F64E30
Tipo de contenido: texto / html;
charset = " us-ascii "
Codificación de transferencia de contenido: imprimible entre comillas
xmlns: o = 3D " urn: schemas-microsoft-com: office: office " =
xmlns: w = 3D " urn: schemas-microsoft-com: office: word " =
xmlns: st1 = 3D " urn: schemas-microsoft-com: office: smarttags " =
xmlns = 3D " http://www.w3.org/TR/REC- html40 " >
MATERIA HTML hasta
------ = _ NextPart_001_0018_01C93507.F6F64E30--
------ = _ NextPart_000_0017_01C93507.F6F64E30
Tipo de contenido: application / msword;
nombre = " xxxx.doc "
Codificación de transferencia de contenido: base64
Disposición de contenido: archivo adjunto;
filename = " xxxx.doc "
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7 / CQAGAAAAAAAAAAAAAAABAAAAYAAAAAAAAAAA EAAAYgAAAAEAAAD + //// AAAAAF8AAAD //////////////////////////////////////////// / / //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// s pcEAI2AJBAAA + FK / AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN / AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // w8AAAAA AAAAAAD // w8AAAAAAAAAAAD // w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAA
------ = _ NextPart_000_0017_01C93507.F6F64E30--
Solo quiero obtener:
De: xxxx.xxxx [mailto: xxxx@example.com]
Enviado: jueves 23 de octubre de 2008 11:37 am
Para: xxxx@ejemplo.com
Asunto: S / I para xxxxx (B / L
No.:4357-0120-810.044)
Pls encuentra adjunto el xxxx.doc),
Gracias.
B.rgds,
xxx xxx
¡no estoy seguro si el correo está mal formado! parece que si obtienes una página html tienes que hacer esto:
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!!
muchas gracias Vinko.
Entonces es como tratar con xml, de naturaleza recursiva.
Solución
Esto le dará el contenido del mensaje
self.currentEmailParsedInstance.get_payload()
En cuanto a la parte de solo texto, tendrá que eliminar HTML por su cuenta, por ejemplo, usando BeautifulSoup.
Compruebe este enlace para obtener más información. información sobre la clase de mensaje que devuelve el analizador. Si te refieres a obtener la parte de texto de los mensajes que contienen tanto HTML como versiones de texto sin formato de ellos mismos, puedes especificar un índice para get_payload () para obtener la parte que deseas.
Intenté con un correo electrónico MIME diferente porque lo que pegaste parece estar mal formado, espero que tenga mal formato cuando lo editaste.
>>> 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'
las partes contendrán todas las partes del mensaje multiparte, puede verificar sus tipos de contenido como se muestra y obtener solo los de texto / sin formato, por ejemplo.
Buena suerte.
Otros consejos
terminó con esto
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"