Получить именованное свойство MAPI из MailItem в C#
Я разрабатываю пользовательский плагин для Outlook 2010 в C#. Я впервые использую C# (обычно я Java-парень).
В сообщении есть именованное (настраиваемое) свойство MAPI, к которому я хотел бы получить доступ, и у меня возникают проблемы при этом. Насколько я понимаю, в Outlook 2007 был представлен объект PropertyAccessor, который обеспечивает легкий доступ к именованным свойствам MAPI. Я следовал инструкциям из следующей документации:
http://msdn.microsoft.com/en-us/library/ff868915.aspx
Я вижу указанное свойство MAPI, к которому я хочу получить доступ, в сообщении с помощью Outlook Spy. Из Outlook Spy я могу получить следующую информацию о собственности:
GUID: {00020329-0000-0000-C000-000000000046}
Tag num: 0x80BE0102
ID: PR.AFU.MESSAGE.RETRIEVE.INFO
Type: PT_BINARY
Поэтому я попробовал следующий код (объект mail является допустимым экземпляром MailItem):
mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102");
Это производит следующее исключение:
The property "http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102" is unknown or cannot be found
Поэтому мне интересно, как на самом деле получить эту собственность? Я неправильно формирую ссылку на пространство имен? Или мне нужно использовать подход, описанный в этом примере:
http://www.outlookcode.com/codedetail.aspx?id=1112
Насколько я понимаю, это было необходимо только для версий Outlook, выпущенных до 2007 года. Любая помощь высоко ценится!
4 ответа
OutlookSpy предоставит вам имя свойства DASL в поле редактирования DASL в окне IMessage.
OutlookSpy (я его автор) предоставит вам имя свойства DASL в поле редактирования DASL в окне IMessage (выберите сообщение с установленным свойством, нажмите кнопку IMessage, выберите свойство, посмотрите на поле редактирования DASL)
Microsoft MFCMapi также является отличным инструментом для поиска DASL и просмотра всех свойств MAPI.
Что произойдет, если вы попробуете
mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x80BE0102");
?