1

我有以下代码,可以从 Outlook 下载附件。但我有两个问题。1.如果文件夹中已有同名文件,附件将不会下载。我希望将其替换为新文件(文件名相同,但数据已更新)。2. 代码正在下载它在电子邮件中找到的所有图像。这不是一个大问题,我可以为它编写一个额外的小代码,但我想了解是否可以在我拥有的代码中排除图像。

import os
import win32com.client

path = r"C://Users//greencolor//Desktop//Autoreport//Load_attachments//"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items


def save_attachments(subject_prefix): # changed parameter name
    messages.Sort("[ReceivedTime]", True)  # sort by received date: newest to oldest
    for message in messages:
        if message.Subject.startswith(subject_prefix): # changed test
            print("saving attachments for:", message.Subject)
            for attachment in message.Attachments:
                print(attachment.FileName)
                attachment.SaveAsFile(os.path.join(path, str(attachment.FileName)))  # changed to file-name
            return

save_attachments('PB Report North Cluster - ' )
4

1 回答 1

0

遍历文件夹中的所有消息并检查该Subject行并不是一个好主意。相反,您只需要查找与您的条件相对应的项目(带有特定主题行和附件),然后才遍历找到的项目以保存附件。Find/FindNextRestrict方法可以帮助您在 Outlook 中完成该任务。在以下文章中阅读有关它们的更多信息:

您可以使用以下搜索条件在主题行中找到关键字:

filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " LIKE '%" & wordsInSubject & " %'"

以下搜索条件仅用于查找带有附件的项目:

filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:hasattachment" & Chr(34) & "=True"

您可以在字符串中使用 AND 运算符组合这两个搜索条件(就像在 SQL 中所做的那样)。

最后,您可以使用文件系统对象检查磁盘上是否已经存在与该文件相同的文件,有关详细信息,请参阅VBA 检查文件是否存在

  1. 该代码正在下载它在电子邮件中找到的所有图像。这不是一个大问题,我可以为它编写一个额外的小代码,但我想了解是否可以在我拥有的代码中排除图像。

您可以通过检查cid:imageName消息正文中的子字符串来检测嵌入的图像。有关详细信息,请参阅使用 VBA 在电子邮件中嵌入图像

于 2022-02-05T20:07:01.470 回答