Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование в Microsoft Office для пользователей
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

13.6 Коллекция Items и объекты элементов Outlook

Объекты Outlook.MailItem, Outlook.ContactItem, работа с сообщениями и контактами из VBA

Работа с элементами папок (почтовыми сообщениями, контактами, элементами Календаря и т.п.) — обычно самая важная часть программ, использующих объектную модель Outlook. Именно с ними и проходится выполнять различные операции.

Доступ к элементам папок чаще всего производится через свойство Items объекта папки, которое возвращает коллекцию Items. В этой коллекции находятся все элементы данной папки. Однако единого объекта для элементов Outlook не предусмотрено. Вместо этого в вашем распоряжении — 16 отдельных объектов для каждого вида элементов в Outlook:

  • AppointmentItem — то, что на графическом интерфейсе русского Outlook называется Встречей. Этот элемент обычно находится в папке Календарь.
  • ContactItem — это, конечно, контакт. Создавать новые контакты программным образом приходится очень часто.
  • DistList — это еще один элемент, который обычно находится в папке Контакты. Он представляет список рассылки.
  • DocumentItem — так в Outlook называется любой файл, который помещен внутрь хранилища Outlook и не совпадает по своему формату ни с одним другим элементом Outlook. Объектом DocumentItem может быть, например, документ Word, книга Excel, архив ZIP, файл Acrobat Reader PDF, исполняемый файл EXE и т.п. — в общем, любой файл операционной системы. Однако увлекаться хранением файлов в хранилищах Outlook (файлах PST и почтовых ящиках и общих папках Exchange Server), конечно, не стоит. Это замедлит доступ к обычным элементам Outlook. Такая возможность изначально была предусмотрена для того, чтобы, к примеру, в общей папке Outlook для проекта хранить вместе с перепиской по проекту еще и различные относящиеся к нему файлы.
  • JournalItem — это запись в дневнике.
  • MailItem — наиболее привычный многим элемент. Представляет сообщение электронной почты.
  • MeetingItem — приглашение на встречу, специальный тип электронного сообщения. Обычно встречается там же, где и обычные сообщения электронной почты, например, в папке Inbox. Создать программным образом этот элемент невозможно — он создается только автоматически при получение соответствующего сообщения (отправить его можно при помощи объекта Встреча в Календаре).
  • NoteItem — объект заметки (из папки Заметки). От всех других элементов отличается минимальным количеством свойств и методов.
  • PostItem — еще одна специальная разновидность почтового сообщения. Это — сообщение, которое отправлено в общую папку. От обычного объекта MailItem отличается тем, что:
    • встречается только в общих папках;
    • для отправки его вместо метода Send() используется метод Post().
  • RemoteItem — тоже очень специальная разновидность почтового сообщения. Эти объекты представляют из себя почтовые сообщения с минимальным количеством заполненных свойств (реально заполнена только информация о получателе, отправителе, дате получения и размере) и текстом сообщения, в котором находится 256 символов реального текста. Эти объекты создаются автоматически в тех ситуациях, когда Outlook подключается к почтовому ящику на сервере Exchange Server через соединение удаленного доступа (обычно коммутируемое). Если сообщение находится в файле OST (то есть скачано с того же сервера Exchange Server по MAPI или получено по POP3/IMAP4), то этот объект никогда для него не создается.
  • ReportItem — совсем специальное почтовое сообщение, представляющее собой специально сгенерированное служебное письмо: обычно сообщение о невозможности доставки (non-delivery report), созданное вашим почтовым сервером, задержке в передаче сообщения или другой ошибке. Эти объекты также нельзя создавать программным образом: они создаются только автоматически при получении сообщения определенного типа.
  • TaskItem — это задача или поручение из папки Задачи.
  • TaskRequestAcceptItem, TaskRequestDeclineItem, TaskRequestItem, TaskRequestUpdateItem — это всё специальные почтовые сообщения, которые относятся к переписке по поводу делегирования задач. Эти объекты также нельзя создавать программным образом.

Надо сказать, что в подавляющем большинстве случаев вас будут интересовать только объекты MailItem, ContactItem и иногда DocumentItem. На их рассмотрении мы и сосредоточимся.

Еще один очень важный момент. Как уже говорилось, в объектную модель Outlook встроены специальные ограничения, которые призваны не дать вирусам использовать возможности этой объектной модели в своих интересах. Как правило, это — самые важные свойства, в которых содержится информация об адресах электронной почты, имени отправителя, тексте писем и т.п. Эти ограничения встроены в следующие объекты: AppointmentItem, ContactItem, MailItem и TaskItem — проще говоря, во все основные объекты элементов Outlook. Ограничения наложены и на некоторые действия, которые могут выполняться с этими объектами, например, на отправку писем. Например, создание и отправка электронного сообщения средствами Outlook выглядит очень просто:

Dim oOutlook As New Outlook.Application

