当同时撰写多封电子邮件时,除一封电子邮件外,Outlook 不会触发 AttachmentAdd 事件

Outlook does not fire the AttachmentAdd event except for one email when multiple emails are composed at the same time

我正在编写一个 Outlook 加载项,并且正在连接到 mailItem 的 AttachmentAdd 事件。它在撰写一封电子邮件时按预期工作,但当同时撰写多封电子邮件时,AttachmentAdd 事件似乎仅针对添加附件的第一封电子邮件触发。

我不确定这是否与 RCW 超出范围有关。

我正在使用 Outlook 365 64 位,如果有帮助的话。

代码如下:

public partial class MyAddIn
{
    private void OutlookAddIn_Startup(object sender, System.EventArgs e)
    {
            Application.ItemLoad += NewItem_Load;
    }

    private void NewItem_Load(object item)
    {
        Outlook.MailItem newMailItem = null;

        newMailItem = item as Outlook.MailItem;
        if (newMailItem != null)
        {
            newMailItem.AttachmentAdd -= MailItem_AttachmentAdd;
            newMailItem.AttachmentAdd += MailItem_AttachmentAdd;
        }
    }

    // This gets called only for one email.
    private void MailItem_AttachmentAdd(Outlook.Attachment attachment)
    {
       // Do some stuff here.
    }

    private void OutlookAddIn_Shutdown(object sender, System.EventArgs e)
    {
        Application.ItemLoad -= NewItem_Load;
        // Log
    }

    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new MyRibbon(this);
    }

    #region VSTO generated code

    
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(OutlookAddIn_Startup);
        this.Shutdown += new System.EventHandler(OutlookAddIn_Shutdown);
       
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
    }       
}

您正在为局部变量 (newMailItem) 设置事件处理程序,该变量将在 NewItem_Load() 退出后的某个时间点释放。

变量必须保持活动状态才能引发事件。您可以将声明移动到 class 级别,但您可以拥有多个未清项。尝试创建一个包含 MailItem 作为其成员的包装器 class,并将该包装器存储在列表中。