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.

¿Fue útil?

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"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top