3

我正在使用 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 文档有点不知所措,需要一些帮助。提前致谢。

4

1 回答 1

1

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

首先,大量使用 python 的命令行界面和dir()andhelp()函数:这些可以告诉你很多关于即将发生的事情。您始终可以在代码中插入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 模块,所以我不确定这是否会有所帮助,但我认为它可能会为您指明正确的方向。

于 2009-08-20T16:11:51.577 回答