在所有文件夹上调用Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd)

时间:2019-03-15 07:27:11

标签: c# vsto outlook-addin

基于某些条件,我试图将新电子邮件(仅在收件箱中)复制到另一个文件夹。该文件夹与其他默认文件夹(如“收件箱”,“发件箱”,“草稿”)处于同一级别。 下面是我的代码:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Debug.WriteLine(ThisAddIn.isAddInOn);

    outlookNameSpace = this.Application.GetNamespace("MAPI");
    inbox = outlookNameSpace.GetDefaultFolder(
                Microsoft.Office.Interop.Outlook.
                OlDefaultFolders.olFolderInbox);

    items = inbox.Items;
    items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
}

下面是items_ItemAdd的代码:

void items_ItemAdd(object Item)
{
    Outlook.MailItem mail = (Outlook.MailItem)Item;
    Debug.WriteLine("mail");
    Debug.WriteLine(mail == null);

    if (mail!= null)
        {#code to move mail to particular folder}

我尚未编写该功能的完整代码。因为这个功能不是我的问题。 我的问题是items_ItemAdd被多次调用。例如:

  1. 何时会收到新电子邮件
  2. 将电子邮件移至另一个文件夹时。

我不希望在上面的第二个示例中调用EventHandler。当第二次调用它时,函数items_ItemAdd接收并清空邮件对象。所以我得到下面的异常:

引发异常:

'System.Runtime.InteropServices.COMException' in OutlookAddIn2.dll
System.Runtime.InteropServices.COMException (0xBDD40107): The operation failed.
   at Microsoft.Office.Interop.Outlook._MailItem.get_Body()
   at OutlookAddIn2.ThisAddIn.items_ItemAdd(Object Item)

这是

inbox = outlookNameSpace.GetDefaultFolder(
    Microsoft.Office.Interop.Outlook.
    OlDefaultFolders.olFolderInbox);

指向所有文件夹?

0 个答案:

没有答案