Как избежать срабатываний системы безопасности при работе программ для Microsoft® Outlook® на Visual Basic
Экскурс в разработку приложений для Microsoft Outlook
Microsoft Outlook предоставляет программистам три набора интерфейсов:
- объектная модель Outlook (которую мы будем в дальнейшем называть OOM), имеющая как средства работы с хранилищами данных, так и позволяющая автоматизировать и управлять Outlook, например, добавлять свои элементы управления в меню и на панели управления Outlook
- CDO (Collaboration Data Objects) – высокоуровневый набор интерфейсов, позволяющий работать с системой электронной почты Outlook и в реализации для Microsoft Outlook являющаяся расширением над системой MAPI
- MAPI (Messaging Application Programming Interface) – предложенный Microsoft в начале 1990-x годов открытый интерфейс для систем электронной почты, также известный под названием Extended MAPI (для избежания путаницы с набором из 12 функций именуемом Simple MAPI).
Система безопасности Outlook закрывает методы OOM и CDO и не затрагивает методы MAPI, так как интерфейсы MAPI не доступны из скриптовых языков программирования (таких как Jscript и VBScript) и Visual Basic.
CDO, OOM и MAPI при работе с хранилищем данных Outlook оперируют одними и теми же наборами данных представленных различными объектами. Так, например, письмо электронной почты в CDO представлено объектом типа Message, в OOM - _MailItem, а в MAPI – объектом реализующим интерфейс IMessage. Свойства этих объектов, хотя и назваются по-разному, предоставляют доступ к одним и тем же данным. Так, адрес электронной почты отправителя письма доступен в CDO через Message.Sender.Address, в OOM – через свойство SenderEmailAddress объекта _MailItem, а в MAPI – через свойство PR_SENDER_EMAIL_ADDRESS объекта, реализующего интерфейс IMessage.
И если обращение к свойствам Message.Sender.Address или _MailItem.SenderEmailAddress вызывает срабатывание системы безопасности, то обращение к свойству PR_SENDER_EMAIL_ADDRESS объекта MAPI такого срабатывания не вызывает.
К счастью для программистов на Visual Basic, и в объектах CDO, и в объектах OOM есть свойство MAPIOBJECT, содержащее ссылку на интерфейс соответствующего данному объекту интерфейса MAPI. Свойство MAPIOBJECT появилось в OOM и в CDO начиная с Microsoft Outlook ’98. В статье Microsoft под номером 296483 говорится, однако, что свойство MAPIOBJECT объектов OOM присутствует только для совместимости с CDO, и это свойство является “hidden property of Outlook Object Model objects, and is not meant to be used from the Outlook object”. Но нам не известно о практических ограничениях использования этого свойства в OOM за исключением тех, о которых говорится в данной статье.
Итак, спасительные интерфейсы MAPI совсем рядом – как же ими можно воспользоваться?
|
|