挂接到Outlook联系人的发送/接收同步事件
问题描述:
如何使用VSTO AddIn为Outlook 2003中的联系人文件夹/联系人项目的SendAndReceive
事件附加事件处理程序?我试过使用:挂接到Outlook联系人的发送/接收同步事件
Application.ActiveExplorer().SyncObjects.ForEach
{
SyncObject.SyncEnd += \\Do something
}
但它不工作。
答
我试图
Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
此挂钩发送/接收所有默认文件夹..
答
其实我的需求有点不同,但可能是一样的: 我希望在发送/接收之后得到一个文件夹(在我的情况下为约会)变化的通知。 我的第一个想法(我认为你在同一轨道上)是检查发送/接收事件,并可能从中收集某些项目或类似的东西,但没有这样的事情可用。 (如也在this forum post解释)
我的第二个路径来自于following article:我可以对文件夹的Item_Add
和Item_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);
}
}
答
您可以连接邮件发送/接收事件,然后检查邮件类型是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
}