从电子邮件附件中提取 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: 标头的主要内容,如果未能解决你的问题,请参考以下文章