Outlook “我该怎么听?”;项目添加";为了我的一切;“已发送邮件”;文件夹?

Outlook “我该怎么听?”;项目添加";为了我的一切;“已发送邮件”;文件夹?,outlook,vsto,outlook-addin,Outlook,Vsto,Outlook Addin,我的Outlook由3个用户邮箱(缓存)和10个共享邮箱(联机)组成 我需要捕获这两个邮箱中的邮件何时发送,所以我在谷歌上搜索,我应该收听“ItemAdd”事件 问题是,并没有触发ItemAdd事件 以下是我的测试代码: Imports System.Runtime.InteropServices Public Class ThisAddIn Private sentFolders As New List(Of Outlook.Folder) Private Sub Th

我的Outlook由3个用户邮箱(缓存)和10个共享邮箱(联机)组成

我需要捕获这两个邮箱中的邮件何时发送,所以我在谷歌上搜索,我应该收听“ItemAdd”事件

问题是,并没有触发ItemAdd事件

以下是我的测试代码:

Imports System.Runtime.InteropServices

Public Class ThisAddIn

    Private sentFolders As New List(Of Outlook.Folder)


    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Call InitSentFolders()
    End Sub


    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    End Sub


    Private Sub InitSentFolders()
        Dim ns As Outlook.NameSpace = Application.GetNamespace("MAPI")
        Dim stores As Outlook.Stores = ns.Stores
        For i As Integer = 1 To stores.Count
            Try
                Dim store As Outlook.Store = stores(i)
                Try
                    Dim sentFolder As Outlook.Folder = TryCast(store.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail), Outlook.Folder)
                    AddHandler DirectCast(sentFolder.Items, Outlook.Items).ItemAdd, AddressOf ItemAdd
                    sentFolders.Add(sentFolder)
                Catch ex As Exception
                End Try
                Marshal.ReleaseComObject(store)
            Catch ex As Exception
            End Try
        Next
        Marshal.ReleaseComObject(stores)
        Marshal.ReleaseComObject(ns)
    End Sub


    Private Sub ItemAdd(ByVal ItemObject As Object)
        If TypeOf (ItemObject) Is Outlook.MailItem Then
            Dim item As Outlook.MailItem = CType(ItemObject, Outlook.MailItem)
            MsgBox(item.Sender.ToString)
            Marshal.ReleaseComObject(item)
        End If
    End Sub

End Class
知道它为什么没有被解雇吗


谢谢

对于初学者来说,这是一个普遍存在的错误

您需要在全局范围(例如,在外接程序类)声明源对象,并使其保持活动状态以获取事件。或者垃圾收集器刷堆,源对象将被销毁

在您的情况下,定义一个Outlook文件夹列表,您可以在其中保存所有引用