使用outlook加载项收听项目移动事件

时间:2014-08-01 18:12:31

标签: visual-studio outlook outlook-addin office-addins

我想在用户移动邮件项目时(从文件夹到另一个文件夹)执行某些功能。所以我想用outlook加载项捕获邮件项目移动事件。 我认为这应该可以使用以下事件处理程序,

MAPIFolderEvents_12_BeforeItemMoveEventHandler
ItemsEvents_ItemRemoveEventHandler

我尝试了上述两个事件句柄。但他们不适合我。有人可以提供一个例子。以下是MAPIFolderEvents_12_BeforeItemMoveEventHandler的代码。

    Outlook.Folder fldr;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        fldr = (Outlook.Folder)Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderTasks);
        fldr.BeforeItemMove += new Microsoft.Office.Interop.Outlook.
             MAPIFolderEvents_12_BeforeItemMoveEventHandler
             (Folder_BeforeItemMove); 
    }

    private void Folder_BeforeItemMove(object anItem, MAPIFolder aMoveToFolder, ref bool Cancel)
    {
        Outlook.MailItem mailItem = (anItem as Outlook.MailItem);
        //Do other stuff
    }

2 个答案:

答案 0 :(得分:0)

引发事件(fldr)的对象必须在类级别而不是本地级别声明,以避免被垃圾收集器释放。

答案 1 :(得分:0)

对于迭代MailFolders有类似的要求。

请尝试如下:

Outlook.MAPIFolder mapifldr; Outlook.Folder fldr;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   mapifldr=Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderTasks);
    fldr = (Outlook.Folder) Application.GetNamespace("MAPI").GetFolderFromID(mapifldr.EntryID);
    fldr.BeforeItemMove += new Microsoft.Office.Interop.Outlook.
         MAPIFolderEvents_12_BeforeItemMoveEventHandler
         (Folder_BeforeItemMove); 
}

这是一篇非常古老的帖子,但希望能为其他人节省时间。