你如何检查电子邮件服务器(gmail)中的某个地址,并基于该地址运行一些东西?

2024-04-20 07:58:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用“导入poplib”来访问gmail,因为我在“设置”中打开了Pop功能,但是我如何检查邮件的“发件人”地址,然后基于它运行一些东西呢?另外,从消息中删除“body”文本的命令是什么?在


Tags: 文本命令功能消息地址邮件bodypop
3条回答

下面是如何使用imaplib获取GMail收件箱中每封邮件的主题和发件人。在

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('username@gmail.com', 'password')

# Select the mail box
status, messages = conn.select('INBOX')

if status != "OK":
    print "Incorrect mail box"
    exit()

if int(messages[0]) > 0:

    for message_number in range(1,int(messages[0])+1):  
        data = conn.fetch(message_number, '(BODY[HEADER])')
        parser = HeaderParser()
        msg = parser.parsestr(data[1][0][1])
        print "Subject: %s" % msg['subject']
        print "From: %s" % msg['from']

你可能需要更多的信息。从official imaplib documentation开始。在

documentation

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".*[ <](.+@.+)\b", headers["From"]).match(1)

有模块rfc822

我想poplib的消息可以从服务器加载。在

然后归档

>>> f = StringIO.StringIO(message)
>>> import rfc822

然后传给

^{pr2}$

试试这个。。还可以查看模块文档。 我希望有帮助。在


还有另一个python模块:

>>> import email
>>> email.message_from_string(...)

这将为您提供对头的读取权限,并支持正文内容的多种格式。在

相关问题 更多 >