2009-08-20 157 views
3

我正在使用python在服务器(POP3)上打开电子邮件。每封电子邮件都有一个附件,它本身就是转发的电子邮件。从电子邮件的附件中提取To:标题

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

我正在使用python试图帮助我学习语言,而且我还不是那么好!

我已经的代码是这个

import poplib, email, mimetypes 

    oPop = poplib.POP3('xx.xxx.xx.xx') 
    oPop.user('[email protected]') 
    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文档,需要一些帮助。提前致谢。

+0

哪个电子邮件客户端发送电子邮件? – codeape 2009-08-20 18:04:18

+0

@codeape - 我不知道。电子邮件来自yahoo和hotmail,附件是从人们订阅的邮件列表发送的原始电子邮件,然后向yahoo和hotmail投诉。这是尝试自动化抑制列表 – 32423hjh32423 2009-08-21 06:47:59

+0

您的解决方案是什么?这从未更新过答案。 – 2010-02-16 14:51:41

回答

1

没有在我的收件箱中有代表性的电子邮件,很难通过这个工作(我从来没有用过poplib)。话虽如此,有些事情可能从我调查的点点帮助:

首先,使大量使用命令行界面蟒蛇和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模块,所以我不确定这是否会有所帮助,但我认为它可能会指出你在正确的方向。

+0

感谢您的支持。我已经整理出来了。我会将解决方案发布到我的博客上,并很快将其添加回来 – 32423hjh32423 2009-08-21 09:18:34