Домой Цветы Метод forward в объектной модели outlook. Подключение к папке Контакты Microsoft Outlook. Некоторые особенности программирования в Outlook

Метод forward в объектной модели outlook. Подключение к папке Контакты Microsoft Outlook. Некоторые особенности программирования в Outlook

Объектная модель Microsoft Outlook реализована в виде набора объектов, собранных в библиотеке Outlook.

Объекты приложения Outlook

В табл. 21.3 приведено описание основных объектов из объектной модели Outlook.

Объект Тип Описание
Application Обьект Ссылается на активное приложение Microsoft Outlook. Используется для управления приложением
NameSpace Объект Объект представляет собой абстрактный корневой объект для любого источника данных
AddressLists (AddressLists) Семейство и объект Семейство объектов, представляющих адресные книги
Folders (MAPIFolders) Семейство и объект Семейство MAPIFolders объектов, которое представляет любую из доступных папок в их подмножестве на одном уровне дерева папок
Items (Item) Объект MAPIFolder
Links (Link) Объект Item Представляет объект item, который связан с другим объектом item
User Proper ties (UserProperty) Объект Item Данное семейство хранит информацию о нестандартных свойствах элемента Outlook, созданных пользователем
FormDescription Объект Item Этот объект хранит все стандартные свойства элемента Outlook
Actions (Action) Объект Item В этом семействе хранится информация об ассоциированных с данным элементом Outlook командах. Обратите внимание на то, что команды можно вывести, раскрыв в режиме конструктора вкладку Команды
Attachments (Attachment) Объект Item Семейство представляет все вложения в элементе
Recepients (Recepint) Объект Item Это семейство представляет информацию о получателях элемента Outlook
ReccurencePattern Объект Item Данный объект задает шаблон повторения для встреч и задач
Proper ty Pages (Proper tyPage) Семейство и объект Семейство объектов PropertyPage, которые содержат специальные вкладки со свойствами, добавленные к диалоговому окну Параметры в Outlook
LanguageSet tings Объект Предоставляет информацию о языковых настройках приложения
AnswerWizard Объект Соответствует мастеру ответов Microsoft Office. Все приложения Microsoft Office имеют ровно один мастер ответов, поэтому все изменения этого объекта отразятся на активном приложении
Assistant Объект Ссылается на объект, представляющий активного в данный момент Помощника Office
Search Объект Данный объект представляет как простой поиск, так и расширенный поиск
Reminders (Reminder) Семейство и объект Представляет окно Оповещения для всех напоминаний о встречах, задачах и т. д.
Explorers (Explorer) Семейство и объект Семейство объектов Explorer - набор всех окон, в которых отображается содержимое папки
Selection (Items) Объект Explorer Семейство всех отображаемых элементов в окне просмотра информации
CommandBars (CommandBar) Объект Explorer Представляет обычные и контекстные меню, а также панели инструментов объекта
Panes (Pane) Объект Explorer Семейство панелей (окон) Outlook для данного объекта Explorer
Inspectors (Inspector) Семейство и объект Семейство объектов Inspector - набор всех окон, в которых "отображаются элемен- ты Outlook. Элемент (item) - это основной модуль хранения данных в Outlook (подобно файлу в других программах). В число эле- ментов входят почтовые сообщения, встречи, контакты, задачи и т. д. (рис. 21.4)
WordEditor и HTMLEditor Объекты Представляют объекты, посредством которых выбираются редакторы для объекта Inspector
Pages (Page) Объект Inspector Каждый объект inspector связан со своим семейством Pages, в которое входят все обновленные пользователем страницы формы. Если в форму для элемента не вносились изменения, то семейство Pages является пустым
Item Объект Inspector Представляет стандартный элемент Outlook, расположенный в данной папке
MAPIFolder Объект Представляет папку Outlook

Таблица 21.3. Основные объекты Outlook

В табл. 21.4-21.6 представлено описание основных свойств, методов и событий объекта Application.

Рис. 21.1.

Таблица 21.4. Основные свойства объекта Application

Таблица 21.5. Основные методы объекта Application

