基于某些条件,我试图将新电子邮件(仅在收件箱中)复制到另一个文件夹。该文件夹与其他默认文件夹(如“收件箱”,“发件箱”,“草稿”)处于同一级别。 下面是我的代码:
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
被多次调用。例如:
我不希望在上面的第二个示例中调用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);
指向所有文件夹?