打开包含“ x”的电子邮件主题触发的“ x”文件

时间:2019-06-18 10:34:20

标签: vba outlook outlook-vba

我正在尝试编写包含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

1 个答案:

答案 0 :(得分:0)

如果您同时获得16个以上的项目,则ItemAdd事件可能不会触发。

我建议改为处理Application类的NewMailEx事件。当有新消息到达收件箱时以及在客户端规则处理发生之前,NewMailEx事件将触发。您可以使用EntryIDCollection数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以最小化对Outlook性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和客户端规则等过程会将新邮件从收件箱移至另一个文件夹,这些过程可能会异步发生。您不应该假定在发生这些事件之后,收件箱中的项目数总是会增加一个项目。