Свойства и методы приложения Outlook

Обновлено: 20.11.2024


Эта работа находится под лицензией
Creative Commons License.

Обновить! Эта книга о программировании для Outlook 2007 теперь доступна в версии для Kindle.

Это старый проект, и я больше не работаю в этой области, но я сохраняю информацию здесь, потому что многие люди все еще интересуются ею. Если вам нужна помощь в решении проблем с Outlook, см. раздел Ищете справку по Outlook? для предложений. И спасибо за визит! Надеюсь, вы ознакомитесь с некоторыми из моих текущих проектов и интересов.

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

Microsoft Outlook 2007 Programming Сью Мошер раскрывает гибкость Outlook 2007, позволяя администраторам и конечным пользователям настраивать Outlook так же, как они использовали макросы и шаблоны для настройки других приложений, таких как Excel и Слово. Сетевые администраторы научатся создавать собственные формы Outlook и создавать отчеты по ключевым параметрам Outlook. Опытные пользователи узнают, как VBA может автоматизировать повторяющиеся задачи и адаптировать функциональность Outlook к своим собственным процедурам.

Microsoft Outlook 2007 Programming Сью Мошер раскрывает гибкость Outlook 2007, позволяя администраторам и конечным пользователям настраивать Outlook так же, как они использовали макросы и шаблоны для настройки других приложений, таких как Excel и Слово. Сетевые администраторы научатся создавать собственные формы Outlook и создавать отчеты по ключевым параметрам Outlook. Опытные пользователи узнают, как VBA может автоматизировать повторяющиеся задачи и адаптировать функциональность Outlook к своим собственным процедурам.

ISBN: 1555583460, опубликовано Digital Press, ведущим издателем книг по Exchange, Outlook и другим вопросам обмена сообщениями. Другие ссылки для заказа:

Для удобства читателей исходный код примеров, включенных в книгу, доступен для загрузки здесь (ZIP-файл, 897 КБ).

VBA содержит 3 метода для получения доступа к Outlook из другой программы

Ограничение:
'CreateObject' не распознает имена типов Outlook, только константы Outlook.
Например. имя типа карты «PostIN» находится в VBA olFolderInbox; константа Outlook для этой карты равна 6.

Метод «ссылки»: не зависит от того, был загружен Outlook или нет.
вручную: VBEditor/ MenuBar / Extra / References / Microsoft Outlook 11.0 Object Library /check

В этом случае вы можете использовать как имена типов Outlook, так и константы Outlook.

В примерах на этой странице используется метод CreateObject.

' Удаленные элементы (olFolderDeletedItems)
' PostOUT (olFolderOutbox)
' Отправленные элементы (olFolderSentItems)
' PostIN (olFolderInbox)
' Календарь (olFolderCalendar)
' Контакты (olfolderContacts)
' Журнал (olFolderJournal)
' Заметки (olFolderNotes)
' Задачи (olFolderTasks)
' Напоминания
' Напоминания
' Черновики (olFolderDrafts)

c01 = .GetDefaultFolder(3).Name
c02 = .GetDefaultFolder(4).Name
c03 = .GetDefaultFolder(5).Name
c04 = .GetDefaultFolder(6). Имя
c05 = .GetDefaultFolder(9).Name
c06 = .GetDefaultFolder(10).Name
c07 = .GetDefaultFolder(11).Name
c08 = .GetDefaultFolder(12) ).Name
c09 = .GetDefaultFolder(13).Name
c10 = .GetDefaultFolder(14).Name
c11 = .GetDefaultFolder(15).Name
c12 = .GetDefaultFolder (16).Имя

Outlook имеет ряд стандартных элементов:
- электронная почта
- встреча
- контакт
- задача
- журнал
- заметка
- "наклейка" (Post-it)
- список рассылки

некоторые элементы являются связанными, например
- taskrequest
- Meetingrequest

Outlook различает сообщения электронной почты в соответствии с папками, в которых они хранятся:
- черновик сообщения: в папке Drafts GetDefaultFolder(16)
- сообщение электронной почты: на карте PostOUT GetDefaultFolder(4)
- отправлено электронная почта: на карте Отправленные элементы GetDefaultFolder(5)
- полученная электронная почта: на карте PostIN GetDefaultFolder(6)

' электронная почта (olMailItem)
' встреча (olAppointmentItem)
' контакт/получатель (olContactItem)
' задача (olTaskItem)
' журнал (olJournalItem)
' примечание (olNoteItem)
' наклейка (olPostItem)
' список рассылки (olDistributionListItem)

.CreateItem(0)
.CreateItem(1)
.CreateItem(2)
.CreateItem(3)
.CreateItem(4)
.CreateItem (5)
.CreateItem(6)
.CreateItem(7)

