Domanda

Ho un oggetto.

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

self.currentEmailParsedInstance, da questo oggetto voglio ottenere il corpo di un'e-mail, solo testo senza HTML ....

Come posso farlo?


qualcosa del genere?

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

quindi rimuovi l'html dal corpo. che cos'è quel metodo ... per restituire il testo reale ... forse ti capisco male

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

output = type 'list'


l'email

Percorso di ritorno:
Ricevuto: da xx.xx.net (esempio) da mxx3.xx.net (xxx)
        ID 485EF65F08EDX5E12 per xxx@xx.com; Gio 23 Ott 2008 06:07:51 +0200
Ricevuto: da xxxxx2 (ccc) da example.net (ccc) (autenticato come xxxx.xxx@example.com)         ID 48798D4001146189 per esempio.esempio@esempio-esempio.com; Gio 23 Ott 2008 06:07:51 +0200
Da: & Quot; esempio & Quot;
A:
Oggetto: FW: esempio Data: gio, 23 ott 2008 12:07:45 +0800
Organizzazione: esempio ID messaggio: & Lt; 001601c934c4 $ xxxx30 $ a9ff460a @ xxx & Gt;
Versione MIME: 1.0
Tipo di contenuto: multipart / misto;
    boundary = quot &; ---- = _ NextPart_000_0017_01C93507.F6F64E30 quot &;
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: prodotto da Microsoft MimeOLE V6.00.2900.3138
Indice discussione: Ack0wLaumqgZo1oXSBuIpUCEg / wfOAABAFEA

Questo è un messaggio in più parti in formato MIME.

------ = _ NextPart_000_0017_01C93507.F6F64E30
Tipo di contenuto: multipart / alternativo;
    boundary = quot &; & ---- = _ NextPart_001_0018_01C93507.F6F64E30 quot;

------ = _ NextPart_001_0018_01C93507.F6F64E30
Tipo di contenuto: text / plain;
    & Charset = quot; us-ascii quot &;
Codifica trasferimento contenuto: 7 bit

Da: esempio.esempio [mailto: esempio@esempio.com]
Inviato: giovedì 23 ottobre 2008 11:37
A: xxxx@example.com
Oggetto: S / I ad esempio (B / L
No.:4357-0120-810.044)

Si trova in allegato l'esempio.doc),

Grazie.

B.rgds,

xxx xxx

------ = _ NextPart_001_0018_01C93507.F6F64E30
Tipo di contenuto: text / html;
    & Charset = quot; us-ascii quot &;
Content-Transfer-Encoding: quoted-printable

xmlns: o = 3D quot; urna &: schemas-microsoft-com: office: & ufficio quot; =
xmlns: w = 3D quot; urna &: schemas-microsoft-com: office: & parola quot; =
xmlns: st1 = 3D quot; urna &: & schemas-microsoft-com: office: SmartTags quot; =
xmlns = 3D " http://www.w3.org/TR/REC- HTML40 quot &; gt &;

HTML STUFF fino a

------ = _ NextPart_001_0018_01C93507.F6F64E30--

------ = _ NextPart_000_0017_01C93507.F6F64E30
Tipo di contenuto: application / msword;
    & Name = quot; quot xxxx.doc &;
Codifica trasferimento-contenuto: base64
Disposizione del contenuto: allegato;
    & Nomefile = quot; & Xxxx.doc quot;

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

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


Voglio solo ottenere:

Da: xxxx.xxxx [mailto: xxxx@example.com]
Inviato: giovedì 23 ottobre 2008 11:37
A: xxxx@example.com
Oggetto: S / I per xxxxx (B / L
No.:4357-0120-810.044)

Trovi allegato il xxxx.doc),

Grazie.

B.rgds,

xxx xxx


non sono sicuro che la posta non sia corretta! sembra che se ottieni una pagina html devi farlo:

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

grazie mille Vinko.

Quindi è un po 'come trattare con xml, di natura ricorsiva.

È stato utile?

Soluzione

Questo ti porterà il contenuto del messaggio

self.currentEmailParsedInstance.get_payload()

Per quanto riguarda solo la parte del testo, dovrai rimuovere l'HTML da solo, ad esempio utilizzando BeautifulSoup.

Controlla questo link per ulteriori informazioni informazioni sulla classe Message restituita dal parser. Se intendi ottenere la parte testuale dei messaggi che contengono sia HTML sia la versione in testo semplice di se stessi, puoi specificare un indice per get_payload () per ottenere la parte desiderata.

Ho provato con un'altra e-mail MIME perché ciò che hai incollato sembra malformato, si spera che sia stato malformato quando lo hai modificato.

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

parti conterrà tutte le parti del messaggio multipart, puoi controllare i loro tipi di contenuto come mostrato e ottenere solo il testo / quelli semplici, per esempio.

Buona fortuna.

Altri suggerimenti

è finito con questo

        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"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top