用 Python 实现邮件自动处理:从脚本到定时任务的实践
【摘要】 背景日常工作中经常要处理大量重复邮件:筛选、归档、提取关键信息再转发。如果全靠人工,不仅耗时还容易漏。最近我把这套流程用 Python 自动化了,分享一下实现思路。 整体思路流程拆成四步:拉取邮件:通过 IMAP 协议读取收件箱筛选分类:按发件人、主题关键词、时间做规则匹配提取信息:用正则解析正文中的关键字段执行动作:归档、加标签、转发或落库 核心代码 1. 连接邮箱并拉取邮件import...
背景
日常工作中经常要处理大量重复邮件:筛选、归档、提取关键信息再转发。如果全靠人工,不仅耗时还容易漏。最近我把这套流程用 Python 自动化了,分享一下实现思路。
整体思路
流程拆成四步:
- 拉取邮件:通过 IMAP 协议读取收件箱
- 筛选分类:按发件人、主题关键词、时间做规则匹配
- 提取信息:用正则解析正文中的关键字段
- 执行动作:归档、加标签、转发或落库
核心代码
1. 连接邮箱并拉取邮件
import imaplib
import email
from email.header import decode_header
def connect_mail(host, user, password):
mail = imaplib.IMAP4_SSL(host)
mail.login(user, password)
mail.select("INBOX")
return mail
def fetch_unseen(mail):
status, data = mail.search(None, "UNSEEN")
return data[0].split()
2. 按规则分类
RULES = [
{"keyword": "账单", "folder": "Bills"},
{"keyword": "验证码", "folder": "Codes"},
{"keyword": "面试", "folder": "Jobs"},
]
def classify(subject):
for rule in RULES:
if rule["keyword"] in subject:
return rule["folder"]
return None
3. 解析正文关键字段
import re
def extract_code(body):
# 提取 6 位数字验证码
m = re.search(r"\b\d{6}\b", body)
return m.group(0) if m else None
def extract_amount(body):
# 提取金额,如 ¥1,234.56
m = re.search(r"¥([\d,]+\.\d{2})", body)
return m.group(1) if m else None
4. 定时执行
Linux 上用 cron,每 5 分钟跑一次:
*/5 * * * * /usr/bin/python3 /home/user/mail_bot.py >> /var/log/mail_bot.log 2>&1
脚本里做好幂等:处理过的邮件打上已读标记或移到已处理文件夹,避免重复处理。
踩过的坑
1. 字符编码问题
中文邮件主题经常是 MIME 编码,直接读会乱码。一定要用 decode_header 解码:
def decode_subject(raw):
parts = decode_header(raw)
text = ""
for content, charset in parts:
if isinstance(content, bytes):
text += content.decode(charset or "utf-8", errors="ignore")
else:
text += content
return text
2. IMAP 连接超时
长时间运行的脚本会遇到连接断开。做法是每次执行重新连接,或者捕获异常后重连,不要假设连接一直有效。
3. 不要把密码写死在代码里
用环境变量或配置文件存放账号密码,配置文件权限设为 600。更稳妥的做法是用应用专用密码,而不是主密码。
效果
跑了两个月下来,每天大概能自动处理上百封邮件,人工只需要看汇总结果。最有用的其实是规则分类和关键信息提取这两步,把"找邮件"变成了"看结果"。
小结
邮件自动化的核心不复杂:IMAP 拉取 + 规则分类 + 正则提取 + 定时执行。关键是规则要贴合自己的实际场景,先从最常见的几类邮件开始,跑起来再慢慢加规则。代码量不大,但省下来的时间很实在。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)