Событие Описание
AdvancedSearchComplete Происходит, когда Расширенный поиск заканчивает свою работу
ItemSend Происходит, когда элемент посылается либо посредством Inspector, либо посредством метода Send
MapiLogonComplete Происходит, когда пользователь входит в систему
NewMail Происходит, когда одно или несколько почтовых сообщений приходит в папку Входящие
OptionPagesAdd Происходит, когда открывается диалоговое окно Параметры
Reminder Происходит непосредственно перед оповещением о встрече, задаче или собрании
Startup Происходит сразу после загрузки приложения Outlook
Quit Происходит, когда Outlook закрывается

Таблица 21.6. События объекта Application

Объекты MAPIFolderv и Mailltem

Поскольку в примерах этой главы и следующей используются свойства и методы объектов MAPIFolder и Mailltem, мы сочли необходимым привести их краткое описание.

Объект MAPiFoider, как было сказано выше, представляет папку Outlook. Объект MAPiFoider может содержать другие MApiFoider-объекты. В этом случае вы можете управлять доступом к вложенным папкам посредством комбинации Folder (индекс), где индекс возвращает объект MAPiFoider.

Outlook имеет специальный набор папок, которые поддерживают заданную по умолчанию функциональность Outlook. Для доступа к этим папкам следует Использовать метод GetDefaultFolder(индекс), где индекс - одна ИЗ констант olDefauitFoiders, например olFoiderinbox возвращает папку Входящие.

В табл. 21.7 приведены основные свойства объекта MAPiFoider, а в табл. 21.8 - его методы.

Таблица 21.7. Свойства объекта MAPiFolder

Таблица 21.8. Методы объекта MAPiFolder

Несколько слов об объекте Mailitem. Он представляет почтовое сообщение в папке Входящие (Inbox). Мы рассмотрим только необходимые для примера свойства и методы этого-объекта.

Свойство Messageciass возвращает или устанавливает класс сообщения для элемента Outlook. Свойство Messageciass связывает элемент с формой, на которой он основан. Когда элемент выбран, Outlook использует класс сообщения, чтобы поместить соответствующую форму и установить свойства элемента.

Свойство RecievedTime возвращает дату и время получения сообщения. Метод Display отображает новый объект inspector для выбранного элемента.

В программе 21.3 открываются все почтовые сообщения, поступившие за последние сутки.

Программа 21.3. Открытие почтовых сообщений

Sub openLastMail () Dim oa As Outlook.Application

Dim ns As NameSpace ; Dim fl As MAPiFolder Dim ob As Object Dim it As Mailitem

Dim i As integer

Set oa = CreateObject("OutLook.Application") Set ns = oa.GetNamespace("MAPI") Set fl = ns.GetDefaultFolder(olFolderlnbox) For i = 1 To f1.Items.Count Set ob = fl.Items(i) On Error GoTo nextitem If ob.MessageClass = "IPM.Note" Then Set it = ob If it.ReceivedTime > Date - 1 Then

it.Display (False) End If End If nextitem:

Замечание

Для семейств Outlook нельзя воспользоваться оператором For Each Next, поэтому применяется цикл For . . . Count.

Как и у всех приложений Office, на вершине объектной модели Outlook находится объект Application. Его можно использовать для запуска Outlook из внешних приложений. Отличительной особенностью объекта Application в Outlook является относительно небольшое количество свойств и методов (за счет того, что часть из них переехала в объект Namespace).

Наиболее часто используемые свойства объекта Application

- Explorers - это свойство возвращает коллекцию Explorers с объектами Explorer, каждый из которых представляет собой папку Outlook, открытую на просмотр пользователем. Назначение - проверка, не открыта ли уже пользователем в Outlook та или иная папка, и, в зависимости от результата, активизация этого окна (Explorer.Activate()) или его закрытие (Explorer.Close()).

- Inspectors - возвращает коллекцию Inspectors с объектами Inspector. Inspector представляют не открытые папки Outlook, как Explorer, а открытые на просмотр и редактирование элементы (например, почтовые сообщения).

- Reminders - позволяет вернуть коллекцию Reminders с объектами Reminder, представляющими текущие оповещения. Обычно это свойство используется для того, чтобы программным образом отключить все оповещения.

