小编Lui*_*i87的帖子

如何在 imaplib.IMAP4_SSL.search() 上设置多个条件(AND 和 OR)

我需要过滤电子邮件并根据某些条件对其进行标记。

这是我的代码:

def get_inbox():

    os.chdir("C:/Users/simeone/Desktop/FilterEmails")
    df = {}
    df = pd.read_excel("Filtri.xlsx", encoding='utf-8', sheet_name = ['FROM', 'TEXT', 'SUBJECT'])
    filters = []
    for key in df.keys():
        fil = [ '(OR ' + key + ' ' + '"' + name + '"'+ ' UNSEEN)' for name in list(df[key][df[key].columns[0]])]
        str1 = ' '.join(fil)
        filters.append(str1)
    filtro = ' '.join(filters)
    

    mail = imaplib.IMAP4_SSL(host)
    mail.login(username, password)
    mail.select("inbox")


    _, search_data = mail.search(None, filtro)  
Run Code Online (Sandbox Code Playgroud)

代码不完整,但这不是重点,因为错误是条件。问题是条件。

我从 Excel 导入条件,其中条件分为来源、文本、主题,然后对它们施加条件。

问题在于代码会选择每封看不见的电子邮件,无论测试和主题如何。

我心里清楚逻辑,但无法正确翻译为代码。mail.search 必须做的是: AND UNSEEN AND (OR FROM "####" OR …

email imap imaplib python-3.x

0
推荐指数
1
解决办法
1193
查看次数

标签 统计

email ×1

imap ×1

imaplib ×1

python-3.x ×1