目前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()
運行結果
文檔內容是否對您有幫助?