MAPILab
EnglishDeutschRussian
Вы здесь: Главная / Техническая поддержка / FAQ и статьи / Как избежать срабатываний системы б...

Как избежать срабатываний системы безопасности при работе программ для Microsoft® Outlook® на Visual Basic

Введение в MAPI

Мы не будем пытаться описывать в этом разделе архитектуру MAPI или особенности ее реализаций (вы можете найти это во многих других источниках, в том числе в MSDN), а сосредоточимся на практических приемах использования MAPI в контексте данной статьи.

Для практического изучения MAPI мы воспользуемся условно-бесплатным плагином OutlookSpy, который можно загрузить с сайта www.dimastr.com. Установите плагин, и вы получите великолепную возможность исследовать как объектную модель Outlook, так и CDO.

IMessage Properties

Откройте какое-нибудь письмо, нажмите на панели инструментов OutlookSpy кнопку CurrentItem и перед вами предстанет объект _MailItem, представляющий письмо в OOM. Найдите свойство MAPIOBJECT, щелкните по нему и нажмите кнопку “Browse” – и OutlookSpy покажет Вам интерфейс IMessage соответствующего объекта MAPI.

Интерфейс IMessage реализует следующие методы:

GetAttachmentTable Returns the message's attachment table.
OpenAttach Opens an attachment.
CreateAttach Creates a new attachment.
DeleteAttach Deletes an attachment.
GetRecipientTable Returns the message's recipient table.
ModifyRecipients Adds, deletes, or modifies message recipients.
SubmitMessage Saves all changes to the message and marks it as ready for sending.
SetReadFlag Sets or clears the MSGFLAG_READ flag in the PR_MESSAGE_FLAGS property of the message and manages the sending of read reports.

Фактически, для нас письмо в MAPI представляется таблицей вложений, таблицей получателей и наборов свойств. Список свойств объекта можно получить вызовом IMAPIProp::GetPropList, а сами свойства – IMAPIProp::GetProps. То, что мы видем на закладке “GetProps” в OutlookSpy и предствляет собой результат работы этих двух функций.

Давайте рассмотрим поближе свойство PR_SENDER_EMAIL_ADDRESS, которое уже упоминалось выше. Тэг PR_SENDER_EMAIL_ADDRESS соответствует шестнадцатеричному числу &H0C1F001E, в котором младшая часть &H001E – это тип свойства PT_STRING8, означающей обычную ANSI-строку. С Visual Studio поставляются файлы MAPIDEFS.H и MAPITAGS.H, в первом находятся объявления типов свойств, а во втором – самих свойств. Эти файлы также включены в Microsoft Platform SDK.

Однако, не все свойства можно получить вызовом IMAPIProp::GetProps. Значения таких свойств как PR_BODY (тело письма) могут быть достаточно большими, и при вызове функции будет возвращен код ошибки MAPI_E_NOT_ENOUGH_MEMORY. Для получения значений таких свойств используется метод IMAPIProp::OpenProperty, который открывает свойство как поток (IStream).

Есть также свойства содержащие значения в компрессированном виде, например PR_RTF_COMPRESSED, содержащее компрессированное тело письма в формате RTF. При чтении такого свойства при помощи IMAPIProp::OpenProperty, значение будет загружено “как есть”. Для получения данных непосредственно в формате RTF, нужно для чтения потока воспользоваться функцией MAPI WrapCompressedRTFStream.

Итак, о свойствах объектов мы теперь знаем достаточно, чтобы получить адрес электронной почты отправителя или тело письма без срабатывания системы безопасности. Если, кончено, научимся работать с MAPI из Visual Basic.

Свойства MAPI объекта доступны для программистов на Visual Basic посредством CDO через коллекцию Fields. Поле ID объекта Field представляет собой не что иное, как тэг MAPI-свойства. Вы можете в OutlookSpy, добравшись до письма через CDO, перейти на закладку Script и выполнить следующий код на JScript:

for (a = 1; a <= Fields.Count; a++) { Debug.Print(a + " " + Fields.Item(a).ID + " " + Fields.Item(a).Name); Debug.Print(Fields.Item(a).Value); Debug.Print("=================================="); }

Этот код распечатает все свойства объекта, которые Вы видели изучая интерфейс IMessage и которые можно получить через IMAPIProp::GetProps. Однако во время исполнения этого кода Вы опять столкнетесь со срабатыванием системы безопасности.

Модуль поддержки
Оставить предложение
FAQ и статьи
Поиск на MAPILab.com:
Подпишитесь на нашу рассылку:
E-Mail:
© 2003-2008 OOO "МАПИЛаб". Все права защищены.

Microsoft®, эмблема Office, Microsoft® Exchange Server, Small Business Server, Microsoft® Outlook® и Microsoft® Office являются охраняемыми товарными знаками корпорации Майкрософт (Microsoft Corporation) в США и других странах.
Быстрый переход к разделам:

MAPILab Reports

Microsoft Outlook

Outlook Express

Microsoft Office

Продукты для SharePoint

Exchange Server

Cовместная работа

Разработчикам