Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Написание скриптов в Outlook

Автор: ova
Дата сообщения: 05.08.2003 15:00
Тут мне понадобилось написать некий скрипт для обработки входящих сообщений в Microsoft Outlook. Подскажите как это делается и с чего начать. Thanks!
Автор: zorrack
Дата сообщения: 06.08.2003 13:40
Я не уверен, что получится написать скрипт. Скорее, необходимо писать свой Add-in для Outlook. Вроде как на SourceForge были какие-то проекты (типа АнтиСпам фильтры) с исходниками.
Автор: Fill747
Дата сообщения: 19.08.2003 08:22
ova
Написать скрипт для обработки входящих сообщений - дело не трудное: vbs тебе в руки. Но вот запустить его из под самого Outlook'а у меня что-то не получилось. Здесь действительно надо что-то типа Add-in'а на Visual Basic'е делать.

ЗЫ: Хотя, если посмотреть в Мастер Правил, там есть какое-то "Запустить сценарий". Но что это такое - в Help'е не нашел...

Добавлено
ova
И еще: загляни на _http://www.cdolive.com/start.htm - там есть что почитать для начала.
Автор: naPmu3aH
Дата сообщения: 19.08.2003 09:07
Fill747
ova

Цитата:
Написать скрипт для обработки входящих сообщений - дело не трудное: vbs тебе в руки. Но вот запустить его из под самого Outlook'а у меня что-то не получилось


Private Sub Application_NewMail()
<bla-bla-bla>
End Sub
должно работать...

И вообще советую покопаться тут http://www.slipstick.com/ - много информации об интересующей вас теме вообще и преодолению проблем связанных с Outlook security в частности...

Автор: Fill747
Дата сообщения: 19.08.2003 13:39
naPmu3aH
Спасибо, про этот сайт я уже давно знаю.

ova
Я был не прав. Вот пример кода по материалам упомянутого выше сайта.

Код, который мониторит Inbox и все входящие письма, в заголовке которых есть слово "Test" перемещает в папку TestFolder. Папка TestFolder должна быть подпапкой Inbox'а (честно говоря, некогда было разбираться - почему )
Весь ниже приведенный код кладется в модуль ThisOutlookSession.
Обработчик ошибок отсутствует, т.е. папки должны существовать.
В Outlook XP надо поиграть с безопасностью макросов.


Option Explicit

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
Автор: uken666
Дата сообщения: 23.11.2005 17:05
если можно, вопрос в догонку.
Я сделал похожее с уведомлением, но конвертик в трее (в Оутлук 2003) не уходит, хотья и делаю письмо прочтенным.
никто не знает, как до него программно добратся?
Автор: Fill747
Дата сообщения: 23.11.2005 18:34
uken666

Цитата:
хотья и делаю письмо прочтенным

Еще бы примерно посмотреть, как ты это делаешь?..
Автор: volsk
Дата сообщения: 11.03.2007 22:17
Помогите со скриптом. Сам в VBA пока плохо разбираюсь, другое учил.

Задача. В outlook приходит письмо примерно следующего содержания:

------------------------------------------------
ОТ: MP64-1Alarm@SMPAlarm [MP64-1Alarm@SMPAlarm]

------------------------------------------------
текст письма

Дата: 11.03.2007
Время: 20:59:06
Модуль: 1
Ошибка: Обнаружен поток 2 в модуле 3
Код ошибки: 909, категория ошибки: 1

------------------------------------------------

Задача: на основе отправителя "MP64-1Alarm@SMPAlarm" и чисел строки Ошибка: 2 и 3 составить другое письмо, где комбинаця 2 и 3 будут заменены словами, соответствующие этим числам и отправителю

числа хранить можно.. ну где проще для работы.. хоть в *.txt, лучше конечно в *.xls но необязательно.

вид допустим такой

от MP64-1Alarm@SMPAlarm
поток модуль обозначение
1 1 слово_для_1_1
1 2 слово_для_1_2
1 3 слово_для_1_3
2 1 слово_для_2_1
2 2 слово_для_2_2
2 3 слово_для_2_3
3 1 слово_для_3_1
3 2 слово_для_3_2
4 1 слово_для_4_1

