目前SEARCH命令不支持'(UNSEEN SUBJECT "test")'的方式搜索主题,建议先按日期或已读/未读等缩小范围后,再通过FETCH获取具体内容进行匹配。
Python示例代码
场景:搜索收件箱的未读邮件,提取主题,匹配包含”tes“字样的主题,最后匹配到”test“的邮件,并打印邮件ID和邮件eml原文。
重要
风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。
# -*- coding: utf-8 -*-
import imaplib
from imapclient import imap_utf7
# 配置 IMAP 服务器
imap_server = 'imap.qiye.aliyun.com' # IMAP 服务器地址
username = 'test@example.com' # 用户名
password = '********' # 密码
port = 993 # 端口号
# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL(imap_server, port)
mail.login(username, password)
# 选择邮箱(例如 "INBOX")
folder_name = imap_utf7.encode('INBOX') # utf-7编码,中文编码
mail.select(folder_name)
# 搜索未读邮件
status, data = mail.search(None, 'UNSEEN')
if status == 'OK':
mail_ids = data[0].split()
for mail_id in mail_ids:
# 获取邮件的主题
f_status, msg_data = mail.fetch(mail_id, '(BODY[HEADER.FIELDS (SUBJECT)])')
if f_status == 'OK':
subject = msg_data[0][1].decode().splitlines()[0]
if 'Subject:' in subject and 'tes' in subject:
# 获取邮件的完整内容
f_status, msg_data = mail.fetch(mail_id, '(RFC822)')
if f_status == 'OK':
print(f"邮件ID: {mail_id.decode()}")
print("邮件内容:")
print(msg_data[0][1].decode())
# 关闭连接
mail.logout()
运行结果
文档内容是否对您有帮助?