阿里邮箱IMAP场景示例:通过主题关键词搜索邮件

目前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()

运行结果

image