- Session - это свойство позволяет вернуть объект Namespace, представляющий пространство имен для текущего сеанса (т. е. пространство имен MAPI). Это свойство можно использовать вместо метода GetNamespace().

Методы

Методы с префиксом Active... - просто возвращают ссылку на активный в настоящее время объект Explorer или Inspector.

- AdvancedSearch () - очень важный метод. Он позволяет производить поиск по папкам Outlook (что на практике требуется достаточно часто).

- CopyFile () - позволяет скопировать файл с диска в папку Outlook. Можно использовать, например, для переноса всех файлов из каталога с документацией по проекту в общую папку Exchange Server или в библиотеку документов SharePoint Portal Server.

- CreateItem () - метод, который используется очень часто. Он позволяет создать новые элементы в Outlook.

- CreateItemFromTemplate () - точно так же создает новый элемент Outlook, но уже на основе шаблона Outlook в файловой системе - файла oft.

- GetNameSpace () - метод, который используется, наверное, в большинстве программ VBA в Outlook. Позволяет получить объект пространства имен MAPI.

- IsSearchSynchronous () - используется для проверки режима поиска

- Quit () - осуществляет выход из Outlook.

13.2. Некоторые особенности программирования в Outlook

Программирование в Outlook имеет ряд интересных особенностей, о которых необходимо упомянуть.

Первая особенность заключается в том, где именно хранятся программные модули Outlook, в которых мы создаем код. Как мы помним, в Word они хранятся вместе с документами (или шаблонами, например, Normal.dot), в Excel - в файлах рабочих книг, в Access - в файлах баз данных MDB.

В Outlook информация стандартных модулей хранится в файле личных папок PST, который по умолчанию создается в профиле данного пользователя.

В результате, с одной стороны, работа с программным кодом VBA в Outlook упрощается: для данного пользователя на этом компьютере он становится доступен из Outlook всегда. С другой стороны, становится труднее предоставить этот код в распоряжение другого пользователя. В этой ситуации можно использовать два выхода:

первый выход - воспользоваться средствами экспорта и импорта про-

граммных модулей , которые доступны из контекстного меню для модуля в

Project Explorer (рис. 13.2);

Рис. 13.2. Средства импорта и экспорта программного кода

второй выход - создать контейнерное приложение , например, файл

Word или книгу Outlook, из которого программным образом запускать Outlook и выполнять в нем необходимые действия.

Вторая особенность работы с VBA в Outlook заключается в том, что в Outlook реализована концепция пространства имен. Пространство имен в Outlook формально определяется как абстрактный корневой объект для любого источника данных (например, папки в почтовом ящике Exchange или PSTфайле на диске). Проще всего представить себе пространство имен Outlook как некий драйвер, который нужно использовать для подключения к данным. В настоящее время Outlook поддерживает только одно пространство имен -

MAPI (Messaging Application Programming Interface, интерфейс прикладного программирования для работы с сообщениями), но разработчики Outlook требуют, чтобы это пространство имен явно указывалось при выполнении самых разных операций. Подробнее про объект Namespace , представляющий пространство имен, будет рассказано вразд. 13.4 . Например, для запуска Outlook и открытия в нем папкиInbox (Входящие) из другой программы придется использовать следующий код (не забудьте подключить ссылку на библиотеку Microsoft Outlook 11.0 Object Library):

Set oNameSpace = oOutlook.GetNamespace("MAPI")

Set oInbox = oNameSpace.GetDefaultFolder(olFolderInbox) oInbox.Display

Третья особенность работы с Outlook заключается в некоторой терминологической путанице. Как правило, в документации по объектным моделям приложений Office термин Item (элемент) применяется к элементам коллекций. В Outlook он получает второе значение:Item - это все, что может храниться в папках Outlook: почтовые сообщения (объектMailItem ), контакты (объектContactItem ), встречи (объектAppointment ) и т. п. Не путайте!

