Элементы и папки Outlook. Невозможно переместить элементы outlook

Работа с элементами папок (почтовыми сообщениями, контактами, элементами Календаря и т.п.) - обычно самая важная часть программ, использующих объектную модель 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 = "[email protected]"

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

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, открыть (при помощи меню View ) окно Locals .

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

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

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

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

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

Основные возможности MicrosoftOfficeOutlook

Запуск Outlook

Элементы и папки Outlook

Завершение роботы с Outlook

Календарь

Изменение представления задач в Календаре

Контакты

Адресная книга и контакты

Просмотр папки или файла

Электронная почта

Как получить и просмотреть почту

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

Список использованной литературы

Основные возможности MicrosoftOfficeOutlook

Приложение Microsoft Outlook - мощный инструмент для организации индивидуальной и групповой работы на компьютере. Outlook представляет собой программу управления данными. Outlook может использоваться для документооборота, формирования задач и заданий группы, управления электронной почтой, планирования дел и собраний, ведения списка контактных лиц и дневника выполняемых действий. Некоторые возможности Outlook можно использовать с другими приложениями Office. В частности, можно добавить задачу, которую следует выполнить с документами Word и Excel, а также записывать сведения о работе, проделанной над любым документом. С помощью Outlook можно быстро выяснить, с какими документами, сколько времени и когда вы работали. Outlook позволяет создавать личные списки адресов, сохранять их, управлять массовой рассылкой для отправки сообщений или документов адресатам. Электронные сообщения могут создаваться в любой программе Office, включая Word, Excel, Access и PowerPoint. Эти сообщения удобнее отправлять в формате HTML, что делает их чтение возможным независимо от того, установлена ли на компьютере адресата соответствующая программа Office. Кроме того, для отправки файла, созданного в, любой программе Office как сообщения Outlook, не требуется выходить из этой программы. Outlook позволяет поддерживать базы данных таких информационных элементов, как заметки, адреса и телефоны корреспондентов, дневниковые записи и т.д. Приложение Microsoft Outlook относится к программам информационных менеджеров (ПИМ) и включает функции таких программ Microsoft, как Schedule Mail, Project, Microsoft Exchange и Explorer (Проводник Windows). Outlook состоит из следующих взаимосвязанных компонентов, в которых используется единообразная форма представления информации: Outlook сегодня - сводки событий; электронной адресной и телефонной книги (Контакты);Календаря; планировщика заданий (Задачи); журнала событий компьютера (Дневник); электронной почты; записной книжки (Заметки).

Запуск Outlook

Запуск программы можно осуществить несколькими способами.1. Нажмите кнопку Пуск и из пункта Программы выберите Microsoft Outlook.2. Дважды щелкните мышью по ярлыку Microsoft Outlook на рабочем столе.3. Нажмите кнопку MicrosoftOutlookна панели MicrosoftOffice. Откроется главное окно Outlook с открытой (по умолчанию) папкой Входящие, где хранится сообщение "Вас приветствует Microsoft Outlook " (рис.1).

Рис.1. Главное окно Microsoft Outlook

Главное окно Outlook очень похоже на окна других приложений. Оно состоит из строки заголовка, в которой отображается название открытой папки, а также стандартные кнопки сворачивания, разворачивания и закрытия окон. Ниже расположены строка меню и панель инструментов. Левая окно - панель с ярлыками папок, в ней находятся значки для быстрого доступа к ним. По умолчанию панель Outlook содержит три группы ярлыков: Ярлыки Outlook, Мои ярлыки и Другие ярлыки. Группа Ярлыки Outlook содержит следующие ярлыки; Outlook сегодня, Входящие, Календарь, Контакты, Задачи, Заметки, Удаленные. Группа Мои ярлыки содержит ярлыки: Черновики, Исходящие, Отправленные, Дневник, Обновление Outlook. Группа Другие ярлыки содержит ярлыки для работы с файловой структурой компьютера: Мой компьютер, Мои документы, Favorites (Избранное). Справа - панель со списком папок и панель просмотра информации, где отображается содержимое выбранной папки. Работа с панелью Список папок аналогична работе с Проводником Windows.

