如何检测应接收邮件主题未出现在已接收邮件列表中
解决方案
核心问题是:应接收主题分为两类,一类需要完全匹配(比如你发送的邮件主题),另一类是作为前缀出现在已接收主题中的(比如subject1对应带后缀的subject1 backup up completed)。直接用集合差集无法处理前缀匹配场景,需要针对性做前缀+完全匹配检查。
实现代码
# 已接收的邮件主题列表 sent_subjects = [ 'subject1 backup up completed', 'subject2-2 backup failed', 'subject4 backup partial complete', 'email3 done', 'ak47 failed', 'mp5 is good', 'm4 is good' ] # 从JSON读取的发送邮件条目 emails = [ {'subject': 'mp3 is good', 'date': '2020-02-02'}, {'subject': 'mp5 is good', 'date': '2020-02-02'}, {'subject': 'm4 is good', 'date': '2020-02-02'} ] # 生成应接收主题列表 subjects = [x['subject'] for x in emails] static_subjects = [ 'subject1', 'subject2-2', 'subject4', 'email3', 'ak47', 'subject10', 'email11', 'final destination' ] subjects += static_subjects subjects.sort() # 检测未收到的主题 missing_subjects = [] for expected in subjects: # 检查两种情况:完全匹配,或作为带空格的前缀(避免部分匹配) found = False for received in sent_subjects: if received == expected or received.startswith(expected + ' '): found = True break if not found: missing_subjects.append(expected) # 输出结果 for subj in missing_subjects: print(subj)
代码说明
- 完全匹配:处理你主动发送的邮件主题(比如
mp5 is good),这类主题必须和已接收列表条目完全一致才算收到。 - 前缀匹配:处理带动态后缀的被动接收主题(比如
subject1),通过startswith(expected + ' ')确保匹配完整前缀,避免subject误匹配subject1这类部分重合的情况。 - 遍历所有应接收主题,逐一验证是否存在匹配项,未匹配的即为未收到的主题。
运行结果
mp3 is good subject10 email11 final destination
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

