0

我正在编写 Outlook 2007 插件。我正在做的就是:

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Outlook.Folder root;

        //creates Spam folder if it dosen't exist
        if (!SpamFolderExist())
        {
            CreateSpamFolder();
        }

        root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();

        //set BeforeItemMove event for spam and inbox folders
        spamFolder = (Outlook.Folder)root.Folders["Spam"];
        inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

        spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam);
        inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox);

        //set new mail event
        this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail);
    }

问题是,即使我在 BeforeItemMoveFromInbox 和 BeforeItemMoveFromSpam 方法中没有写任何东西,应用程序也会出现奇怪的行为。在我移动一些邮件后,它不再对特定邮件执行任何移动操作。似乎邮件被阻止了,我就是无法移动它。执行其他移动操作后,其他邮件将被阻止,并且可以移动先前被阻止的邮件。这个想法是,在一封邮件被阻止后,它总是至少有一封无法移动的邮件。换句话说,一些移动动作随机失败。我不得不说,除了将邮件从一个文件夹移动到另一个文件夹之外,我没有做任何其他事情,而且我没有收到任何错误消息。我还尝试在方法结束时将 BeforeItemMove 事件处理程序的取消参数设置为 false,但我得到了相同的行为。

4

2 回答 2

1

你得到它 76 梅尔。我遇到了同样的问题(只是将文件夹连接到 BeforeItemMove 事件,这样当我将消息移出该文件夹时,我无法在短时间内将其从新文件夹移动到另一个文件夹) .

将 Marshal.ReleaseComObject() 添加到事件处理程序的末尾完美地修复了它。

于 2010-02-01T04:47:35.087 回答
0

如果我理解您上面的问题描述,

如果您将项目从收件箱移动到垃圾邮件文件夹,则会触发该事件,但如果您将相同的项目移回,则该事件不起作用。?? 因为您必须为要从中移动的 alls 文件夹挂钩事件。

可能发生的情况是您可能必须在事件处理程序 Marshal.ReleaseComObject() 中释放对象

于 2009-05-06T16:28:13.267 回答