用Python检查邮件

61 投票
7 回答
107523 浏览
提问于 2025-04-15 13:22

我想在收到来自特定邮箱、并且主题是特定内容的邮件时,触发某个动作。为了做到这一点,我需要监控我的邮箱,检查每一封进来的邮件(我主要使用的是Gmail)。请问,最简单的方法是什么呢?

7 个回答

8

虽然这不是专门针对Python的内容,但我一直很喜欢在能安装的地方使用procmail

你只需要在你选择的条件下,使用一些动作行,比如 | pathtoyourscript(这个竖线叫做管道,后面跟着你想在这些情况下执行的脚本),这样你的邮件就会在你设定的条件下,被传送到你选择的脚本去处理,脚本可以随意处理这些邮件——很难想象还有比这更通用的方法来“在收到符合特定条件的邮件时触发你选择的动作”!当然,你可以检查的条件数量没有限制,一个条件可以触发多少个动作行也没有限制(只需把你想要的所有动作行放在 { } 大括号里),等等等等。

22

Gmail提供了一个用于新邮件的atom 信息源。你可以通过使用py cURL(或者其他网络库)来监控这个信息源,方法是先进行身份验证,然后获取这个信息源。每次你请求新邮件时,系统会自动把这些邮件标记为已读,这样你就不需要自己去记哪些邮件已经看过了。

84

Gmail允许你通过POP协议来连接,这个功能可以在Gmail的设置面板里打开。用Python来通过POP连接其实很简单:

import poplib
from email import parser

pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('username')
pop_conn.pass_('password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print message['subject']
pop_conn.quit()

你只需要把这个脚本设置成定时任务来运行就可以了。不过我不太清楚你用的是什么平台,所以具体的操作可能会有所不同。

撰写回答