我正在使用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文档有点不知所措,需要一些帮助。提前谢谢。
答案 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模块,所以我不确定这是否有帮助,但我认为它可能会指向正确的方向。