4

私はオブジェクトを持っています。

    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)

出力 = タイプ 'リスト'


Eメール

Return-Path:
受信: xx.xx.net (例) から mxx3.xx.net (xxx)
id 485EF65F08EDX5E12 for xxx@xx.com; Thu, 23 Oct 2008 06:07:51 +0200
受信: from xxxxx2 (ccc) by example.net (ccc) (xxxx.xxx@example.com として認証) ID 48798D4001146189 for example.example@example-example.com; Thu, 23 Oct 2008 06:07:51 +0200
From: "example"
To:
件名: FW: example Date: Thu, 23 Oct 2008 12:07:45 +0800
Organization: example Message-ID: <001601c934c4$xxxx30$ a9ff460a@xxx>
MIME バージョン: 1.0
コンテンツ タイプ: マルチパート/混合。 X-Mailer: Microsoft Office Outlook 11 X-MimeOLE: Produced By Microsoft
MimeOLE V6.00.2900.3138


スレッド インデックス: Ack0wLaumqgZo1oXSBuIpUCEg/wfOAABAFEA

これは、MIME 形式のマルチパート メッセージです。

------=_NextPart_000_0017_01C93507.F6F64E30
コンテントタイプ: マルチパート/代替;
境界="----=_NextPart_001_0018_01C93507.F6F64E30"

------=_NextPart_001_0018_01C93507.F6F64E30
コンテンツ タイプ: テキスト/プレーン。
charset="us-ascii"
Content-Transfer-Encoding: 7bit

送信者: example.example[mailto:example@example.com]
送信者: 2008 年 10 月 23 日 木曜日 11:37 AM
宛先: xxxx@example.com
件名: S/I for example(B/L
No.:4357-0120) -810.044)

添付の example.doc を見つけてください)、

ありがとう。

B.rgds、

xxx xxx

------=_NextPart_001_0018_01C93507.F6F64E30
コンテンツ タイプ: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

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

HTML STUFFまで

------=_NextPart_001_0018_01C93507.F6F64E30--

------=_NextPart_000_0017_01C93507.F6F64E30
コンテンツ タイプ: アプリケーション/msword;
name="xxxx.doc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
ファイル名="xxxx.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAF8AAAD/////////////////////////////////////////////// //// /////////////////////////////////////////// ///////////////////////////// /////////////////// /////////////////////////////////////////////// ////// ///////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// //////// /////////////////////////////////////// ///////////////////////////////////////////////////// /////////////////////////////////////////////// ////////// ////////////////////////////////////// ////////////////////////////////s pcEAI2AJBAAA+FK/AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAAECBYAMlAAAMN/AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAAAAAAD// w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQAABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAAAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQAABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAAA

------=_NextPart_000_0017_01C93507.F6F64E30--


私はただ取得したい:

From: xxxx.xxxx [mailto:xxxx@example.com]
送信: 2008 年 10 月 23 日 木曜日 11:37 AM
To: xxxx@example.com
件名: S/I for xxxxx (B/L
No.:4357-0120) -810.044)

xxxx.doc が添付されていることを確認してください)、

ありがとう。

B.rgds、

xxx xxx


メールの形式が間違っているかどうかわからない! 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を扱うようなものです。

4

2 に答える 2

4

これにより、メッセージの内容が取得されます

self.currentEmailParsedInstance.get_payload()

テキストのみの部分については、たとえば BeautifulSoup を使用して、独自に HTML を削除する必要があります。

パーサーが返す Message クラスの詳細については、このリンクを確認してください。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'

パーツにはマルチパート メッセージのすべてのパーツが含まれます。たとえば、示されているようにコンテンツ タイプを確認し、テキスト/プレーンのものだけを取得できます。

幸運を。

于 2008-11-11T07:27:54.153 に答える
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"
于 2008-11-11T10:42:45.243 に答える