Dim oMessage As Outlook.MailItem

'Создаем объект сообщения

Set oMessage = oOutlook.CreateItem(olMailItem)

' Кому

oMessage.To = "Administrator@nwtraders.msft"

'Тема сообщения

oMessage.Subject = "Привет из VBA"

'Текст сообщения. Использование свойства Body означает, что мы посылаем сообщение

'обычным текстом. Можно также посылать сообщение в HTML или RTF

oMessage.Body = "Текст сообщения"

'Добавляем вложение

oMessage.Attachments.Add ("C:\installlog.txt")

'Отправляем сообщение

oMessage.Send

Однако, чтобы усложнить жизнь вирусам, вместо отправки сообщения появляется окно, аналогичное представленному на рис. 13.3. Более того, чтобы добиться окончательной победы над вирусами, еще и кнопка Да на протяжении нескольких секунд будет недоступна.

Рис. 13.3 Предупреждающее окно в Outlook

Что же делать в такой ситуации?

Варианты могут быть разными:

  • первый вариант — отправлять сообщение из макроса, который находится в модуле VBA самого Outlook (без программного открытия Outlook). В этом случае такое окно появляться не будет. Но, конечно, такое решение обычно не очень удобно, особенно с точки зрения переноса этого программного кода для запуска на разных компьютерах;
  • второй вариант — использовать специальные заменители объектов Outlook, которые не выдают таких сообщений и позволяют разработчикам отправлять сообщения из VBA без каки-то проблем. Самое распространенное и рекомендованное средство средство такого рода — бесплатный Outlook Redemption. получить информацию о нем и скачать его можно с сайта http://www.dimastr.com/redemption. Этот вариант вполне удобен, если вы занимаетесь рассылкой электронной почты с одного сервера, но устанавливать его на все компьютеры, конечно, хлопотно;
  • третий вариант — программным образом обнаруживать окна подтверждений и программно же нажимать в них нужные кнопки. Однако разработчики Microsoft позаботились о том, чтобы из кода VBA или VBScript сделать это было невозможно. В принципе, такие операции вполне можно выполнить при помощи низкоуровнего программного интерфейса Windows API (другой вариант — получить доступ к этим возможностям при помощи специальных средств специального программного интерфейса для работы с сообщениями MAPI). Однако вам придется использоваться вместо VBA другие изыки программирования (C++ или Delphi), поскольку VBA не поддерживает все нужные типы данных для работы с API. Кроме того, для уверенной работы с API требуются специальные знания в области системного программирования. Доолнительную информацию об использовании таких приемов при работе с Outlook можно получить из статьи http://www.mapilab.com/ru/support/articles/vb_outlook_security_1.html (на русском языке);
  • и, наконец, четвертый вариант, с моей точки зрения наиболее удобный: использовать для рассылки и программной обработки входящих писем объектную библиотеку CDO, которая есть на любом компьютере под управлением Windows 2000, XP и 2003. Подробнее о применении этой библиотеки рассказано в разделе 13.8.

Теперь о самих объектах элементов Outlook. Свойств и методов у этих объектов очень много (например, у объекта ContactItem свойств почти 100), и на рассмотрение их всех потребовалось бы очень много места. В то же время большинство свойств этих объектов очевидны и каких-то проблем при их использовании возникнуть не должно. Обычно единственный вопрос, который может возникнуть — какое программное свойство соответствует определенному атрибуту элемента.

К сожалению, макрорекордера в Outlook не предусмотрено, но понять, как называется то или иное свойство, можно при помощи окна Locals. Применение его может выглядеть так: представим себе, что вам нужно понять, какому программному свойству объекта ContactItem может соответствовать поле Краткое имя.

Первое, что нам нужно сделать — создать контакт, в котором было бы заполнено данное свойство (см. рис. 13.4).

Рис. 13.4 Создаем контакт

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

Dim oNamespace As NameSpace

Dim oFolder As MAPIFolder

Dim oContactItem As ContactItem

 

Set oNamespace = Application.GetNamespace("MAPI")

Set oFolder = oNamespace.GetDefaultFolder(olFolderContacts)

Set oContactItem = oFolder.Items("Контакт1")

Stop

Команда Stop здесь предназначена для того, чтобы остановиться в нужном месте.

Затем нужно запустить наш код на выполнение и, когда он остановится на строке Stop, открыть (при помощи меню View) окно Locals.

В нашем случае вы увидите в нем четыре объекта (см. рис. 13.5).

Рис. 13.5 Окно Locals с объектом контакта

Конечно же, нам нужно развернуть узел объекта oContactItem и поискать его свойство, для которого установлено значение Краткое имя. К своему удивлению, мы можем обнаружить, что это свойство называется EMail1DisplayName (см. рис. 13.6).

Рис. 13.6 Находим свойство с заполненным нами значением в окне Locals

Таким же образом можно находить нужные свойства и для других объектов Item.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru