保存带有特定主题的传入电子邮件的附件
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 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItem
、MeetingItem
或SharingItem
。 NewMailEx
事件在新邮件到达收件箱时以及在客户端规则处理发生之前触发。您可以使用EntryIDCollection
数组中返回的Entry ID调用NameSpace.GetItemFromID方法并处理该项目。
【讨论】:
以上是关于保存带有特定主题的传入电子邮件的附件的主要内容,如果未能解决你的问题,请参考以下文章
如何根据收到的时间和主题行在新邮件中保存 Excel 附件?
如何在 Django 的 FileField 中保存来自传入电子邮件的附件?