vba - 收到电子邮件时运行的 Outlook 脚本仅在我将新邮件传输给自己时才有效
问题描述
我编写了一个代码,它将接收特定文件夹中的传入电子邮件(首先创建一个规则以便将邮件移动到文件夹,然后启动脚本)。
问题是该规则有效(它将邮件移动到文件夹),但脚本无效。
问题是当我收到新邮件并将其传输给自己时(我的电子邮件也在规则的接收者中),脚本正常工作。
这是我认为可能是错误的代码的开头。
Sub Script(item As Outlook.MailItem)
Dim strMailID As String
Dim objMail As Outlook.MailItem
Dim objNamespace As Outlook.NameSpace
strMailID = item.EntryID
Set objNamespace = Application.GetNamespace("MAPI")
Set objMail = objNamespace.GetItemFromID(strMailID)
Dim objpf As MAPIFolder
If objMail.MessageClass = "IPM.Note" Then
任何帮助,将不胜感激
解决方案
您需要将事件侦听器添加到默认的本地收件箱,它适用于 Outlook 2016。
此代码将向默认本地收件箱添加一个事件侦听器。将对收到的电子邮件采取行动。您需要在下面的代码中添加您需要的操作:
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) = "MailItem" Then
Set Msg = item
' ******************
' do something here
' ******************
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
在 ThisOutlookSession 模块中粘贴代码后,您必须重新启动 Outlook。
推荐阅读
- python - 如何创建行和列的二维列表?
- prolog - Prolog 相等性检查在简单任务上失败
- r - 尝试使用 ldply 将列表转换为数据框时出错((函数中的错误(...,row.names = NULL,:arguments 暗示不同的行数:)
- javascript - 如何仅使用 javascript 设置输入 [范围] 的拇指样式?
- amazon-web-services - 大容量 Lambda 函数出现“LAMBDA_RUNTIME”错误
- java - 带有 Logback 的 Spring Boot 应用程序不会作为 Systemd 服务记录到指定位置
- angular - 无法更改 ion-select-multiple 中的值
- templates - 文本模板中的线程保存图
- c# - 如何在 Blazor 中重置 EditForm 的 DataAnnotationsValidator?
- google-sheets - google sheet api 配额何时恢复?