от MP64-2Alarm@SMPAlarm
поток модуль обозначение
1 1 слово_для_1_1
1 2 слово_для_1_2
1 3 слово_для_1_3
...

Как результат должны получить письмо со строкой слово_для_3_2 и отправить его списку получателей дальше.


Было бы отлично, если кто-нибудь помог с примерным кодом, хоть что и как делать. Или с инфой, где это почитать. Сам уже долго вожусь, а результата мало.


Автор: volsk
Дата сообщения: 13.03.2007 17:46
Это же просто, но я совсем не знаю синтаксиса VBS
Набросайте хоть примерные команды плз.
Автор: dad1969
Дата сообщения: 16.05.2007 15:03
Есть два вопроса по макросам для 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 + "\"

If MsgBox("Сохранить все вложения в папку " + DefFolder + AttFolder + "? Все файлы с такими именами в этой папке будут перезаписаны!", vbQuestion + vbOKCancel) = vbOK Then
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.folderexists(DefFolder + AttFolder) Then
fs.createfolder (DefFolder + AttFolder)
End If

For Each objItem In objSelection
If objItem.Class = olMail Then
Set objMail = objItem
For i = 1 To objMail.Attachments.Count
If objMail.Attachments.Item(i).Position = 0 Then
objMail.Attachments.Item(i).SaveAsFile DefFolder + AttFolder + objMail.Attachments.Item(i).DisplayName
End If
Next
End If
Next
End If
End Sub
Автор: Biblbrox
Дата сообщения: 19.09.2007 11:03
Подскажите пожалуйста текст макроса, который бы перемещал письма после прочтения из папки Входящие/Не_прочтенные во Входящие. С Visual Basic не знаком, а сделать такую штуку очень хотелось бы. Спасибо!
Автор: Fill747
Дата сообщения: 19.09.2007 11:44
Biblbrox
Папка Входящие/Не_прочтенные является "виртуальной" папкой - т.н. "папка поиска". Точно так же, как и папки "Сегодня" и "Большие письма". Недаром у них на иконке нарисована лупа.
Таким образом, как только ты читаешь письмо и оно помечается, как "прочтенное", оно "уходит" из папки "Не прочтенное", но всё равно остаётся в папке Входящие. Т.е. макрос для перемещения не нужен.
Автор: Biblbrox
Дата сообщения: 19.09.2007 13:31
Fill747
В моем случае это не папка поиска, с лупой которая, а папка, в которую складываются новые письма правилом.
Или (понимаю что не о программировании) можно ли такую папку поиска поместить в "Входящие" а не в "Папки поиска" ?
Автор: Fill747
Дата сообщения: 19.09.2007 13:44
Biblbrox

Цитата:
складываются новые письма правилом

Риторический вопрос: зачем?

Цитата:
можно ли такую папку поиска поместить в "Входящие"