Для каждого вида элемента внешнего вида все свойства будут показаны в VBA

Для каждого вида элементов прогноза будут обсуждаться наиболее распространенные действия:

- для создания нового элемента
- для чтения, адаптации, перемещения или удаления существующего элемента
- для фильтрации существующих элементов и чтения, адаптации, перемещения или удаления отфильтрованных элементов
- для поиска существующих элементов и чтения, адаптации, перемещения или удаления найденных элементов

d01 = ac.Application
d02 = ac.Class
d03 = ac.CopyLike
d04 = ac.Enabled
d05 = ac.MessageClass
d06 = ac.Name
d07 = ac.Parent
d08 = ac.prefix
d09 = ac.ReplyStyle
d010 = ac.ResponseStyle
d011 = ac.Session
/>d012 = ac.ShowOn

Черновики сообщений электронной почты появляются в результате нажатия кнопки "Сохранить" при создании нового сообщения электронной почты.
Пост будет автоматически сохранен в папке «Черновики»: GetDefaultFolder(16).

.subject = "controle"
.To = "snb@forum.eu"
.CC = "aaa@webforums.eu;bb@gmail.com;extra@planet.nl" < br />.Сохранить

.subject = "controle"
.To = "snb@forum.eu"
.BCC = "aaa@webforums.eu;bb@gmail.com;extra@planet.nl" < br />.Сохранить

Метод Recipients.Add можно применять только к существующим контактам в папке «Контакты».

.subject = "controle"
.To = "snb@forum.eu"
.Recipients.Add "aaa@webforums.eu;bb@gmail.com;extra"
.Сохранить

.subject = "controle"
.To = "snb@forum.eu"
.Recipients.Add( "aaa@webforums.eu;bb@gmail.com;extra" ).Type = 4
.Сохранить

.subject = "controle"
.To = "snb@forum.eu"
.Recipients.Add( "aaa@webforums.eu;bb@gmail.com;extra" ).Type = 3
.Сохранить

.subject = "controle"
.To = "aaa@webforums.eu"
.attachments.add "E:\OF\bestand1.xls"
.attachments.add " E:\OF\bestand2.xls"
.Сохранить

c00 = "controle" 'вы можете ссылаться на черновик сообщения электронной почты по его 'теме'.

CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(16).Items(c00).subject = "новая тема"

Если вы хотите применить код к нескольким элементам, вы можете использовать метод "Фильтр" или метод "Найти"

Для каждого InCreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(16).Items.Restrict("[Subject]='" & c00 & "'")

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(16).Items.Restrict("[Subject]='" & c00 & "'")

c00 = "управление"
c01 = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(16).Items.Restrict("[Subject]='" & c00 & "'")

При ошибке возобновить дальше

При ошибке возобновить дальше

.Find("[Subject]='" & c00 & "'").Move .Application.GetNamespace("MAPI").GetDefaultFolder(3)
Выполнять до Err.Number <>0

При ошибке возобновить дальше

При ошибке возобновить дальше

c00 = "управление"
c01 = "новая тема"

Выполнять до номера ошибки <>0

Сообщения электронной почты являются результатом нажатия кнопки "Отправить" при создании нового сообщения электронной почты.
Они будут автоматически сохраняться в папке PostOUT: GetDefaultFolder(4) до тех пор, пока не будут отправлены.

Вы можете найти электронное письмо по его теме

CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(4).Items(c00).subject = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(4).Items.Restrict("[Subject]='" & c00 & "'")

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(4).Items.Restrict("[Subject]='" & c00 & "'")

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(4).Items.Restrict("[Subject]='" & c00 & "'")

c00 = "управление"
c01 = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(4).Items.Restrict("[Subject]='" & c00 & "'")

При ошибке возобновить дальше

При ошибке возобновить дальше

.GetDefaultFolder(4).Items.Find("[Subject]='" & c00 & "'").Move .GetDefaultFolder(16)
Выполнять до Err.Number <>0

При ошибке возобновить дальше

При ошибке возобновить дальше

c00 = "управление"
c01 = "новая тема"

Выполнять до номера ошибки <>0

Папка «Отправленные электронные письма» является результатом отправки всех элементов в папке PostOUT на почтовый сервер.
Все элементы будут автоматически перемещены в папку Sent: GetDefaultFolder(5).

CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(5).Items(c00).subject = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(5).Items.Restrict("[Subject]='" & c00 & "'")

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(5).Items.Restrict("[Subject]='" & c00 & "'")

c00 = "управление"
c01 = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(5).Items.Restrict("[Subject]='" & c00 & "'")

При ошибке возобновить дальше

При ошибке возобновить дальше

.GetDefaultFolder(5).Items.Find("[Subject]='" & c00 & "'").Move .GetDefaultFolder(3)
Выполнять до Err.Number <>0

