如果在电子邮件主题中找到部分字符串,则Outlook电子邮件将移至文件夹

问题描述 投票:0回答:2

大家好,我确实需要您在Outlook中想要做的事情的帮助。

1)我有一个列表,其中包含Outlook级别的文件夹名称['fried chicken'; “煮意大利面”; “烤土豆”](已存在且为空的文件夹。(元素是由两个词组成的字符串,例如“炸鸡”)]

2)我在收件箱中搜索所有邮件,如果message.subject与列表中的元素之一匹配,则将该电子邮件移至文件夹(例如:电子邮件主题为“鸡肉的炸法”或“我喜欢烤土豆” ...正如您所看到的,它不是一字串的字符串,因此我的信息不正确。移动调用未找到任何相关内容。

这是我想做的。下面是我要调整的“代码”。

for message in messages:
    name = str(message.subject)
    message = messages.GetPrevious()
    if any(x in name for x in list):
        print(str(name))
        #print("Email " + name + " goes into folder " + alerts_folder[list])
        message.Move(alerts_folder.Folders[list])
python outlook message
2个回答
0
投票

尝试:

for message in messages:
    name = str(message.subject)
    message = messages.GetPrevious()
    for y in list:
        if any(x in name for x in y.split():
            print(str(name))
            #print("Email " + name + " goes into folder " + alerts_folder[list])
            message.Move(alerts_folder.Folders[list])

上面的代码首先遍历列表,然后拆分列表中的每个元素(因为每个元素都是两个单词的字符串)。


0
投票

我认为问题是由于if any(x in name for x in list)中的x是整个文件夹名称。

如果您的主题是“炸鸡好吃”,则代码将与文件夹“炸鸡”匹配,但与“炸鸡”文件夹不匹配。

您可以尝试使用以下代码:

subject = "How fried is the chicken"
folders = ['fried chicken', 'boiled pasta', 'baked potatoes']
for folder in folders:
      keywords = folder.split()
      any(keyword in subject for keyword in keywords)

输出将是:

True
False
False

注意,这也适用于部分主题匹配,例如:

subject2 = "chicken tasty"

即,如果主题字符串中只有文件夹关键字,它将返回true。

考虑使用all()功能而不是any()要求文件夹名称中的所有关键字都在主题中

for folder in folders:
    keywords = folder.split()
    all(keyword in subject for keyword in keywords)
© www.soinside.com 2019 - 2024. All rights reserved.