【问题标题】:Call method when e-mail sent from Outlook?从Outlook发送电子邮件时的调用方法?
【发布时间】:2024-05-23 10:45:01
【问题描述】:

有一个名为MailItemClass 的VBA 类有一个event 用于在Outlook 中发送电子邮件时。我在 VB.NET 中找不到这个。我查看了documentation,但在MAPI 中找不到它。

(我可以从 VB.NET 调用 VBA 吗?)

【问题讨论】:

    标签: .net events vba outlook-2007 mapi


    【解决方案1】:

    您是否正在制作 Outlook 加载项?在发送项目之前会引发一个名为 Application.ItemSend 的事件。我刚刚启动了 VS2010,创建了一个 Outlook 2007 插件类型的新项目,其中仅包含以下代码,当我单击从 Outlook 发送时,我的 Application_ItemSend 按预期触发。

    Public Class ThisAddIn
    
        Private Sub ThisAddIn_Startup() Handles Me.Startup
    
        End Sub
    
        Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    
        End Sub
    
        Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles Application.ItemSend
            System.Windows.Forms.MessageBox.Show("Hi")
        End Sub
    End Class
    

    编辑

    如果您正在制作使用相同方法的 WinForms 应用程序,但您“看到”的方式略有不同。可能有点令人困惑的是,该事件是在应用程序级别引发的,而不是从邮件项本身引发的。

    Public Class Form1
        ''//Holds a reference to our mail application
        Private WithEvents OA As Microsoft.Office.Interop.Outlook.Application
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ''//Either launches Outlook or snaps to the current running one
            OA = New Microsoft.Office.Interop.Outlook.Application()
        End Sub
    
        Private Sub OA_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles OA.ItemSend
            MessageBox.Show("Hello")
        End Sub
    End Class
    

    【讨论】:

    • 不,我没有创建 Outlook 加载项,也许我应该创建?我有一个 Windows 窗体项目,一旦发送了创建的(通过 MAPI)电子邮件,我需要在其中更新数据库。
    • 谢谢,我试试看!
    【解决方案2】:

    VBA 和 VB.NET 都使用“Outlook 对象模型”。奇怪的是,发送事件被省略了。但是,您仍然有这个event

    我不太喜欢 VB,但由于 MAPI 面向 C++,因此从 VB.net 使用它听起来不是很流畅,但 MailItem 将大致对应于 LPMESSAGE。各种 Outlook 插件框架都有很好的通知系统。如果您需要单独使用 MAPI,请查看 MAPI events,...但这并不容易。

    【讨论】:

      最近更新 更多