从电子邮件附件中提取 To: 标头

Posted

技术标签:

【中文标题】从电子邮件附件中提取 To: 标头【英文标题】:Extracting the To: header from an attachment of an email 【发布时间】:2010-11-21 07:39:00 【问题描述】:

我正在使用 python 在服务器 (POP3) 上打开一封电子邮件。每封电子邮件都有一个附件,该附件本身就是转发的电子邮件。

我需要从附件中获取“收件人:”地址。

我正在使用 python 来帮助我学习这门语言,但我还没有那么好!

我已有的代码是这样的

import poplib, email, mimetypes

    oPop = poplib.POP3( 'xx.xxx.xx.xx' )
    oPop.user( 'abc@xxxxx.xxx' )
    oPop.pass_( 'xxxxxx' )

    (iNumMessages, iTotalSize ) = oPop.stat()

    for thisNum in range(1, iNumMessages + 1): 
          (server_msg, body, octets) = oPop.retr(thisNum)
          sMail = "\n".join( body )

          oMsg = email.message_from_string( sMail )

          # now what ?? 

我知道我将电子邮件作为电子邮件类的一个实例,但我不确定如何访问附件

我知道使用

  sData = 'To'
       if sData in oMsg:
       print sData + "", oMsg[sData]

从主邮件中获取“收件人:”标题,但如何从附件中获取?

我试过了

for part in oMsg.walk():
    oAttach = part.get_payload(1)

但我不确定如何处理 oAttach 对象。我试着把它变成一个字符串,然后把它传递给

oMsgAttach = email.message_from_string( oAttach )

但这无济于事。我对 python 文档有点不知所措,需要一些帮助。提前致谢。

【问题讨论】:

哪个电子邮件客户端发送电子邮件? @codeape - 我不知道。电子邮件来自 yahoo 和 hotmail,附件是人们订阅的邮件列表发送的原始电子邮件,然后向 yahoo 和 hotmail 投诉。这是自动化黑名单的尝试 您的解决方案是什么?答案从未更新。 【参考方案1】:

如果我的收件箱中没有一封具有代表性的电子邮件,就很难处理这封邮件(我从未使用过 poplib)。话虽如此,我的一些调查可能会有所帮助:

首先,大量使用 python 的命令行界面和dir()help() 函数:这些可以告诉你很多关于即将发生的事情。您可以随时在代码中插入help(oAttach)dir(oAttach)print oAttach,以了解循环时发生的情况。如果您将其逐行输入到命令行界面中,则在这种情况下会更容易。

认为你需要做的是浏览每个附件并弄清楚它是什么。对于传统的电子邮件附件,它可能是 base64 编码的,所以这样的事情可能会有所帮助:

#!/usr/bin/python
import poplib, email, mimetypes

# Do everything you've done in the first code block of your question
# ...
# ...

import base64
for part in oMsg.walk():
    # I've removed the '1' from the argument as I think you always get the
    # the first entry (in my test, it was the third iteration that did it).
    # However, I could be wrong...
    oAttach = part.get_payload()
    # Decode the base64 encoded attachment
    oContent = b64decode(oAttach)
    # then maybe...?
    oMsgAttach = email.message_from_string(oContent)

请注意,您可能需要在每种情况下检查 oAttach 以检查它是否看起来像一条消息。当您获得 sMail 变量后,将其打印到屏幕上。然后你可以在那里寻找类似Content-Transfer-Encoding: base64的东西,它会给你一个关于附件是如何编码的线索。

正如我所说,我没有使用任何 poplib、email 或 mimetypes 模块,所以我不确定这是否会有所帮助,但我认为它可能会为您指明正确的方向。

【讨论】:

谢谢你,它有帮助。我现在已经整理好了。我会将解决方案发布到我的博客并很快将其添加回此处

以上是关于从电子邮件附件中提取 To: 标头的主要内容,如果未能解决你的问题,请参考以下文章

使用GOLANG从电子邮件文件中提取附件

使用Python从邮件中下载附件和提取元数据

从 Outlook 检索电子邮件附件

使用ColdFusion从Outlook .msg文件中提取附件

尽管在标头中发送了 base64,但附件无法识别

如何使用 Pentaho 数据集成提取电子邮件附件?