У Outlook есть еще одна особенность. На протяжении многих лет Outlook была программой, которая первой подвергалась атакам вирусов, троянских программ и прочего вредоносного программного обеспечения, приходящего по электронной почте. Иногда такие атаки бывали успешными, и Outlook на компьютере пользователя сам начинал рассылать электронные письма с вирусами (в том числе и при помощи кода VBA). Чтобы снизить вероятность развития событий по такому сценарию, разработчики Outlook сознательно поместили в его объектную модель ограничения, которые должны препятствовать распространению вирусов. Иногда эти ограничения (у них есть специальное название - Outlook Object Model Guard ) мешают и нормальной работе программ VBA. О них будет рассказано в следующих разделах. Иногда по причине таких ограничений бывает удобнее использовать вместо объектной

Программирование в Outlook

модели Outlook библиотеку CDO, которая имеется на любом компьютере с

Windows 2000, XP или 2003.

Интересной особенностью Outlook является и то, что в отличие от других приложений Office вы не сможете напрямую (при помощи ключевого слова New или командыCreateObject() ) создать ни одного объекта Outlook, кромеApplication . Для создания всех остальных объектов придется использовать соответствующие методы уже созданных объектов.

На всякий случай также заметим, что макрорекордера в Outlook, как и в Access, к сожалению, нет. Всю необходимую дополнительную информацию вам придется искать при помощи документации.

13.3. Объект Application ,

его свойства и методы

Как и у всех приложений Office, на вершине объектной модели Outlook находится объект Application . Его можно использовать для запуска Outlook из внешних приложений (см. пример в предыдущем разделе). Отличительной особенностью объектаApplication в Outlook является относительно небольшое количество свойств и методов (за счет того, что часть из них переехала в объектNamespace ). Наиболее часто используемые свойства объектаApplication представлены далее.

Explorers - это свойство возвращает коллекциюExplorers с объектамиExplorer , каждый из которых представляет собой папку Outlook, открытую на просмотр пользователем. Основное назначение этой коллекции и объектовExplorer - проверка, не открыта ли уже пользователем в Outlook та или иная папка, и, в зависимости от результата, активизация этого окна

(Explorer.Activate()) или его закрытие (Explorer.Close()). Метод

ActiveExplorer() объектаApplication позволяет получить ссылку на окно, активное в настоящий момент, аGetExplorer() - получить ссылку на объектExplorer для указанной папки Outlook (без его автоматической активизации).

Inspectors - свойство, которое очень похоже наExplorers . Оно возвращает коллекциюInspectors с объектамиInspector . Главное отличие в том, что объектыInspector представляют не открытые папки Outlook, какExplorer , а открытые на просмотр и редактирование элементы (например, почтовые сообщения). ОбъектInspector используется для таких же проверок, что и объектExplorer , его свойства и методы почти полностью совпадают со свойствами и методами объектаExplorer . Для тех же целей преду-

смотрены и методы ActiveInspector()и GetInspector()объекта Application.

Reminders - позволяет вернуть коллекциюReminders с объектамиReminder , представляющими текущие оповещения. Обычно это свойство используется для того, чтобы программным образом отключить все оповещения:

Dim oOutlook As New Outlook.Application

Dim oReminder As Outlook.Reminder

For Each oReminder In oOutlook.Reminders

oReminder.Dismiss

Session - это свойство позволяет вернуть объектNamespace , представляющий пространство имен для текущего сеанса (т. е. пространство имен MAPI). Это свойство можно использовать вместо методаGetNamespace() . Подробнее про объектNamespace будет рассказано вразд. 13.4 .

Аналогичное свойство Session предусмотрено для самого объектаNamespace и для множества других объектов Outlook.

Теперь расскажем о методах объекта Outlook.Application .

Методы с префиксом Active... - просто возвращают ссылку на активный в настоящее время объектExplorer илиInspector .

AdvancedSearch() - очень важный метод. Он позволяет производить поиск по папкам Outlook (что на практике требуется достаточно часто). Подробнее про этот метод и сопутствующие ему объектыSearch иResults будет рассказано вразд. 13.7 .

CopyFile() - позволяет скопировать файл с диска в папку Outlook. Можно использовать, например, для переноса всех файлов из каталога с документацией по проекту в общую папку Exchange Server или в библиотеку до-

кументов SharePoint Portal Server.

CreateItem() - метод, который используется очень часто. Он позволяет создать новые элементы в Outlook. Например, создать новый элемент типа контакт, заполнить его свойства, сохранить, а затем открыть для просмотра можно так:

Dim oOutlook As New Outlook.Application Dim oContact As Outlook.ContactItem

Set oContact = oOutlook.CreateItem(olContactItem) oContact.FirstName = "Академия специальных курсов" oContact.Email1Address = "[email protected]" oContact.Save

13.3 Объект Application , его свойства и методы

Объект Outlook.Application, свойства и методы объекта Outlook.Application, отключение оповещений, создание контактов

Как и у всех приложений Office, на вершине объектной модели Outlook находится объект Application. Этот объект можно использовать для запуска Outlook из внешних приложений (см. пример в предыдущем разделе). Отличительной особенностью объекта Application в Outlook является относительно небольшое количество свойств и методов (за счет того, что часть из них переехала в объект Namespace). Наиболее часто используемые свойства объекта Application представлены ниже:

  • Explorers - это свойство возвращает коллекцию Explorers с объектами Explorer, каждый из которых представляет папку Outlook, открытую на просмотр пользователем. Основное назначение этой коллекции и объектов Explorer - проверка, не открыта ли уже пользователем в Outlook та или иная папка, и, в зависимости от результатов, к примеру, активизация этого окна (Explorer.Activate() или его закрытие (Explorer.Close()). Метод Application.ActiveExplorer() позволяет получить ссылку на окно, активное в настоящий момент, Application.GetExplorer() - получить ссылку на объект Explorer для указанной папки Outlook (без его автоматической активизации).
  • Inspectors - свойство, которое очень похоже на Explorers. Оно возвращает коллекцию Inspectors с объектами Inspector. Главное отличие - объекты Inspector представляют не открытые папки Outlook, как Explorer, а открытые на просмотр/редактирование элементы (например, почтовые сообщения). Объект Inspector используется для тех же целей (проверок), что и объект Explorer, его свойства и методы почти полностью совпадают со свойствами и методами объекта Explorer. Для тех же целей предусмотрены методы ActiveInspector() и GetInspector().
  • Reminders - это свойство позволяет вернуть коллекцию Reminders с объектами Reminder, представляющие текущие оповещения. Обычно используется для того, чтобы программным образом быстро отключить все оповещения:

Dim oReminder As Outlook.Reminder

For Each oReminder In oOutlook.Reminders

oReminder.Dismiss

  • Session - это свойство позволяет вернуть объект Namespace, представляющий пространство имен для текущего сеанса (читайте - пространство имен MAPI). Это свойство можно использовать вместо метода GetNamespace(). Подробнее про объект Namespace будет рассказано в следующем разделе.

Аналогичное свойство Session предусмотрено и для самого объекта Namespace, и еще для множества объектов Outlook.

Теперь - методах объекта Outlook.Application. Они представляют больший интерес:

  • методы Active…() просто возвращают ссылку на активный в настоящее время объект Explorer, Inspector или Window.
  • метод AdvancedSearch() - очень важный метод. Он позволяет производить поиск по папкам Outlook (что на практике требуется достаточно часто). Подробнее про этот метод и сопутствующие ему объекты Search и Results будет рассказано ниже.
  • CopyFile() - возможность просто скопировать файл с диска в папку Outlook. Можно использовать, к примеру, для переноса всех файлов из каталога с документацией по проекту в общую папку Exchange Server или в библиотеку документов SharePoint Portal Server.
  • CreateItem() - метод, который используется очень часто. Он позволяет создать новые элементы в Outlook. Например, создать новый элемент типа контакт, заполнить его свойства, сохранить, а затем открыть для просмотра можно так:

Dim oOutlook As New Outlook.Application

Dim oContact As Outlook.ContactItem

Set oContact = oOutlook.CreateItem(olContactItem)

oContact.FirstName = "Академия специальных курсов"

oContact.Email1Address = "info@сайт"

oContact.Save

oContact.Display

А теперь представьте, что вы создаете объекты контактов в цикле на основе записей из базы данных или строк в таблице Excel. Справочник контактов будет загружен в Outlook очень быстро и эффективно. Только не забывайте после каждого создания и сохранения контакта удалять его объект из оперативной памяти - иначе память на компьютере кончится и это приведет к ошибке!

  • CreateItemFromTemplate() - точно так же создается новый элемент Outlook, но уже на основе шаблона Outlook в файловой системе - файла.oft.
  • GetNameSpace() - метод, который используется, наверное, в большинстве программ VBA в Outlook. Позволяет получить объект пространства имен MAPI. Подробнее про работу с этим объектом будет рассказано в следующем разделе.
  • IsSearchSynchronous() - используется для проверки режима поиска (см. раздел про поиск в Outlook).
  • Quit() - просто выход из Outlook.

Работу с почтовой программой Outlook (к сожалению, только с полной программой Outlook, а не с используемой чаще Outlook Express) можно организовать с помощью серверов автоматизации OLE. Создание сервера осуществляется кодом:

Uses ComObj; var Outlook: OleVariant; Outlook:= CreateOleObject("Outlook.Application");

Далее в объекте Outlook можно использовать объекты, содержащиеся в Outlook. Application, их свойства и методы. Все их можно посмотреть во встроенной в программу Outlook справке по программированию. А общие принципы работы с серверами автоматизации OLE рассмотрены в разд. 6.1.3.

Как было показано в разд. 6.2 и 6.4, работа с серверами автоматизации OLE во многих отношениях удобнее, чем работа с серверами СОМ. Однако можно организовать работату с Outlook и на основе серверов СОМ. На странице Servers библиотеки имеется компонент Outlook Application - сервер СОМ программы Outlook. Для работы с ним просто надо перенести этот компонент на форму. Можно при этом установить в true его свойства AutoConnect и AutoQuit. Это обеспечит автоматическое подключение к Outlook при запуске приложения и автоматическое закрытие Outlook при завершении выполнения приложения.

Можно также программно создавать серверы СОМ в приложении, не используя компоненты страницы Servers:

Uses OleServer, OutlookXP; var Outlook: TOutlookApplication; Outlook:= TOutlookApplication.Create(Self) ;

Во всех вариантах приложение получит доступ к объектам, содержащимся в Outlook.Application, к их свойствам и методам.

Ниже приведен пример автоматического создания и отправки почтового сообщения с помощью сервера автоматизации OLE:

Uses ComObj, OutlookXP; var Outlook: OleVariant; Letter: OleVariant; Outlook:= CreateOleObject("Outlook.Application"); Letter:= Outlook.Createltem(olMailItem);

Letter.Recipients.Add("[email protected];[email protected]); // адресаты Letter.CC:= "[email protected]"; // адресат копии

Letter.BCC:= "[email protected]"; // адресат скрытой копии

Letter.Subject:= "Тест"; // тема письма

Letter.Body:= Memol.Text; // текст письма

{ Следующий оператор открывает окно Outlook с загруженным письмом, в котором пользователь может что-то поправить. Если это не требуется, следующий оператор можно удалить} Letter.Display; { Следующий оператор отправляет письмо. Если имеется предыдущий оператор, то пользователь может послать письмо из окна Outlook, так что в этом случае следующий оператор не нужен. Он требуется, если подразумевается автоматическая отправка писем. } Letter.Send; Outlook.Quit;

В оператор uses включена ссылка на модуль ComObj, необходимый в любых приложениях, использующих серверы автоматизации OLE (см. разд. 6.1.3). Модуль OutlookXP или Outlook2000 включается только для использования констант, встречающихся в коде. В версиях младше Delphi 2005 для использования этих констант вместо указанных модулей может подключаться модуль Outlook8.

Первый выполняемый оператор связывает функцией CreateOleObject переменную Outlook с почтовой программой. Второй оператор методом Createltem создает новый объект почтового сообщения Letter. О том, что создается именно почтовое сообщение, свидетельствует параметр olMailltem. Далее в список адресатов сообщения (свойство Recipients) добавляется два адреса: "[email protected]" и "[email protected]". В свойство СС заносится адрес получателя копии письма "[email protected]". В свойство ВСС заносится адрес получателя скрытой копии письма "[email protected]". В свойство Subject заносится тема сообщения. В свойство Body заносится текст сообщения из окна редактирования Memol.

Новое на сайте

>

Самое популярное