保存带有特定主题的传入电子邮件的附件

Posted

技术标签:

【中文标题】保存带有特定主题的传入电子邮件的附件【英文标题】:Save attachments of incoming email with specific subject 【发布时间】:2022-01-20 11:25:29 【问题描述】:

在 Outlook 365 上,由于我不是计算机的完全管理员,因此不允许使用规则 + 脚本。

我需要检查邮件何时到达, 如果它在主题中有一些特定的词 然后将附件保存在特定文件夹中(最好是邮件主题名称+日期戳),然后将邮件放入垃圾箱。

我尝试了下一个代码。

Option Explicit
Private WithEvents inboxItems As Outlook.Items

Private Sub Application_Startup()
  Dim outlookApp As Outlook.Application
  Dim objectNS As Outlook.NameSpace
  
  Set outlookApp = Outlook.Application
  Set objectNS = outlookApp.GetNamespace("MAPI")
  Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
End Sub
'--------------------- ok till here -----------
Private Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler

Dim Msg As Outlook.MailItem
Dim objAttachments As Outlook.Attachments
Set objAttachments = Msg.Attachments

If TypeName(Item) = "MailItem" Then
    If InStr(Msg.Subject, "Magic Red Carpet") Then
        
     objAttachments.SaveAsFile "C:\Users\xx12345\Desktop\vba\" & objAttachments.Msg.Subject&date
    End If
End If


ErrorHandler:
    MsgBox "dho!"

End Sub

【问题讨论】:

删除On Error GoTo ErrorHandler。您可能会发现不使用错误处理会更好。如果您无法弄清楚错误消息的含义,请编辑问题以包含错误和行。 我已经尝试过不进行错误处理,但是在没有文件保存时没有显示消息/错误 Msg 来自哪里? sry 无法理解关于“Msg”的问题 Msg 中没有要使用的Msg.Attachments。应该有错误。 【参考方案1】:

代码中需要使用item对象作为参数传递给Items类的ItemAdd事件:

Private Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler

Dim objAttachments As Outlook.Attachments
Set objAttachments = Item.Attachments

If TypeName(Item) = "MailItem" Then
    If InStr(Item.Subject, "Magic Red Carpet") Then
        
     objAttachments.SaveAsFile "C:\Users\xx12345\Desktop\vba\" & objAttachments.Msg.Subject&date
    End If
End If
End Sub

注意,Subject 字符串可能包含文件名中不允许的符号。所以,我建议在调用 SaveAsFile 方法之前检查它们。

您也可以考虑处理Application 类的NewMailEx 事件。对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItemNewMailEx 事件在新邮件到达收件箱时以及在客户端规则处理发生之前触发。您可以使用EntryIDCollection数组中返回的Entry ID调用NameSpace.GetItemFromID方法并处理该项目。

【讨论】:

以上是关于保存带有特定主题的传入电子邮件的附件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据收到的时间和主题行在新邮件中保存 Excel 附件?

如何在 Django 的 FileField 中保存来自传入电子邮件的附件?

在 GAS/Javascript 中保存带有特定主题行的 Gmail 附件

从新电子邮件中保存附件

根据主题过滤 Outlook 电子邮件,然后下载附件

OUTLOOK VBA 收到新邮件后自动保存包含特定字符的附件到指定文件夹