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

时间:2009-08-20 12:56:41

标签: python email mime pop3

我正在使用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]

从主要消息中获取“To:”标题,但如何从附件中获取该标题?

我试过

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

但我不确定如何处理oAttach对象。我尝试将其转换为字符串,然后将其传递给

oMsgAttach = email.message_from_string( oAttach )

但这没有任何作用。我对python文档有点不知所措,需要一些帮助。提前谢谢。

1 个答案:

答案 0 :(得分: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,电子邮件或mimetypes模块,所以我不确定这是否有帮助,但我认为它可能会指向正确的方向。