下载outlook附件



我有下面的代码,可以从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 - ' )

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

  • 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(C#、VB.NET(
  • 如何:使用Restrict方法从文件夹中检索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在电子邮件中嵌入图像。

相关内容

  • 没有找到相关文章

最新更新