基于日期保存附件的 Outlook 规则脚本

Posted

技术标签:

【中文标题】基于日期保存附件的 Outlook 规则脚本【英文标题】:Script for Outlook Rule that Saves Attachment based on date 【发布时间】:2022-01-17 08:33:14 【问题描述】:

目的是使用规则触发脚本,如果创建日期等于今天,则保存电子邮件的附件。接下来,该脚本将从文件夹中删除所有创建日期不同的项目。

我可以运行代码,但它什么也没做。

Public Sub SaveAttachments(MItem As Outlook.MailItem)
    Dim oAttachment As Outlook.Attachment
    Dim sSaveFolder As String
    Dim today As Date 'today's date
    Dim adate As Date 'date of attachment
    
    today = Date
    
    sSaveFolder = "filepath"
        
    For Each oAttachment In MItem.Attachments
        adate = oAttachment.DateCreated
        If DateDiff("d", today, adate) = 0 Then
        oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
        End If
    Next oAttachment
    
    Dim objFSO, objFolder, objfile As Object
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(sSaveFolder)
    
    For Each objfile In objFolder.files
        If Format(objfile.DateCreated, "DD-MM-YYYY") <> Format(Date, "DD-MM-YYYY") Then
            Kill objfile
        End If
    Next objfile
    
End Sub

【问题讨论】:

你试过调试这个吗? If 块中的语句是否实际执行? @TimWilliams,我实际上已经弄清楚了。关键问题是 .DateCreated 方法适用于文件,而不是附件对象。我改用 .Senton 方法,现在一切都按预期工作。我花了太长时间才弄明白。 【参考方案1】:

我想通了。

Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
Dim keepfile As String

sSaveFolder = "filepath"
    
For Each oAttachment In MItem.Attachments
    sdate = MItem.SentOn
    If Format(sdate, "DD-MM-YYYY") = Format(Date, "DD-MM-YYYY") Then
    oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
    keepfile = oAttachment.DisplayName
    End If
Next oAttachment

Dim objFSO, objFolder, objfile As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sSaveFolder)

For Each objfile In objFolder.files
    If InStr(objfile.Name, keepfile) = 0 Then
        Kill objfile
    End If
Next objfile

End Sub

【讨论】:

绝对正确! 我建议如果在关机和午夜之间收到邮件,下次打开 Outlook 时.SentOn 将在Date 之前。不会保存附件。 感谢您的洞察力!我不认为这应该是一个问题,因为我要保存的附件来自每天早上同一时间发送的订阅电子邮件。【参考方案2】:

Outlook 对象模型中的Attachment 类不提供DateCreated 属性。

【讨论】:

是的,我花了很长时间才意识到这一事实

以上是关于基于日期保存附件的 Outlook 规则脚本的主要内容,如果未能解决你的问题,请参考以下文章

从 Outlook 下载附件并在 Excel 中打开

Outlook - 从带有 .xls 附件的电子邮件和特定发件人中保存文件,然后将电子邮件移动到子文件夹

Outlook 规则将电子邮件保存为文本

仅保存 Outlook MailItem 的真实附件

使用单元格值作为文件名保存 Outlook 附件

在文件名上使用 ReceivedTime 保存来自 Outlook 的附件