Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Тут мне понадобилось написать некий скрипт для обработки входящих сообщений в Microsoft Outlook. Подскажите как это делается и с чего начать. Thanks!
Всего записей: 167 | Зарегистр. 28-11-2002 | Отправлено:16:00 05-08-2003
zorrack
Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Я не уверен, что получится написать скрипт. Скорее, необходимо писать свой Add-in для Outlook. Вроде как на SourceForge были какие-то проекты (типа АнтиСпам фильтры) с исходниками.
Всего записей: 244 | Зарегистр. 16-05-2003 | Отправлено:14:40 06-08-2003
Fill747
———- Я бы сделал лучше, но мне помогали.
Всего записей: 1147 | Зарегистр. 03-02-2003 | Отправлено:09:22 19-08-2003
naPmu3aH
Из лесу вышел
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Fill747 ova
Private Sub Application_NewMail()
End Sub должно работать.
Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору naPmu3aH Спасибо, про этот сайт я уже давно знаю.
ova Я был не прав. Вот пример кода по материалам упомянутого выше сайта.
Private WithEvents olInboxItems As Items
Private Sub Application_Startup() Dim objNS As NameSpace
Set objNS = Application.GetNamespace(«MAPI») Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Items Set objNS = Nothing End Sub
Private Sub Application_Quit() Set olInboxItems = Nothing End Sub
Private Sub olInboxItems_ItemAdd(ByVal Item As Object) Dim objNS As NameSpace Dim objInbox As MAPIFolder Dim objTestFolder As MAPIFolder
If Item.Class = olMail Then If InStr(Item.Subject, «Test») > 0 Then Set objNS = Application.GetNamespace(«MAPI») Set objInbox = objNS.GetDefaultFolder(olFolderInbox) Set objTestFolder = objInbox.Folders(«TestFolder») If Not objTestFolder Is Nothing Then Item.Move objTestFolder End If End If End If
Set objTestFolder = Nothing Set objInbox = Nothing Set objNS = Nothing End Sub
———- Я бы сделал лучше, но мне помогали.
Всего записей: 1147 | Зарегистр. 03-02-2003 | Отправлено:14:39 19-08-2003
uken666
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору если можно, вопрос в догонку. Я сделал похожее с уведомлением, но конвертик в трее (в Оутлук 2003) не уходит, хотья и делаю письмо прочтенным. никто не знает, как до него программно добратся?
Всего записей: 2 | Зарегистр. 10-06-2004 | Отправлено:18:05 23-11-2005
Всего записей: 1147 | Зарегистр. 03-02-2003 | Отправлено:19:34 23-11-2005
volsk
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Помогите со скриптом. Сам в VBA пока плохо разбираюсь, другое учил.
Задача. В outlook приходит письмо примерно следующего содержания:
Дата: 11.03.2007 Время: 20:59:06 Модуль: 1 Ошибка: Обнаружен поток 2 в модуле 3 Код ошибки: 909, категория ошибки: 1
Задача: на основе отправителя «MP64-1Alarm@SMPAlarm» и чисел строки Ошибка: 2 и 3 составить другое письмо, где комбинаця 2 и 3 будут заменены словами, соответствующие этим числам и отправителю
числа хранить можно.. ну где проще для работы.. хоть в *.txt, лучше конечно в *.xls но необязательно.
от MP64-2Alarm@SMPAlarm поток модуль обозначение 1 1 слово_для_1_1 1 2 слово_для_1_2 1 3 слово_для_1_3 .
Как результат должны получить письмо со строкой слово_для_3_2 и отправить его списку получателей дальше.
Было бы отлично, если кто-нибудь помог с примерным кодом, хоть что и как делать. Или с инфой, где это почитать. Сам уже долго вожусь, а результата мало.
Всего записей: 9 | Зарегистр. 05-05-2006 | Отправлено:22:17 11-03-2007
volsk
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Это же просто, но я совсем не знаю синтаксиса VBS Набросайте хоть примерные команды плз.
Всего записей: 9 | Зарегистр. 05-05-2006 | Отправлено:17:46 13-03-2007
dad1969
Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Есть два вопроса по макросам для Outlook (у меня 2003): 1. Написал макрос для сохранения вложений из выделенных писем в заданную папку. Но! Среди прогнанных писем попались такие в которых в теле есть рисунки, и они тоже считаются вложениями, хотя в outlooke как вложения и не отображаются. В большинстве случаев их можно отфильтровать по Attachments.Item(i).Position. Однако иногда и у них занчение параметра равно 0 (как и у действительно вложений) и тогда отделить их от вложений не получается. Но сам outlook как-то понимает что это не вложения. Есть ли надежный способ чтобы выделить действительно вложения для сохранения? Мой код: Код:
Const DefFolder = «C:\»
Sub SaveAttachments() Dim objApp As Outlook.Application Dim objItem As Object Dim objSelection As Outlook.Selection Dim objMail As MailItem Dim AttFolder As String
Set objApp = CreateObject(«Outlook.Application») Set objSelection = objApp.ActiveExplorer.Selection
AttFolder = Trim(InputBox(«Задайте имя папки», «Сохранение вложений»))
If AttFolder <> «» Then AttFolder = AttFolder + «\»
Outlook содержит большой набор событий, с помощью которых можно сообщать программам Microsoft Visual Basic, Microsoft Visual Basic для приложений (VBA) и языку сценариев VBScript о значительных изменениях. Например, события Outlook могут уведомлять программу об открытии элемента или поступлении нового сообщения в папку «Входящие».
Типы событий
События Outlook можно разделить на две основные категории: события на уровне элементов и события на уровне приложения.
События на уровне элементов относятся к определенному элементу и обычно обрабатываются кодом VBScript, содержащимся в форме, связанной с элементом. Эти события уведомляют программу, когда элемент открывается, отправляется, публикуется, сохраняется или закрывается и когда пользователь отвечает на сообщение, перенаправляет его или запускает настраиваемое действие. События на уровне элементов также могут уведомить программу о щелчке пользователя по элементу управления в форме или изменении свойства элемента.
События на уровне приложения обычно обрабатываются с помощью Visual Basic или Visual Basic для приложений, так как они относятся к более сложным элементам, чем элементы, связанные с определенной формой. События на уровне приложения могут относиться к приложению, коллекциям и окнам проводника (включая панель ярлыков), коллекциям и окнам инспектора, папкам и коллекциям папок, коллекциям элементов и объектам синхронизации.
Реагирование на события
Чтобы реагировать на события уровня элементов, добавьте процедуры обработчика событий в сценарий формы, в которой они отображаются. Например, чтобы запустить код при открытии элемента в форме, добавьте в скрипт формы процедуру, аналогичную приведенной ниже.
Реагирование на события уровня приложения требует немного больше участия, так как необходимо выполнить действия для связи обработчика событий с компонентом Outlook, в котором происходит событие. Узнайте, как написать обработитель событий на уровне приложений.
Порядок событий
За исключением некоторых событий формы программа не может предполагать определенный порядок возникновения событий, даже если кажется, что они вызываются в согласованной последовательности. Порядок, в котором Outlook вызывает обработчики событий, может изменяться в зависимости от других возможных событий, или порядок может измениться в последующих версиях Outlook.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Мастер правил Outlook позволяет «выполнить скрипт» при создании определенного правила. Как разработчик, это позволяет выполнять действия с входящей почтой, которые невозможно использовать с обычными возможностями мастера правил.
Дополнительные сведения
Несмотря на то, что мастер правил обращается к пользовательскому коду как «сценарий», необходимо создать код в Outlook Visual Basic для приложений, а не в Microsoft Visual Basic Scripting Edition (VBScript) или других языках сценариев, таких как Microsoft JScript. Кроме того, приложение Outlook Visual Basic для приложений не предназначено для развертывания, поэтому для развертывания этого пользовательского кода требуется ручная настройка на каждом компьютере пользователя. Вы не можете создать настраиваемый код в надстройке Outlook COM. Чтобы получить дополнительные сведения об ограничениях, связанных с распространением проектов Visual Basic для приложений, щелкните следующие номера статей базы знаний Майкрософт:
290779 описание управления и распространения проектов Outlook 2002 Visual Basic для приложений (VBA)
Корпорация Майкрософт предоставляет примеры программирования только для иллюстраций, которые не выражаются или подразумеваемы, включая, но не ограничиваются, подразумеваемые гарантии пригодности и/или пригодности для конкретной цели. В этой статье предполагается, что вы знакомы с демонстрируемым языком программирования и инструментами, используемыми для создания и отладки процедур. Специалисты службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но они не изменяют эти примеры, чтобы предоставить дополнительные функции или создать процедуры для удовлетворения конкретных потребностей.
Если вы ограничили взаимодействие с программированием, вы можете обратиться к сертифицированному партнеру Майкрософт или консультационным службам Майкрософт.
Для получения дополнительных сведений о доступных параметрах поддержки и о том, как обратиться в корпорацию Майкрософт, посетите следующий веб-сайт корпорации Майкрософт: Служба поддержки Майкрософт
Чтобы реализовать пользовательский код для обработки сообщения, создайте подпрограмму в Visual Basic для приложений. Имя подпрограммы не имеет значения, но оно должно принимать один аргумент, так как мастер правил передаст почтовое сообщение (MailItem) или приглашение на собрание (MeetingItem) в подпрограмму. Аргумент должен иметь тип MailItem или MeetingItem, в противном случае подпрограмма будет недоступна в мастере правил. Невозможно создать одну подпрограмму для обработки элементов обоих типов, определив аргумент типа Object. В приведенном ниже примере кода для приложений Outlook в Visual Basic для приложений показано, как создать подпрограммы:
Подпрограмму можно поместить в любой модуль, в том числе Сисаутлуксессион, но если переместить подпрограмму в другой модуль или изменить имя подпрограммы, необходимо изменить правило так, чтобы оно ссылалось на обновленную подпрограмму.
Outlook из MS Office 2007 поддерживает запуск VB скриптов для обработки сообщений. Возможность обрабатывать сообщения с помощью VisualBasic в Офис встроена давно — еще с версии Office 2000. В данной статье будет продемострировано использование скриптов VBA в Outlook для извлечения из сообщения нужных данных и отправки уведомления на мобильный телефон.
Нам нужен редактор Visual Basic for Applications, встроенный в Outlook.
Запускаем редактор VBA в Outlook
Нажмите Alt-F11, чтобы вызвать его. Другой вариант — вывести на ленту раздел «Разработчик»
Появится окно редактора Visual Basic for Applications — VBA:
Создаем Outlook VBA скрипт
VBA не предназначен для создания программ, которые можно перенести и развернуть на другом компьютере. Конечно, вы сможете перенести код скрипта на другую машину, но основная функция VB для приложений — автоматизация действий пользователя. Предполагается, что автоматизировать свои действия пользователь будет сам 🙂
В редакторе скрипт можно добавить в новый модуль, а можно в объект ThisOutlookSession. Это скажется только на имени модуля, на который вы затем будете ссылаться, создавая правило.
Вставьте в редактор простой код, чтобы проверить работу скрипта:
Должно получиться так:
Данный код выведет всплывающее окно с темой полученного сообщения
Добавляем правило для запуска Outlook VBA скрипта
Правило создается как обычно.
Выберите, на какое событие будет вызываться скрипт. В данном примере скрипт будет срабатывать на все сообщения, которые адресованы на наш адрес.
Затем выберите действие «Run a script» и выберите скрипт добавленный в VBA редактор:
Отправьте себе сообщение. Если при его получении Outlook вы увидели окошко с надписью
и темой письма, все в порядке.
Если VBA скрипт не работает
В моем случае скрипт прекрасно запустился, а затем перестал работать. Если у вас срабатывает правило, но прописанные в скрипте действия не выполняются, возможная причина — настройки безопасности Outlook.
В Outlook 2007 выберите меню Tools | Trust Center и установите macro security в Warn on all macros.
Обработка сообщения и формирование уведомления
Теперь предположим, что мы хотим получать уведомление о пришедших сообщениях на мобильный телефон. Для пересылки почты в SMS многие провайдеры предоставляют свой сервис, также можно использовать специализированные сервисы.
Но если мы будем просто пересылать email стандартным правилом Outlook, то в SMS могут не попасть нужные нам данные, либо оно может и вовсе не дойти.
Оптимальным вариантом будет сформировать новое сообщение, включив туда только необходимые нам из исходного письма данные, и отправить его.
Для этого можете использовать следующий скрипт
Данный скрипт сформирует и отправит сообщение, в котором будут тема сообщения, а также поля From, To, CC.
Автоматизация работы Microsoft Outlook с помощью VBA на примере создания массовой рассылки писем
В этой статье я бы хотел поделиться опытом автоматизации офисной, рутинной задачи по отправке сообщений группе клиентов. Итак, собственно, в чем вопрос: необходимо отправить электронные письма с вложением нескольким десяткам клиентам. При этом в поле получателя должен быть только один адрес, т.е. клиенты друг о друге не должны знать. Кроме того, не допускается установка дополнительного программного обеспечения, типа MaxBulk Mailer и ему подобного. В нашем распоряжении есть только Microsoft Office, а в данном конкретном случае — Microsoft Office 2013.
Я описываю, на мой взгляд, самый вариант – без применения шаблонов, черновиков и форматирования. Для наших целей потребуется Outlook (переходим в редактор VBA и добавляем модуль, еще включаем «Microsoft Excel 15.0 Object Library» в Tools > References), текстовый файл со списком адресатов по принципу «одна строка-один адрес», текстовый файл с телом письма и файлы, которые будем отправлять в качестве вложения. Общий алгоритм таков: указываем данные для полей и генерируем письма, перебирая в цикле получателей. Сразу отмечу, что данный пример не является неким доведенным до совершенства кодом, работающим с максимальной эффективностью при минимальных размерах. Но он работает и справляется с заявленным функционалом. Собственно, мне было просто лень отправлять вручную несколько десятков писем и я написал эту программу, а потом решил ей поделиться. Если кому-то интересно, тот может улучшать код сколько душе угодно. VBA, по умолчанию, не требует четкого объявления переменных и их типов. В принципе, можно вообще обойтись без этого. Поэтому некоторые переменные в «эпизодических ролях» не описаны в конструкции с Dim. Итак, сначала запрашиваем тему письма с реализацией проверки на отмену действия.
Теперь очередь за файлами с адресами и текстом письма. Вот здесь возник нюанс. Как вызвать диалог выбора файла? О жестком прописывании пути я не хочу и думать. Так что приходится что-то придумывать. Многими используемый вариант с Application.GetOpenFilename не пройдет, так как в Outlook нет такого метода. Использовать API пробовал. Вариант с «Private Declare PtrSafe Function GetOpenFileName Lib „comdlg32.dll“…» не сработал (PtrSafe из-за того, что система Win7, х64). Ошибок не выдавал, но при вызове ничего не появлялось. Решения в Интернете не нашел. Если кто подскажет решение – буду благодарен. Таким образом, пришлось пойти в обход с применением объекта Excel.Application.
Каждый раз я создавал и удалял объект fd из-за того, что это сделать проще, чем заниматься его чисткой перед последующим вызовом. Для получения данных из текстовых файлов пришлось использовать пару дополнительных функций. Вызываются они таким образом:
С целью отладки я вставил такой код ‘Контроль за данными
Как видно, он сейчас закомментирован, но позволяет понять где что лежит. Теперь небольшая по размеру, но самая важная часть – генерация писем.