POP3.retr(which)
Retrieve whole message number which, and set its seen flag. Result is in form (response, ['line', ...], octets).
因此,假设您已经将retr()的结果放入一个名为response的变量中,消息的行将作为一个列表存储在response[1]中。通过RFC 2822我们知道消息头与消息体之间用一个空行隔开。消息的发送者将在From:标题行中。因此,我们可以迭代消息的行,当我们得到一个空行时停止,当我们看到以From:开头的行时,为发送方设置一个变量。在
^{pr2}$
如果您计划对头进行大量处理,那么按头名称将它们放入字典可能会很有用。因为每个标题可以出现多次,所以字典中的每个值都应该是一个列表。在headers = {}
for line in response[1]:
if line == "":
break
line = line.partition(" ")
key = line[0].strip().rstrip(":")
value = line[2].stirp()
headers.setdefault(key, []).append(value)
在此之后,您可以使用headers["From"][0]获取消息的发送者。在
我想展示一下实现这一点的基本方法,因为它不是很复杂,但是Python可以为您完成大部分工作。同样,假设您的retr()结果是response:import email
# convert our message back to a string and parse it
headers = email.parsefromstring("\n".join(response[0]), headersonly=True)
print headers["From"] # prints the sender
您可以在email module的文档中找到有关message对象的更多信息。在
电子邮件消息的From:行除了电子邮件地址之外,可能还有其他文本,例如发件人的姓名。您可以使用正则表达式提取电子邮件地址:sender = re.find(r".*[