Элементы и папки Outlook

Основными единицами информации в Outlook являются элементы различных типов встречи, сообщения, заметки, контакты, задачи, пометки в Дневнике. Ontlook хранит элементы информации в папках, причем в одной папке могут храниться элементы только одного типа. Так, все заметки хранятся в папке Заметки, все задачи - в папке Задачи и т.д. Фактически Outlook организует базу данных этих элементов. Папка Outlook - это логическое хранилище информации, не связанное с физическим способом хранения информации на диске. Хотя все эти папки имеют имена, они не видны из программы Проводник Windows, поскольку вся информация Outlook хранится в едином файле на диске. При первом запуске Outlook пользователь имеет доступ к нескольким типам элементов информации. Outlook хранит эти элементы в следующих папках, которые содержатся в папке Личные папки. Outlook сегодня показывает сводку событий, произошедших и запланированных та день. На ней представлено число новых сообщений, перечислены встречи, запланированные на неделю, и задачи. Эта страница удобна для обзора текущего дня и предстоящей недели. Входящие содержит поступающие сообщения электронной почты и факсы. В Календаре отображаются собрания и напоминания о встречах, а также планируются встречи и собрания с другими пользователями. Можно установить вывод оповещения для элементов Календаря. Если оповещение установлено, то в заданное время на экране появляется окно с напоминанием о предстоящем событии или встрече. При планировании собраний имеется возможность просмотра сведений о занятости участников и выбора удобного времени. Также Outlook упрощает отслеживание ежегодных событий, например отпусков и дней рождения. Контакты Outlook используются для хранения имен, номеров телефонов и адресов деловых партнеров. Списки контактных лиц могут импортироваться в Outlook из других программ. Задачами, назначаемыми на рабочие дни, можно управлять с помощью служебных и личных списков задач Outlook. Можно установить важность задач, включить выдачу напоминаний о сроке завершения и обновлять сведения о ходе выполнения задачи. В Outlook выполняется отслеживание повторяющихся задач. Outlook также может использоваться для назначения задач другим пользователям и наблюдения за их выполнением. Заметки в Outlook облегчают создание и публикацию сведений, важных для вас и ваших сотрудников, а также управление этими сведениями. В папке Удаленные находятся все удаленные элементы. Черновики содержат черновики и сообщения, не готовые к отправке. Исходящие - сообщения и факсы, готовые к отправке, но еще не отправленные. Папка Отправленные содержит копии отправленных сообщений электронной почты. Дневник содержит ежедневные записи о личной деятельности. Запись в Дневнике автоматически создается при отправке и приеме электронных сообщений, работе в любом приложении Microsoft Office. Имеется возможность создавать любые записи вручную. Общий принцип работы с Outlook таков: открыв папку, нужно выбрать требуемый элемент и автоматически запустится обслуживающая его форма. Чтобы быстро найти элемент, не просматривая списки элементов Outlook, можно воспользоваться кнопкой Найти на панели инструментов. Эта команда позволяет выполнять поиск любых элементов Outlook, включая сообщения, встречи, контакты и задачи. Пользователь Outlook может задавать весьма разнообразные условия поиска, используя команду Расширенный поиск в меню Сервис. С помощью кнопки Организовать на панели инструментов можно упорядочить содержимое папок, установить свои правила обработки сообщений, даже оградить себя от нежелательных адресатов. Для каждой папки существует набор представлений - способов показа элементов на экране. Набор стандартных представлений включает: таблицу, временную шкалу, карточки и др., но можно создавать и свои собственные с нужными параметрами фильтрации, группировки и сортировки элементов, изменять шрифты представлений. Настройка параметров представления данных и режимов работы элементов Outlook осуществляется при нажатии соответствующей клавиши в диалоговом окне команды Параметры меню Сервис (рис.2).

Рис.2. Окно Параметры

Завершение роботы с Outlook

Для корректного закрытия Outlook выберите команду Файл, Выход и завершение команды.

Outlook сегодня

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

Рис.3. Окно Outlook сегодня

