Перехват события отправки / получения синхронизации контактов Outlook

StackOverflow https://stackoverflow.com/questions/1011655

  •  06-07-2019
  •  | 
  •  

Вопрос

Как прикрепить обработчик события для события SendAndReceive к папкам контактов / элементам контактов в Outlook 2007 с помощью VSTO AddIn? Я пытался использовать:

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

Но это не работает.

Это было полезно?

Решение

Я пытался

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

Это подключает для отправки / получения всех папок по умолчанию.

Другие советы

На самом деле моя потребность была немного другой, но может быть такой же:     Я хотел получать уведомления об изменениях папки (встречи в моем случае) после отправки / получения. Моя первая мысль (и я думаю, что вы находитесь на том же пути) состояла в том, чтобы проверить наличие события отправки / получения и, возможно, получить из него какую-то коллекцию предметов или что-то подобное, но такая вещь недоступна. (как также объясняется в это сообщение на форуме )

Мой второй путь пришел из следующей статьи : я могу зарегистрироваться в событии 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. Вот пример события Send.

// 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

 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top