如何使用IMAPLIB筛选特定发件人的邮件?
筛选Gmail收件箱指定发件人邮件实现方案
你已经完成了IMAP连接、账号登录、收件箱选中的基础逻辑,在此基础上补充搜索筛选的核心代码即可实现需求,完整可运行代码如下:
import imaplib import email from email.header import decode_header # 你已编写的基础代码 gmail = imaplib.IMAP4_SSL("imap.gmail.com", 993) gmail.login(gmail_username,gmail_password) gmail.select('Inbox', readonly=True) # 核心筛选逻辑:搜索发件人为a@gmail.com的邮件 status, data = gmail.search(None, 'FROM "a@gmail.com"') if status != 'OK': print("邮件搜索请求失败") gmail.close() gmail.logout() exit() # 提取匹配的邮件ID列表 email_ids = data[0].split() if not email_ids: print("未找到发件人为a@gmail.com的邮件") else: print(f"共匹配到{len(email_ids)}封目标邮件") # 示例:遍历输出所有匹配邮件的主题 for e_id in email_ids: _, msg_content = gmail.fetch(e_id, "(RFC822)") for part in msg_content: if isinstance(part, tuple): msg = email.message_from_bytes(part[1]) # 解码邮件主题避免乱码 subject, encode = decode_header(msg["Subject"])[0] if isinstance(subject, bytes): subject = subject.decode(encode if encode else "utf-8") print(f"邮件ID:{e_id.decode()},主题:{subject}") # 操作结束关闭连接 gmail.close() gmail.logout()
注意事项
- 若你的Gmail账号开启了两步验证,需要先到Google账号后台生成应用专用密码,使用应用密码替代普通账号密码登录,否则会触发登录拦截
- IMAP搜索指令的关键词不区分大小写,
FROM也可以写为from,发件人邮箱需要用引号包裹,避免特殊字符导致解析错误 - 可以自由组合搜索条件,比如需要同时筛选未读+指定发件人,搜索参数可以改为
'UNSEEN FROM "a@gmail.com"'
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