Для изменения настроек данного представления щелкните на поле Настройка "Outlook сегодня" в верхнем правом углу. Откроется окно настройки (рис.4). Назначения параметров настройки Outlook сегодня приведены в табл.1.



Рис.4. Настройка Outlook сегодня

Выбор задач, которые следует отображать

Стили

Таблица 1. Назначение параметров настройки Outlook сегодня

После внесения изменений в настройки нажмите кнопку Сохранить изменения в правом верхнем углу.

Обычный поиск в Outlook

Чтобы выполнить поиск в текущей папке или представлении, можно воспользоваться полем поиска на панели инструментов.

    Перейдите в папку или представление, в которых вы хотите выполнить поиск, например в представление "Почта", "Календарь" или "Люди".

    В правом верхнем углу окна Outlook в поле поиска введите искомое слово или фразу.

    Результаты поиска будут выведены на вкладке Поиск .

    Примечание: Для выполнения полного поиска всех файлов Outlook (независимо от папки или представления) выберите пункт все элементы . Этот параметр доступен во всех представлениях. Обратите внимание, что при каждом переключении представлений вам потребуется повторно ввести слова для поиска.

    Если вы являетесь участником программы предварительной оценки Office и используете номер сборки 16.18.181008 и более поздних версий, ваш поиск был усовершенствован и улучшен. Когда вы выберете поле поиска, вы увидите краткие предложения на основе последнего журнала поиска. Выберите любой вариант для быстрого результата.

    Выберите, где должна выполняться поисковая функция. Доступные параметры будут зависеть от того, в какой папке или представлении вы работаете.

  1. Завершив просмотр результатов поиска, на вкладке Поиск нажмите кнопку Закрыть Поиск .

    Примечания:

Поиск в элементе


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

Критерий поиска

Описание

Дополнительно

Текст, встречающийся в элементе в любом месте.

Отправитель сообщения.

Тема

Текст в теме сообщения.

Вложение

Наличие вложения у элемента или размер вложенного файла.

Кому

Получатели сообщения.

Получено

Дата получения сообщения.

Дата отправки

Дата отправки сообщения.

Важно

Уровень приоритета сообщения.

Не прочитано

Состояние прочтения сообщения.

Помечено

Состояние "К исполнению" сообщения.

  1. Примечание: Для некоторых критериев поиска нужно ввести дополнительную информацию.

    Чтобы изменить поиск, добавив или удалив критерии, выполните одно из указанных ниже действий.

29.10.2012 Роб Грейвилл

Многие пользователи Outlook искали способ перемещать сообщения после отправки. Обычно при этом применялись сложные процессы с временной синхронизацией и подверженные ошибкам вызовы, направленные к API-интерфейсам Windows через сторонние библиотеки DLL, такие как Outlook Redemption. Изучив проблему и проведя ряд экспериментов, я нашел два подходящих решения на основе макрокоманд Visual Basic for Applications (VBA)

* Два способа переместить почтовый элемент в пользовательскую папку после отправки.

* Решение на клиентской стороне, не зависящее от поставщика почтового сервера.

* Лучшие способы распространения кода VBA среди пользователей.

По умолчанию Microsoft Outlook сохраняет копии отправленных элементов в папке Sent Items («Отправленные»). Но типовой подход не всегда приемлем в компании, сотрудники которой ежедневно отправляют сотни почтовых сообщений. Часто сообщения электронной почты упорядочивают по темам или направлениям бизнеса. Этот метод отличается от сортировки по беседам, так как каждое направление бизнеса может содержать несколько потоков бесед. Распределять по папкам полученные сообщения достаточно просто; другое дело - отправленные сообщения. Основная трудность заключается в том, что несмотря на возможность переместить копию почтового элемента после отправки, в Outlook нет правила или параметра для перемещения самого отправленного элемента.

Ограничения подхода на основе правил

Как правило, если поведение программы не соответствует моим ожиданиям, я стараюсь найти программное решение. Но прежде чем вплотную заняться кодом VBA, рассмотрим параметры и правила электронной почты Outlook. Только исчерпав их возможности, следует начинать искать более сложные решения. Посмотрим, что можно сделать с помощью мастера Outlook Rules Wizard. Начиная с пустого правила, можно указать, следует ли применить правило к входящим или исходящим сообщениям, как показано на экране 1. После того, как выбраны критерии отбора сообщений, можно указать папку для копирования этих сообщений (экран 2).

