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

更新时间: 2024-11-11

目前SEARCH命令不支持'(UNSEEN SUBJECT "test")'的方式搜索主题,建议先按日期或已读/未读等缩小范围后,再通过FETCH获取具体内容进行匹配。

Python示例代码

场景:搜索收件箱的未读邮件,提取主题,匹配包含”tes“字样的主题,最后匹配到”test“的邮件,并打印邮件ID和邮件eml原文。

重要

风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。

 

# -*- coding: utf-8 -*-import imaplibfrom 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