Для моей надстройки Outlook мне нужно обрабатывать электронные письма, вычислять уникальный хэш и хранить этот хэш на сервере/базе данных. Например :
Есть 4 пользователя:
- [email protected]
- [email protected]
случайный человек@gmail.com
Случай 1:
User1 отправляет письмо User2 и User3. Пользователь 2 хочет сохранить почтовый хэш на стороне сервера, поэтому он нажимает кнопку надстройки. Хэш вычисляется с помощью кода, подобного этому
var accessor = mailItem.PropertyAccessor;
var subject = accessor.GetProperty(_PR_SUBJECT_W_TAG).ToString();
var messageId = accessor.GetProperty(_PR_INTERNET_MESSAGE_ID_W_TAG).ToString();
var hash = CalulateHash(subject + messageId);
Этот хэш хранится на сервере. Если User3 попытается также сохранить хэш почты, он получит тот же хеш (поскольку тема и messageid должны быть одинаковыми ==> rfc822) и сервер знает, он уже получил этот хэш. Это работает очень хорошо.
Вариант 2: Пользователь 1 хочет отправить письмо Пользователю 2, Пользователю 3 и случайному человеку . Поскольку randomperson не принадлежит их компании, User1 хочет использовать функцию SendAndStore()
. Перед отправкой почты к новой почте добавляется настраиваемое свойство.
mailItem.UserProperties.Add("HandleAfterSent", MSOutlook.OlUserPropertyType.olText);
var aasProp = mailItem.UserProperties.Find("HandleAfterSent");
if (aasProp != null)
{
aasProp.Value = "some_value";
}
mailItem.Save();
SendMailItem(mailItem);
Кроме того, есть возможность получать уведомления, если в папку «Входящие» добавляется новый элемент. Итак, я наблюдаю за папкой sent.
inbox = outlookNameSpace.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail);
items = inbox.Items;
items.ItemAdd += OnInboxItemAdded;
Если почта отправляется через SendMailItem(mailItem);
, вызывается обработчик (тоже работает нормально). Но, к сожалению, у меня проблемы с вычислением хэша отправляемой почты, потому что у этой почты нет Message-ID. У кого-нибудь есть идея, как получить Message-ID почты, которая была отправлена только что. Я уже пытался установить Message-ID самостоятельно, но он переопределяется с сервера MS Exchange.
РЕДАКТИРОВАТЬ: Outlook находится в режиме кэширования. Мне нужна возможность получить Message-ID и для этого сценария.
EDIT2 (в дополнение к комментариям): Случай 3: randomperson хочет отправить письмо User1,User2 и Пользователь3. Поскольку randomperson не принадлежит их компании, User1 хочет использовать функцию StoreFromInbox()
. Письма в папке «Входящие» всех трех пользователей имеют одинаковый идентификатор сообщения. Но у них разные _PR_SEARCH_KEY_ , поэтому мы не можем использовать это свойство.