Обратите внимание, что правило создает и перемещает копию сообщения; оригинал остается в папке Sent Items. Единственный способ решить проблему - снять флажок Save copies of messages in Sent Items folder («Сохранять копии сообщений в папке «Отправленные"») в разделе Message handling («Обработка сообщений») в окне E-mail Options («Параметры почты»), как показано на экране 3. Недостаток данного подхода в том, что Outlook не может сохранять копии любых отправленных сообщений, и пользователь лишается доступа ко всем отправленным сообщениям, на которые не распространяется это правило.

Решение VBA: используем события Send почтового элемента

Разочаровавшись в правилах и параметрах, я засучил рукава, приготовил кофе и взялся за работу.

Как и мои предшественники, пытавшиеся решить эту путаную задачу, я начал с события MailItem_Send(). Такой подход кажется естественным: вы отправляете почтовое сообщение, а затем перемещаете его. Единственная проблема: сообщения не перемещаются в папку Sent Items до тех пор, пока не завершится событие Send. Поэтому любая попытка обнаружить сообщение в папке Sent Items оказывается бесплодной.

Куда поместить код?

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

Я вспомнил о событии ItemAdd() папки назначения. Оно возникает всегда, когда в коллекцию Items добавляется один или несколько элементов. Но по зрелом размышлении я понял, что этому событию свойственны те же проблемы временного согласования, что и событию MailItem_Send(). Кроме того, необходимо дублировать программный код для всех папок назначения. Дублировать исходный текст не годится, забудьте об этой идее.

Похоже, событие MailItem_Send() было оптимальным выбором благодаря возможности применить правило ко всем исходящим сообщениям. Нужно лишь подойти к решению проблемы с другой стороны.

Фильтрация сообщений по критериям

В идеальном мире можно вызвать макрокоманду VBA из правила. В результате фильтрация почты выполняется правилом, а макрокоманда перемещает сообщение. В Outlook 2002 появилась возможность запустить сценарий по прибытии входящих сообщений, но, к сожалению, она не распространяется на исходящие сообщения. Не расстраивайтесь: это не самый эффективный способ запуска сценария. Я испробовал его несколько раз и выяснил, что он очень ненадежен. Время от времени возникают ошибки и правило деактивируется. Лучше организовать фильтрацию непосредственно в событии oMsg_Send().

Предположим, вам требуется переместить все сообщения, адресованные нескольким корреспондентам в компании RobGravelleAndCo.com, в папку Outlook с именем FOSS Export (CR-035), как показано на экране 4. Объект Recipients содержит коллекцию элементов Recipient, каждый из которых включает свойства и методы, связанные с одним получателем. Одно из свойств Recipient - объект AddressEntry, в котором содержатся сведения об адресе получателя, в том числе адрес электронной почты. У Recipient есть свойство, именуемое Address для адреса электронной почты. Это свойство задействовано в исходном тексте oMsg_Send с меткой B .

Экран 4. Папки Outlook

Вместо того чтобы пытаться вручную удалить сообщение после отправки, можно присвоить флагу DeleteAfterSubmit почтового элемента значение true, чтобы это сделала программа Outlook. Просто помните, что установка флага DeleteAfterSubmit из диалогового окна MailItem Properties приведет к удалению всех отправленных сообщений! Это радикальное решение, хотя требуется всего лишь переместить определенные сообщения.

Нельзя перемещать сообщение из события MailItem_Send(), так как оно еще не обработано программой Outlook. Попытка сделать это приведет к ошибке времени выполнения. Как утверждают в Microsoft, предпочтительный способ управлять этой тонкой операцией - сначала клонировать сообщение с помощью функции Copy(), затем переместить клон. Это действие нельзя назвать истинным перемещением сообщения, но результат тот же: после перемещения клона исходное сообщение удаляется благодаря флагу DeleteAfterSubmit.

После этого нужно получить ссылку на соответствующую папку. Для работы с особыми папками требуется немного больше усилий, чем при использовании стандартных папок Outlook. Нельзя просто ввести имя папки для вызова функции GetFolder (такой нет). Вместо этого нужно перейти к специальной папке из одной из стандартных папок. В нашем случае папка FOSS Export (CR-035) параллельна папке Inbox («Входящие») в корневом почтовом ящике. Чтобы получить ссылку на стандартную папку Outlook, просто вызовите функцию Application.Session GetDefaultFolder() с одним из значений перечисления библиотеки olDefaultFolders. Например, следующий код извлекает Inbox:

Set olInbox = Application.Session.GetDefaultFolder(olFolderInbox)

Можно добраться до нужной папки с помощью кода:

Set oBusinessFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent.Folders(BUSINESS_FOLDER)

BUSINESS_FOLDER - константа для имени папки. oBusinessFolder можно напрямую передать в подпрограмму MailItem.Move(), как требуется для объекта MAPIFolder. Аналогичным образом можно получить вложенную папку с помощью свойства коллекции Folders:

Set ObjFolder = Application.Session.GetDefaultFolder(olFolderInbox).Folders("»)

Visual Basic Editor

Все приложения Microsoft Office поставляются с полнофункциональной средой разработки, именуемой Visual Basic Editor. Она обеспечивает интерфейс для доступа к объектным моделям приложения через программный код. В результате пользователь может вызывать методы объектов, задавать методы объектов и отвечать на события объектов. Для этих целей используется код VBA, особое подмножество языка Visual Basic.

Для доступа к Visual Basic Editor и другим инструментам разработки на ленте Office имеется вкладка Developer («Разработчик»). Но по умолчанию эта вкладка отключена, чтобы уменьшить уязвимость для вирусов и других вредоносных программ. Прежде чем воспользоваться этой вкладкой, необходимо выполнить следующие шаги.

1. В Outlook выберите Outlook Options («Параметры Outlook») на вкладке File («Файл»), чтобы открыть диалоговое окно Outlook Options.

2. В диалоговом окне Outlook Options нажмите кнопку Trust Center («Центр управления безопасностью»).

3. Щелкните Trust Center Settings («Параметры центра управления безопасностью»), а затем выберите параметр Macro Settings («Параметры макросов») слева.

4. Выберите удобный уровень безопасности Macro, с учетом того, что этот параметр влияет как на ваши, так и чужие макрокоманды. Если разрешить все макрокоманды, то Outlook будет отображать приглашение каждый раз при запуске макрокоманды. Таким образом, пользователь может решить, нужно ли запускать макрокоманду. Этот режим называется Notifications for all macros («Уведомления для всех макросов»).

5. Перезапустите Outlook, чтобы изменения вступили в силу.

Кнопка Visual Basic, которую мы видим на экране 5, находится на дальнем левом краю вкладки Developer. На экране 6 показан Visual Basic Editor.

Событие MailItem Send()

Чтобы события объекта были доступны в раскрывающемся списке Declarations («Объявления») в Visual Basic Editor (экран 7), нужно воспользоваться ключевым словом WithEvents для объявления объекта.

Следующие объявления объектов позволяют обратиться к событию MailItem Send():

Public WithEvents oInspectors As Outlook.Inspectors Public WithEvents oMsg As Outlook.MailItem

Коллекция Inspectors содержит объекты Inspector для всех открытых инспекторов (то есть окно, в котором отображается информация об элементе Outlook). Ссылка на коллекцию Inspectors задается в событии Application_StartUp():

Private Sub Application_Startup() Set oInspectors = Application.Inspectors

End Sub

Привязка oMsg к текущему инспектору

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

Inspector, переданный подпрограмме, имеет свойство CurrentItem, которое относится к элементу, просматриваемому пользователем. Проверив свойство Class этого элемента, можно определить, действительно ли это почтовый элемент. Для такой цели можно воспользоваться константой с именем olMail. Также необходимо проверить уникальную строку идентификатора, которую поставщик хранилища Messaging API (MAPI) назначает при создании элемента в хранилище. Поэтому свойство EntryID назначается элементу Outlook только после того, как элемент сохранен или отправлен. Эта проверка, выполняемая фрагментом кода с меткой A в , отличает новые элементы электронной почты от существующих. Назначение почтового элемента таким способом приводит к возникновению его событий, в том числе события Send.

Событие oMsg_Send в действии

Я направил часть вывода в область проверки Immediate (она показана в нижней панели Visual Basic Editor на экране 6), чтобы протестировать процесс. Щелкните View на панели меню, а затем Immediate Window («Область проверки»), если она невидима. На экране 8 показаны типичные результаты в случае, если сообщение адресовано только проверяемому узлу. Это сообщение адресовано трем получателям: одному в поле To («Кому»), одному в поле CC («Копия») и одному в поле BCC («Скрытая»). Все три получателя содержались в коллекции получателей почтового элемента. Адрес BCC - RobGravelleAndCo.com, как показано на экране 9.

Последним тестом был ответ на это сообщение с удаленным получателем RobGravelleAndCo.com. Как и ожидалось, правило не переместило отправленный элемент, как показано на экране 10.

Альтернативное решение: использование события Items_ItemAdd папки Sent Items

Решение oMsg_Send - удачный выбор, если новые сообщения уже обрабатываются и необходимо ссылаться на Inspector нового элемента. Альтернативное решение помещает код в событие Items_ItemAdd() папки Sent Items. Исходный текст ThisOutlookSession для данного решения показан в .

Размещение основной логики в событии Items_ItemAdd() дает два преимущества. Во-первых, уменьшается размер исходного текста. Во-вторых, это очень эффективный способ. Все отправленные элементы оказываются в папке Sent Items, если только не созданы обходные правила или не снят флажок Save copies of messages in Sent Items («Сохранять копии сообщений в папке «Отправленные"») в окне E-mail Options («Параметры почты»). Обратите внимание, что оба решения применяются к одной учетной записи почтового ящика. Поэтому, если нужно сходным образом обработать несколько почтовых ящиков, следует присоединить обрабатывающий код к каждому событию папки SentItems, как показано в .

Получение доступа к событию Items_ItemAdd() папки Sent Items

Событие ItemAdd() является членом объекта коллекции Items, поэтому необходимо использовать ключевое слово WithEvents в верхней части модуля ThisOutlookSession для объявления объекта типа Items:

Public WithEvents olSentItems As Items

Здесь же находится информация бизнес-папки. Если ожидается большой объем электронной почты, связанный с определенным направлением деятельности, то полезно создать глобальную ссылку на эту папку, как показано во фрагменте с меткой A в . Как и ранее, ссылки на объект назначаются в событии Application_StartUp(). Как показано во фрагменте с меткой B , ссылка на бизнес-папку дана в связи с папкой Sent Items (то есть на одном уровне с папкой «Входящие».)

Измененный код правила

Устанавливать флаг DeleteAfterSubmit для создания копии почтового элемента более не требуется. Однако необходимо проверить тип Class элемента, так как параметр Item представляет собой универсальный объект. Объекты, отличные от сообщений электронной почты, такие как Meeting Item (элемент собрания), можно размещать в папке Sent Items. Я также предпринял дополнительный шаг для сохранения элемента в соответствующем объекте MailItem, чтобы активизировать функцию автозавершения среды разработки. Этот шаг можно пропустить, если точно известны свойства, к которым требуется получить доступ.

Событие oSentItems_ItemAdd в действии

И вновь я направил вывод в область проверки для тестирования решения Items_AddItem; оно функционировало исправно. Например, на экране 11 показано сообщение, адресованное только узлу, для которого проводится проверка. Сообщение на экране 12 адресовано лицу, которое не является членом домена RobGravelleAndCo.com. Как ожидалось, вывод поступал только от почтовых элементов.

Добавление других типов элементов не составляет труда; просто измените инструкцию If в Select Case и укажите целевые типы в списке с разделителями запятыми, как показано в .

Запуск макрокоманды Move Sent MailItems по требованию

Установленную макрокоманду Move Sent MailItems можно применить к ранее отправленным сообщениям. Для этого используйте диалоговое окно Macros (макросы), открываемое нажатием кнопки Macros на ленте. Единственная проблема в том, что открывается доступ только к общедоступным макрокомандам, к которым наша макрокоманда не относится. Даже если можно увидеть событие ItemAdd папки SentItems, обрабатывается только последнее отправленное сообщение. Поэтому необходимо добавить общедоступную подпрограмму для обработки каждого элемента в папке SentItems, как показано во фрагменте исходного текста с меткой C . Затем можно открыть диалоговое окно Macros, выбрать новую общедоступную подпрограмму (если она еще не выбрана) и нажать кнопку Run («Выполнить»), чтобы запустить ее.

Простота и безопасность

Итак, в этой статье я рассказал о том, как использовать программный код VBA для расширения возможностей встроенных правил и параметров Outlook 2010. В частности, здесь показано два способа перемещения почтовых элементов в папку пользователя после отправки. Описанный метод гораздо безопаснее и проще многих решений, в которых применяются сложные процессы с временной синхронизацией, подверженные ошибкам вызовы Windows API или сторонние DLL-библиотеки. На клиентской стороне решение не зависит от поставщика почтового сервера и не привязано к Exchange Server. Более того, оно применимо для компании с любым количеством пользователей - от 50 до 5000.

Остается лишь найти оптимальный способ распространения кода VBA. Сделать это можно по-разному, причем в одних случаях требуется содействие пользователей, а в других можно действовать дистанционно:

* использовать команду File | Export (Файл | Экспорт) в VBA-среде Outlook для экспорта модулей как файлов. bas,. cls или. frm;

* копировать файл VbaProject.otm с компьютера, на котором были подготовлены макрокоманды, на компьютеры других пользователей, заменив существующий файл VbaProject.otm;

* использовать мастер Office Profile Wizard (Proflwiz.exe) для распространения проекта VBA.

Дополнительные сведения об этих методах можно найти в статье "To Distribute Microsoft Outlook VBA Code to Other Users» (http://www.outlookcode.com/article.aspx?id=28).

Добрый день уважаемые читатели, вот и закончился мой отпуск, выйдя на работу я сразу окунулся в нее с первых дней, и эти дни принесли интересный материал для моего блога, а именно меня не перестает радовать программный продукт компании Microsoft, MS Office 2013-2016, а еще точнее, почтовый клиент outlook. Сегодня он у одной сотрудницы показал ошибку при попытке переместить письмо "", давайте посмотрим, как все это дело решается.

Ошибка перемещения писем в Outlook

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

Невозможно переместить элементы. Элемент невозможно переместить. Он уже был перемещен или удален, либо был запрещен доступ, либо сервер недоступен .

Самое интересное, что письмо в этот момент переместилось в нужную папку, но и оставило дубль на старом месте. Начав изучение данного вопроса, однозначного ответа на него найти, сразу не удалось, многие из них сводились к настройкам на Exchange сервере, но у меня-то это просто IMAP ящик в программе Microsoft Outlook. Не буду вас томить с ответом и сразу расскажу решение, тут все дело в повредившемся файле ost, который мы будем восстанавливать.

Нам поможет утилита SCANPST.EXE. Вот пути расположения данной утилиты для разных версий Outlook:

  • Outlook 2016: C:\Program Files (x86)\Microsoft Office\root\Office16
  • Outlook 2013: C:\Program Files (x86)\Microsoft Office\Office15
  • Outlook 2010: C:\Program Files (x86)\Microsoft Office\Office14
  • Outlook 2007: C:\Program Files (x86)\Microsoft Office\Office12

Запускаем SCANPST.EXE, в открывшемся окне нужно пройти несколько этапов. На первом из них, вам необходимо выбрать ваш файл профиля pst или ost, через кнопку "Обзор"

Нажимаем начать и у вас стартует процесс восстановления и исправления ошибок.

Вам необходимо пройти 8 этапов, по прошествии которых вы получите результат работы, учтите, что время обработки сильно зависит от:

  • Размера файла outlook , который может достигать и 50 гб
  • Скорости работы вашего жесткого диска

Как видите у меня обнаружились ошибки, нажимаем восстановить.