首页 > 解决方案 > 打开由传入电子邮件触发的“x”文件,主题包含“x”

问题描述

当带有主题 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

标签: vbaoutlook

解决方案


ItemAdd如果您同时获得超过 16 个项目,则该事件可能不会触发。

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


推荐阅读