我正在尝试编写包含X主题的电子邮件到达时打开X文件(.bat)的代码。 为了进一步说明,我想在相关电子邮件主题到达时自动打开文件;发件人总是一样。
更多示例:从安全部门收到的电子邮件,主题为“阳台警报”;应该会自动打开“ balcony.bat”文件。
我试图编辑以下解决方案,但需要进一步扩展,并且在编译第一行时出现错误。很抱歉对这种语言不感兴趣。
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "Security" Then
Set Msg = item
' If Msg.Subject = "specific subject" Then
Call Shell("cmd.exe /C /K " & "ChDir f:\" & Msg.Subject & ".bat", vbNormalFocus)
End If
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
答案 0 :(得分:0)
如果您同时获得16个以上的项目,则ItemAdd
事件可能不会触发。
我建议改为处理Application
类的NewMailEx事件。当有新消息到达收件箱时以及在客户端规则处理发生之前,NewMailEx事件将触发。您可以使用EntryIDCollection
数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以最小化对Outlook性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和客户端规则等过程会将新邮件从收件箱移至另一个文件夹,这些过程可能会异步发生。您不应该假定在发生这些事件之后,收件箱中的项目数总是会增加一个项目。