При ошибке возобновить дальше

При ошибке возобновить дальше

c00 = "управление"
c01 = "новая тема"

Выполнять до номера ошибки <>0

Полученные письма автоматически сохраняются в папке PostIN: GetDefaultFolder(6).

CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(6).Items(c00).subject = "новая тема"

Для каждого из них InWith CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(6).Items.Restrict("[Subject]='" & c00 & "'")

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(6).Items.Restrict("[Subject]='" & c00 & "'")

c00 = "управление"
c01 = "новая тема"

Для каждого в CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(6).Items.Restrict("[Subject]='" & c00 & "'")

При ошибке возобновить дальше

При ошибке возобновить дальше

.GetDefaultFolder(6).Items.Find("[Subject]='" & c00 & "'").Move .GetDefaultFolder(3)
Выполнять до Err.Number <>0

При ошибке возобновить дальше

При ошибке возобновить дальше

c00 = "управление"
c01 = "новая тема"

Выполнять до номера ошибки <>0

.items(1).SaveAs "G:\OF\" & .items(1).subject & ".msg",3
.items(1).SaveAs "G:\OF\" & .items(1).subject & ".txt",0

' CreateItem (olContactItem)
' CreateItem (2)
' GetDefaultFolder(olFolderContacts)
' GetDefaultFolder(10)
' GetDefaultfolder("Контакты")

c00 = "Jeroen Spoert" '= полное имя

c00 = "Джерун Спёрт"

.SaveAs "E:\" & .FullName & ".txt", 0
.SaveAs "E:\" & .FullName & ".rtf", 1
.SaveAs "E: \" & .FullName & ".oft", 2
.SaveAs "E:\" & .FullName & ".msg", 3
.SaveAs "E:\" & .FullName & ". vcf", 6

Библиотека Redemption состоит из двух семейств объектов: семейства объектов Safe*Item (перечисленных на этой странице), которые предназначены для использования вместе с существующей объектной моделью Outlook или кодом CDO 1.21, и RDO (объекты данных Redemption). которые предназначены для использования в качестве замены CDO 1.21 или объектной модели Outlook. В отличие от объектов объектной модели Outlook, объекты RDO можно использовать в службе.

Использование объектов выкупа

Искупление — это обычный COM-объект; после регистрации в системе он доступен для любого языка программирования (VB, VBA, VC++ и т. д.). Redemption использует расширенный MAPI (на который не влияет исправление безопасности, поскольку он недоступен для языков сценариев) для дублирования функций, заблокированных исправлением безопасности. Большинство объектов Redemption имеют свойство Item, которое должно быть установлено на элемент Outlook. После установки вы можете получить доступ к любым свойствам и методам, доступным в исходном элементе Outlook, как заблокированным, так и не заблокированным. Для заблокированных свойств и функций объекты Redemption полностью обходят объектную модель Outlook и ведут себя точно так же, как объекты Outlook без примененного исправления безопасности. Для свойств, не заблокированных исправлением безопасности, все вызовы свойств и методов перенаправляются в объект Outlook, который вы назначаете свойству Item. При таком подходе изменения в вашем коде минимальны: вы меняете только способ объявления объектов, но не остальной код, который фактически обращается к заблокированным и не заблокированным свойствам и методам.

dim SafeContact, oContact
set SafeContact = CreateObject("Redemption.SafeContactItem") 'Создать экземпляр Redemption.SafeContactItem
set oContact = Application.Session.GetDefaultFolder(10).Items(1) 'Получить элемент контакта из Outlook
SafeContact.Item = oContact 'установить свойство Item SafeContact на элемент контакта Outlook
MsgBox SafeContact.Email1Address 'получить доступ к свойству Email1Address из SafeContact, предупреждения не отображаются

Существуют соответствующие объекты для всех других элементов Outlook с заблокированными свойствами: SafeContactItem, SafeMailItem, SafeTaskItem, SafeJournalItem, SafeMeetingItem и SafePostItem . Ниже приведен полный список свойств и методов, которые непосредственно обрабатываются Redemption.

Ниже приведены примеры фрагментов кода до и после изменения. Код, выделенный красным цветом, соответствует разнице в коде между двумя версиями:

затемнить контакт
установить контакт = Application.Session.GetDefaultFolder(10).Items(1)

затемнить контакт как Outlook.ContactItem
set Contact = Application.Session.GetDefaultFolder(10).Items(1)

Контакт Outlook.ContactItem;
set Contact = Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts).Items.GetFirst();

Объявляйте Contact как Object, а не Outlook.ContactItem, если вы используете VB: хотя все объекты Safe*Item предоставляют все свойства и методы соответствующих элементов Outlook, они делают это динамически, когда вы назначаете элемент Outlook их свойству Item. - во время разработки компилятор будет жаловаться, что большинство свойств и методов не будут найдены, если вы объявите их как что угодно, кроме Object .