ИМХО, нет. Т.к. это, как я уже сказал, виртуальная папка.
Автор: BadCaT
Дата сообщения: 02.11.2007 16:25
Друзья, пол инета обошёл и ничего я не нашёл.
как можно с помощью VBA изменить параметры учетной записи в Office Outlook 2003?
конкретно - incoming/outgoing server
Автор: dneprcomp
Дата сообщения: 03.11.2007 22:36
BadCaT
Похоже, что через VBA это нельзя сделать. Посмотри
http://groups.google.com/group/microsoft.public.outlook.program_vba/browse_thread/thread/d65b39fab5c0c71c/aa580c3b84dfa6c0?hl=en&lnk=st&q=vba%2Boutlook%2Bchange%2Bsmtp#aa580c3b84dfa6c0
http://www.dimastr.com/redemption/profiles.htm
http://groups.google.com/group/microsoft.public.office.developer.outlook.vba/browse_thread/thread/59c34ebc103a3aee/9f01c7bd18ecc504?hl=en&lnk=st&q=vba%2Boutlook%2Bchange%2Bsmtp#9f01c7bd18ecc504
Автор: dredd00
Дата сообщения: 26.11.2007 14:23
Помогите нужен скрипт.
Нужен простейший до безобразия скрипт для 2003 аутлука.
При Запуске или завершении работы аутлука, необходимо чтобы скрипт проверял сообщения в папке нежелательная почта, и всех отправителей писем добавлял в спамлист, если их еще там не было. Или другими словами. (как я это делаю в ручную)
ПКМ на письме. в меню выбираю: Нежелательная почта -> добавить отправителя в список заблокированных отправителей. Помогите плиз сам не рублю
Автор: Fill747
Дата сообщения: 27.11.2007 08:14
dredd00
Э... Что-то я не совсем тебя понял... Дело в том, что в папку Нежелательная почта попадают письма от тех отправителей, которые уже есть в спам-листе. Зачем их туда ещё раз добавлять?
Автор: dredd00
Дата сообщения: 27.11.2007 15:36
Ну пусть будет не папка "нежелательная почта" а какая нибудь другая например "входящий спам" просто правило у меня так настроено что все сообшения отправленные не мне идут в нежелательную почту, перемещаться то они туда перемещаются, а вот в блоклист не добавляются
Автор: dredd00
Дата сообщения: 29.11.2007 06:01
PS Я даже нашел скрипт, который может проверить сообщения одно за другим в каждой папке, но как его сверить с мылами из блоклиста хз [more= вот код скрипта]Private Sub Application_Quit()
Dim myOlApp As Outlook.Application
Dim mpfInbox As Outlook.MAPIFolder
Dim obj As Outlook.MailItem
Dim i As Integer
Set myOlApp = CreateObject("Outlook.Application")
Set mpfInbox = myOlApp.GetNamespace("MAPI").Folders("test")
' Loop all items in the Inbox\Test Folder
For i = 1 To mpfInbox.Items.Count
If mpfInbox.Items(i).Class = olMail Then
Set obj = mpfInbox.Items.Item(i)
If obj.SenderEmailAddress = "someone@example.com" Then
'Set the yellow flag icon

obj.FlagIcon = olYellowFlagIcon
obj.Save
End If
End If
Next
End Sub[/more]
Скрпт проверяет каждое сообщение в папке тест и если оно от сомвана то красит его в желтый
Автор: MaximuS G
Дата сообщения: 22.10.2008 18:06
Оу... ты еще кто нибудь бывает ?
Автор: Antananarivu
Дата сообщения: 30.10.2008 15:45
Установлен Outlook 2007, который по протоколу IMAP скачивает письма в папку "Входящие". Мне нужно, чтобы письма автоматически попадали не в папку "Входящие", а в папки поставщиков.
Создаю правило в "Мастере правил". Для любого входящего сообщения выполнять процедуру ("run to script").
Процедура такая:


Код:
Sub CustomMailMessageRule(Item As Outlook.MailItem)
On Error GoTo err

Dim oOutlook As New Outlook.Application
Dim oNameSpace As Outlook.NameSpace
Dim oFolder As Outlook.MAPIFolder

Set oNameSpace = oOutlook.GetNamespace("MAPI")
Set oFolder = oNameSpace.Folders("basis")
Set oFolder = oFolder.Folders("Aoiayuea")
Set oFolder = oFolder.Folders("123")

If TypeName(Item) <> "Nothing" Then
Item.Move oFolder
End If

Set oFolder = Nothing
Set oNameSpace = Nothing
Set oOutlook = Nothing
Exit Sub
err:

End Sub

Автор: prestigo
Дата сообщения: 07.11.2008 05:31
добавить ресурсы в Outlook AppointmentItem, не отмечая их?

Нужно добавить программно при создании в Outlook объекта приглашение на совещание (AppointmentItem, событие Item_Open() ) все возможные ресурсы (коллекция AppointmentItem.Recipients c AppointmentItem.Recipients(i).Type=olResource).
При этом ресурсы должны быть не выбранными - аналогично тому, если на вкладке Планирование снять флаг выбора ресурса.
Пока что не удалось обнаружить свойства объекта AppointmentItem.Recipient (ресурс приглашения) либо дополнительной коллекции самого AppointmentItem, в которых бы указывалось, что ресурс выбран или нет.

Какие могут быть варианты?


Добавлено:

Цитата:
Может кто нибудь подскажет как корректно поступить в данной ситуации? Может быть есть другие способы решить задачу сортировки IMAP почты по папкам.

[q][/q]

к примеру - не морочить голову с пользовательскими процедурами для правил получения, а посмотреть первые посты данной темы и работать на уровне ThisOutlookSession с кодом VB
Автор: andyac
Дата сообщения: 17.11.2008 14:39
Господа, простите за неумение, очень прошу помочь. Ситуация следующая, во входящих список писем-заявок, по выполнении заявки ставится галочка (выполнено) нужен скрипт который периодически переносил бы письма с отметкой выполнено в папку "Выполнено".

на сколько я понимаю сложность ещё и в том что этот скрипт должен срабатывать не во время прихода письма (так как на этот момент отметки ещё нет), а отметка ставится вручную.

Пожалуйста помогите скриптом и советом как его прикрутить к Outlook.
Автор: prestigo
Дата сообщения: 17.11.2008 20:26
в общих чертах - делаете в проекте VBA для Oulook при startup-е макрос, где делаете паблик-объект на Item, потом для его change пишем макрос обработки изменения, где проверяем соотв. св-во Item-а - признак "выполнено", и если установелно - перемещаете через Move...
здесь были похожие куски кода... сами разберетесь или подкинуть попозже образец?
Автор: andyac
Дата сообщения: 18.11.2008 00:18
угу, очень попрошу и код, и поподробнее, а то для меня часть слов вообще неизвестны (((
Автор: EVGSA
Дата сообщения: 05.03.2009 19:41
Вечер добрый, помогите плз советом скриптом, как организовать такое.
При нажатии на кнопку отправить скрипт проверял поле "кому" и если оно подходило бы по условию, допустим mne@mail.ru то он(скрипт) вставлял бы в тело письма определенную строчку, например username.
Спасибо за помощь =))
Автор: SvGAGS
Дата сообщения: 04.06.2009 09:36
Помогите создать скрипт:

1) При создании письма загружался 1 шаблон, можно бланк из настроек оутлука, но специально оформленный.
2) При введении мыла "кому" или ухода с этого поля курсора - автоматически подставлялся бы заголовок мыла, а лучший вариант: из адресной книги по мылу - имя фамилия
3) Обязательно присутствовали бы дата и время написания письма в самом его конце.

зы. я дуб дубом в VB. буду рад помощи. Платные системы не предлагать - в организации это не пройдет.
зыы. можно и кусочками, главное что бы получить результат.
Автор: Gremlin19
Дата сообщения: 11.06.2009 10:26
здравствуйте.
Имеется скрипт, который из непрочтенных писем аутлука выдирает аттачи и кладет их на файловую систему под именем dd-mm-yyyy-%filename%
на Win XP отлично работает, а на Win2k3 (терминальный сервер) не хочет.

с включенным debug сообщает "error on: %subject%"
и что ему не нравиться?

[more]' To Turn On Debug Change Dim Debug from False to True in mDebug function

Sub mDebug(Text)
Dim Debug
Debug = True
If Debug Then
WScript.Echo Text
End If
End Sub

Sub save_new()
On Error Resume Next
Dim myApp 'As Outlook.Application
Dim myFolder 'As Outlook.MAPIFolder
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(6) '.Folders("1")
DestFolder = "C:\Scripts\"
' myFolder.Items.Sort "ReceivedTime", false
If myFolder.Items.Count > 0 Then
For i = 1 To myFolder.Items.Count
If (myFolder.Items(i).Attachments.Count > 0) and (myFolder.Items(i).Unread = True) Then
For j = 1 To myFolder.Items(i).Attachments.Count
mDebug(myFolder.Items(i).Subject & " " & myFolder.Items(i).CreationTime)
myFolder.Items(i).Attachments.Item(j).SaveAsFile DestFolder & _
left(myFolder.Items(i).CreationTime,10) & "_" & _
myFolder.Items(i).Attachments.Item(j).DisplayName
Next
End If
if Err.Number <> 0 Then
mDebug("Error on :" & myFolder.Items(i).Subject)
Err.Clear
end if
Next
End If
End Sub
mDebug("Start")
save_new()
mDebug("Done")[/more]
Автор: dmka
Дата сообщения: 11.06.2009 16:18
Gremlin19
А код ошибки какой? Может у юзера нет прав на запись в эту папку или имя файла содержит недопустимые символы.

Страницы: 12

Предыдущая тема: SystemV семафоры


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.