Идентификатор сообщения (PR_INTERNET_MESSAGE_ID_W_TAG) недоступен в обработчике событий после отправки электронного письма - PullRequest
0 голосов
/ 30 января 2019

У меня есть экземпляр Microsoft.Office.Interop.Outlook.Application, и я добавляю itemSendHandler к Application.itemSend

Application.itemSend += itemSendHandler

Я предполагаю, что внутри itemSendHandler электронное письмо уже должно быть отправлено и сообщениеИдентификатор должен существовать для электронной почты.Тем не менее следующий код выдает нулевое значение messageId:

private void itemSendEventHandler(object sentItem, ref bool Cancel)
}
    string PR_INTERNET_MESSAGE_ID_W_TAG = "http://schemas.microsoft.com/mapi/proptag/0x1035001F";
    PropertyAccessor propertyAccessor = ((MailItem)sentItem).PropertyAccessor;
    // This is null? Why?
    string messageId = (string)propertyAccessor.GetProperty(PR_INTERNET_MESSAGE_ID_W_TAG);
    ThisAddIn.attemptToReleaseComObject(propertyAccessor);   
{

Но когда я проверяю отправленный элемент сразу после этого, через код или с помощью инструмента (например, OutlookSpy или MFCMAPI), свойство существует.Почему messageId равен нулю во время обработки события отправки?

1 Ответ

0 голосов
/ 30 января 2019

Вам необходимо сохранить сообщение, прежде чем получить доступ к этому свойству.Даже в этом случае PR_INTERNET_MESSAGE_ID может быть недоступен в режиме кэширования - Outlook не будет синхронизировать элемент в папке «Отправленные» с его онлайн-репликой по соображениям производительности, и это свойство будет иметь только онлайн-версия сообщения.Вы можете открыть это сообщение в онлайн-режиме, используя Extended MAPI (C ++ или Delphi) или Redemption (любой язык), используя флаг MAPI_NO_CACHE, но в OOM это невозможно.

...