Свойства и методы объектов Redemption

Большинство объектов Redemption поддерживают те же свойства и методы, что и соответствующие собственные объекты Outlook. Эта поддержка является динамической: после того, как вы назначите свойство Item одного из объектов Redemption собственному элементу Outlook и попытаетесь получить доступ к любому свойству или методу, не поддерживаемому напрямую объектом Redemption, вызов прозрачно перенаправляется в объект Outlook. Например. если вы установите свойство Item для одного из почтовых элементов Outlook, а затем получите доступ к свойству Subject объекта Redemption, этот вызов будет перенаправлен и обработан объектом Outlook прозрачно. Такая динамическая привязка является причиной того, что вы должны объявлять все объекты Redemption как нетипизированные объекты, а не как типизированные объекты (например, Redemption.SafeMailItem): в противном случае компилятор будет жаловаться, что свойство или метод не найдены, даже если они будут разрешены просто в время выполнения.

Все свойства и методы, заблокированные исправлением безопасности, обрабатываются объектами Redemption напрямую, без доступа к объектной модели Outlook. Ниже приведен список таких свойств и методов:

Соответствующий объект Outlook

Свойство или метод

Должен быть установлен элемент Outlook, прежде чем будут доступны любые другие свойства или методы. Чтение/запись

разрешает доступ к RTF-тексту любого элемента. Чтение/запись

Сохранить элемент в указанном формате. Только тип = olTemplate(2), olMsg (3), olMsgUnicode (9), olTxt(0), olRtf (1), olRtfNoHeaders(1026), olVCard (6), olTNEF (1025), olRFC822 (1024), olMHTML ( 1027), olVCal (7), olICal (8) теперь поддерживаются, во всех остальных случаях вызов будет переадресован на исходный элемент Outlook.

Коллекция получателей такая же, как и для любого элемента Outlook. Только чтение

Коллекция вложений. Эта коллекция знает обо всех вложениях, как безопасных, так и небезопасных. Только чтение

Импорт файла в существующий элемент. Путь - полный путь к файлу, Тип - целое число; В настоящее время поддерживаются только типы olMSG (3), olTNEF (1025) и olRFC822 (1024). См. пример ниже

Возвращает или задает любое свойство расширенного MAPI, доступное для элемента. ПропТэг - целое число. Возвращает вариант типа, определяемый видом свойства (целое число, строка и т. д.). Чтобы узнать, какие свойства доступны для элемента, используйте OutlookSpy. Дополнительные сведения о расширенных свойствах MAPI см. в разделе Разные объекты погашения. См. также пример ниже.

Чтобы удалить свойство, установите для него значение Пусто, например. Fields(&H0037001E)=Пусто удаляет свойство PR_SUBJECT.

Копирует элемент Redemption (и, следовательно, соответствующий элемент Outlook) в любой другой элемент Outlook или CDO. См. пример ниже.

Возвращает идентификатор, подходящий для использования в коллекции Fields(), учитывая идентификатор GUID (в виде строки) и идентификатор (может быть целым числом или строкой). См. пример ниже. Обсуждение именованных свойств см. в разделе Расширенные свойства MAPI, особенно в разделе, посвященном именованным свойствам.

Код VBA позволяет отправлять электронные письма, проще всего это сделать с помощью Outlook.

Включение библиотеки Outlook

Как показано в библиотеках VBA, сначала необходимо включить справочную библиотеку, выполнив процедуру в формате Early Binding.

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

Не забудьте настроить учетную запись в Outlook, прежде чем запускать макросы.

Простое электронное письмо

Код для раннего связывания

В этом случае включите библиотеку Outlook, как описано выше.

Код для позднего связывания

Мы связываем значения с некоторыми свойствами объекта OutMail для построения электронной почты.

Метод .Display помогает в создании кода, так как он оставляет электронное письмо видимым для проверки, хотя для работы кода это не обязательно.

Если все в порядке, просто отправьте его получателю:

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

Затем у нас будет следующий процесс:

Электронное письмо с вложением и изображением

Мы можем создать макрос для отправки электронного письма с вложенным отчетом и его предварительным просмотром в виде изображения в теле сообщения.

Для этого упражнения у нас будет две рабочие книги: SalesReport.xlsx (отчет) и SendingEmail.xlsm (файл с макросом).

В модуле SendingEmail.xlsm мы можем добавить следующий код:

Обратите внимание, что в этом примере свойство WordEditor использовалось для выполнения задач, связанных с коллажем, в теле письма, в отличие от простого примера, продемонстрированного ранее.

Читайте также: