邮件发送后如何执行代码?
How to execute a code after mail has been sent?
我试图在发送某些电子邮件后记录特定的下一个编号。但是 Application_ItemSend
在发送电子邮件之前执行代码。
我正在为主题添加一个参考编号,但我不想让每个人都因收件箱中出现的随机数字而感到困惑。
有没有办法在发送后执行代码?
我想我明白了:
- 声明一种新型的事件相关变量,以确保每次将电子邮件添加到“已接收邮件”文件夹时都会执行一个操作。
Private WithEvents Rcvditems As Outlook.Items
- 我用来避免变量恢复到 'nothing' 的方法是使用相同的
Application.Item_Send
事件。此选项将确保我每次发送电子邮件时都激活 reader。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set Rcvditems = objNS.GetDefaultFolder(olFolderSentMail).Items
End Sub
...它正在做的是重新计算我的变量 'Rcvditems'.
- 最后,由于Rcvd_Items是一个与事件相关的变量,我可以将事件'AddItem'赋值给它。
Private Sub Rcvditems_ItemAdd(ByVal Item As Object)
On Error GoTo EscapeSub
Call MyMacro(Item)
EscapeSub:
End Sub
像这样,我确保在发送之前不会更改电子邮件,而只会更改添加到 Received-Items 文件夹中的电子邮件。
默认情况下,已发送的项目放置在 Outlook 中的 Sent Items
文件夹中。如果是这样,您可以挂钩到属于已发送邮件文件夹的 Items
class 的 ItemAdd
事件。当一个或多个项目被添加到指定的集合时,它被触发。当大量项目一次添加到文件夹(超过 16 个)时,此事件不会 运行 - 这是 OOM 中的一个已知问题,存在于所有 Outlook 版本中。
Public WithEvents myOlItems As Outlook.Items
Public Sub Initialize_handler()
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentItems).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
MsgBox Item.Subject
End Sub
请注意,MailItem.SaveSentMessageFolder 属性 允许设置一个 Folder
对象,该对象表示发送后将保存电子邮件副本的文件夹。因此,如果加载项在 ItemSend
事件处理程序中设置此 属性,则不必将 Outlook 项目保存到 Sent Items
文件夹。
我试图在发送某些电子邮件后记录特定的下一个编号。但是 Application_ItemSend
在发送电子邮件之前执行代码。
我正在为主题添加一个参考编号,但我不想让每个人都因收件箱中出现的随机数字而感到困惑。
有没有办法在发送后执行代码?
我想我明白了:
- 声明一种新型的事件相关变量,以确保每次将电子邮件添加到“已接收邮件”文件夹时都会执行一个操作。
Private WithEvents Rcvditems As Outlook.Items
- 我用来避免变量恢复到 'nothing' 的方法是使用相同的
Application.Item_Send
事件。此选项将确保我每次发送电子邮件时都激活 reader。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set Rcvditems = objNS.GetDefaultFolder(olFolderSentMail).Items
End Sub
...它正在做的是重新计算我的变量 'Rcvditems'.
- 最后,由于Rcvd_Items是一个与事件相关的变量,我可以将事件'AddItem'赋值给它。
Private Sub Rcvditems_ItemAdd(ByVal Item As Object)
On Error GoTo EscapeSub
Call MyMacro(Item)
EscapeSub:
End Sub
像这样,我确保在发送之前不会更改电子邮件,而只会更改添加到 Received-Items 文件夹中的电子邮件。
默认情况下,已发送的项目放置在 Outlook 中的 Sent Items
文件夹中。如果是这样,您可以挂钩到属于已发送邮件文件夹的 Items
class 的 ItemAdd
事件。当一个或多个项目被添加到指定的集合时,它被触发。当大量项目一次添加到文件夹(超过 16 个)时,此事件不会 运行 - 这是 OOM 中的一个已知问题,存在于所有 Outlook 版本中。
Public WithEvents myOlItems As Outlook.Items
Public Sub Initialize_handler()
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentItems).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
MsgBox Item.Subject
End Sub
请注意,MailItem.SaveSentMessageFolder 属性 允许设置一个 Folder
对象,该对象表示发送后将保存电子邮件副本的文件夹。因此,如果加载项在 ItemSend
事件处理程序中设置此 属性,则不必将 Outlook 项目保存到 Sent Items
文件夹。