2009-06-18 72 views
1

如何使用VSTO AddIn为Outlook 2003中的联系人文件夹/联系人项目的SendAndReceive事件附加事件处理程序?我试过使用:挂接到Outlook联系人的发送/接收同步事件

Application.ActiveExplorer().SyncObjects.ForEach 
{ 
    SyncObject.SyncEnd += \\Do something 
} 

但它不工作。

回答

2

我试图

Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler 

此挂钩发送/接收所有默认文件夹..

0

其实我的需求有点不同,但可能是一样的: 我希望在发送/接收之后得到一个文件夹(在我的情况下为约会)变化的通知。 我的第一个想法(我认为你在同一轨道上)是检查发送/接收事件,并可能从中收集某些项目或类似的东西,但没有这样的事情可用。 (如也在this forum post解释)

我的第二个路径来自于following article:我可以对文件夹的Item_AddItem_Change(甚至Item_Removed)事件(其中也被接收的发送完成的改变触发注册):

一些代码:

// Get the folder calendar folder and subscribe to the events. 
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemChange += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemChangeEventHandler(Items_ItemChange); 
} 

// Do something with it. 
void Items_ItemAdd(object Item) 
{ 
    logItem(Item, "Add"); 
} 
void logItem(object Item, string Action) 
{ 

    Outlook.AppointmentItem item = Item as Outlook.AppointmentItem; 

    File.AppendAllText(@"e:\log.txt", string.Format("Item {0}: {1}", Action, Item)); 

    if (item != null) 
    { 
     File.AppendAllText(@"e:\log.txt", " - Appointment: " + item.Subject); 
    } 
} 
0

您可以连接邮件发送/接收事件,然后检查邮件类型是ContactItem。以下是发送事件的示例。

// hook up the event 
this.Application.ItemSend += ThisApplication_SentMail; 

然后在您的事件处理程序中检查邮件项目类型;

internal void ThisApplication_SentMail(object item, ref bool cancel) 
{ 
    Outlook.ContactItem contactItem = item as Outlook.ContactItem; 

    // mail message is not a ContactItem, so exit. 
    if (contactItem == null) return; 

    // do whatever you need to here 

} 
相关问题