【问题标题】:email body from a parsed email object in jython来自 jython 中已解析电子邮件对象的电子邮件正文
【发布时间】:2010-09-21 18:24:24
【问题描述】:

我有一个对象。

    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)

输出 = 输入“列表”


电子邮件

返回路径:
收到:来自 xx.xx.net (example) by mxx3.xx.net (xxx)
xxx@xx.com 的 id 485EF65F08EDX5E12; 2008 年 10 月 23 日星期四 06:07:51 +0200
收到:来自 xxxxx2 (ccc) by example.net (ccc)(认证为 xxxx.xxx@example.com) id 48798D4001146189 例如.example@example-example.com; 2008 年 10 月 23 日星期四 06:07:51 +0200
来自:“示例”
收件人:
主题:FW:示例 日期:2008 年 10 月 23 日星期四 12:07:45 +0800
组织:示例 消息 ID:
MIME 版本:1.0
内容类型:多部分/混合;
边界="----=_NextPart_000_0017_01C93507.F6F64E30"
X-Mailer:Microsoft Office Outlook 11
X-MimeOLE:微软出品 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"
内容传输编码:7bit

发件人:example.example[mailto:example@example.com]
发送时间:2008 年 10 月 23 日星期四上午 11:37
至:xxxx@example.com
主题:例如 S/I(提单/提单
编号:4357-0120-810.044)

请在附件中找到example.doc),

谢谢。

B.rgds,

xxxxxx

--------=_NextPart_001_0018_01C93507.F6F64E30
内容类型:text/html;
charset="us-ascii"
内容传输编码:引用打印

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;
名称="xxxx.doc"
内容传输编码:base64
内容处置:附件;
文件名="xxxx.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA EAAAYgAAAAAAAAD+////AAAAAF8AAAD////////////////////////////////////// / ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// /////////////////////// ///////////////////////////////////////// //////////////////////s pcEAI2AJBAAA+FK/AAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN/AADDfwAAQQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAA AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAARgQAAAAAAABGBAAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAAAA4hsA 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊! FgAAAAPwcAAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAAA/BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAAAAALc6AACAAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAAAywAAAAAAABHLAAAAAAAAFg2AAAAAAAAAA

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


我只想得到:

发件人:xxxx.xxxx [mailto:xxxx@example.com]
发送时间:2008 年 10 月 23 日星期四上午 11:37
至:xxxx@example.com
主题: xxxxxx 的 S/I(提单
编号:4357-0120-810.044)

请查找附件xxxx.doc),

谢谢。

B.rgds,

xxxxxx


不确定邮件是否格式错误! 似乎如果你得到一个 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!!

非常感谢 Vinko。

所以它有点像处理 xml,本质上是递归的。

【问题讨论】:

  • get_payload() 将返回消息的正文。如果您的消息是多部分的,您必须提供一个索引,正如我在答案中所说的那样。请更明确
  • 所以这是 msg=self._currentEmailParsedInstance.get_payload(0); 的输出打印味精; "ImportError: 没有名为 locale 的模块"
  • 当你说给它一个索引时,这就是我所理解的。我确定我误解了你。或者我这样理解 newmsg=self._currentEmailParsedInstance.get_payload(); body=newmsg[0].get_content....?;我试图尽可能明确。
  • 那个ImportError是关键,jython和python不完全一样,不好意思,试试import java.util.Locale;

标签: python email jython parsing


【解决方案1】:

结束了

        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"

【讨论】:

    【解决方案2】:

    这将为您提供消息的内容

    self.currentEmailParsedInstance.get_payload()
    

    至于仅文本部分,您必须自己剥离 HTML,例如使用 BeautifulSoup。

    查看this link 以获取有关解析器返回的 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'
    

    parts 将包含多部分消息的所有部分,例如,您可以检查它们的内容类型并仅获取文本/纯文本。

    祝你好运。

    【讨论】:

    • 嗨,只想要文本,我想扔掉html。请再看问题
    • 请改写你的问题。这些电子邮件看起来如何? get_payload() 得到的结果有什么问题?为什么在一个示例中使用 self.currentEmailParsedInstance 而在另一个示例中使用 self._email?
    猜你喜欢
    • 2018-12-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多