Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание скриптов в Outlook

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

WestGott

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем
Написал скрипт на VBA под Outlook 2007 для разбора входящих писем. Скрипт сохраняет письма в папки на сетевом диске и сортирует по папкам в самом Outlook.
Текст скрипта поместил в ThisOtlookSession
Собственно скрипт это обработчик события Application_NewMail() и ряд вспомогательных подпрограмм вызывываемых из Application_NewMail()
 
Проблема заключается в том, что скрипт отрабатывает однократно при первом возникновении события Application_NewMail() - обработка проходит, письмо сохраняется в папку на диске, из папки "входящие" письмо перемещается в нужную папку в самом Outlook. То есть как бы всё нормально.
Но когда подобное письмо приходит второй раз - обработка не отрабатывает.
код

Всего записей: 96 | Зарегистр. 10-04-2010 | Отправлено: 23:08 04-05-2013 | Исправлено: WestGott, 23:17 04-05-2013
WestGott

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникшую проблему решил, путём использования другого события. Вместо Application_NewMail() я переделал код под событие Application_NewMailEx(ByVal EntryIDCollection As String).
 
код

Всего записей: 96 | Зарегистр. 10-04-2010 | Отправлено: 18:58 19-05-2013
MaksimM23



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мальчишки и девчонки, подскажите можно ли настроить Outlook 2007, чтобы он забирал почту с сервера каждый день ровно в 18:00, Outlook постоянно весит в трее. "Автоматически доставлять каждые" (0-1440мин.) - это меня не устраивает, ибо комп выключается, а при включении настройка - "Автоматически доставлять каждые" сбивается по времени. Может как скрипт можно написать? Спасибо!

Всего записей: 9 | Зарегистр. 10-02-2013 | Отправлено: 09:04 25-07-2013
Dugin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, есть скрипт для сохранения вложений из письма, запускается после срабатывания правила, с этим проблем нет. хотелось бы усовершенствовать функционал скрипта (знаний в кодировании увы минимальны). практически в каждом письме есть два файла с расширением .txt, один из которых в названии всегда имеет слово image, в идеале при сохранении хотелось бы получить переименование этих файлов в 1.txt и image.txt, при положительном решении вопроса могу финансово отблагодарить (адекватные суммы конечно)
 

Всего записей: 3 | Зарегистр. 07-04-2016 | Отправлено: 14:33 12-07-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dugin,
Звучит несложно...
 скрипт показать можете?

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 08:00 13-07-2016
Dugin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KDPoid, да скрипт сейчас каждое письмо сохраняет в отдельную папку присваивая имя которые было в теме письма+время создания письма
 
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
  Dim objAtt As Outlook.Attachment
 
 dateOfMailItem = Format(itm.ReceivedTime, "yyyy.mm.dd_hhnnss")
 
For t = 1 To Len(itm.Subject)
  s = Mid(itm.Subject, t, 1)
  If Not LCase(s) Like "[?/\|*<>:]" Then
    sSubject = sSubject & s
  End If
Next t
 If Dir("c:\Work\" & dateOfMailItem & "_" & sSubject, vbDirectory) = "" Then
     MkDir "c:\Work\" & dateOfMailItem & "_" & sSubject
 End If
 saveFolder = "c:\Work\& dateOfMailItem & "_" & sSubject & "\"
  k = 0
 
 For Each objAtt In itm.Attachments
 
 ext = Mid(objAtt.FileName, Len(objAtt.FileName) - InStr(1, StrReverse(objAtt.FileName), ".") + 1, Len(objAtt.FileName))
j = " "
k = k + 1
  For i = 1 To 1000
   If Not Dir(saveFolder & Format(Now, "yyyy.mm.dd") & "_" & k & "_" & j & objAtt.FileName & ext) = "" Then
    j = "_" & i & "_"
   Else
    Exit For
   End If
  Next i
  objAtt.SaveAsFile saveFolder & j & objAtt.FileName & ext
  Set objAtt = Nothing
 Next
End Sub

Всего записей: 3 | Зарегистр. 07-04-2016 | Отправлено: 08:36 13-07-2016 | Исправлено: Dugin, 08:38 13-07-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странно, кажется тут:

Код:
saveFolder = "c:\Work\& dateOfMailItem & "_" & sSubject & "\"  

потеряна кавычка
 
А про остальное(Оставлю только интересные части):

Код:
 
...
 saveFolder = ... & "\" ' Сформировали название папки со слэшем в конце
...
 For Each objAtt In itm.Attachments ' Для каждого аттача
   ext = ... ' выделим его старое расширение из имени файла
... ' заполняем j чтобы избежать переписывания файлов
   
' сохраняем вложение в папку saveFolder  
' c именем, составленным из j, старого имени с расширением и ещё раз расширения... ?!?
   objAtt.SaveAsFile saveFolder & j & objAtt.FileName & ext  
' Попробовал, так и есть. image.png сохраняется как image.png.png
 
  Set objAtt = Nothing  
 Next  
 

 Так что, всё что вам нужно, перед сохранением проверить имя файла и решить, под каким именем сохранять вложение.
Например, строчку сохранения переписать так:

Код:
 
If InStr("image", objAtt.FileName) > 0 Then
    objAtt.SaveAsFile saveFolder & j & "image.txt"
Else
    objAtt.SaveAsFile saveFolder & j & "1.txt"
End If
 

Использование j я оставил, чтобы письма с одинаковой темой или с более чем двумя вложениями не перетирали на диске друг-друга.
Ну, вам виднее, нужно ли оно, если что, убрать j, я думаю, и сами справитесь.

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 10:23 15-07-2016
Dugin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо буду пробовать

Всего записей: 3 | Зарегистр. 07-04-2016 | Отправлено: 13:55 15-07-2016
Glux

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как сделать скрипт или что-нибудь, чтобы при клике по кнопке (как вариант кнп. из "Быстрые действия")  - письмо из папки "Входящие" перемещалось бы в папку с названием года (год брать из столбца "Получено"), если же папки года нет, то создать папку год и переместить письмо.
Т.е. имеем: Входящие - письмо - получено 01.03.2017
-> клик по кнопке - письмо переместилось в папку "2017", если папки "2017" нет, то создать папку "2017" и переместить в неё письмо.
Спасибо.

Всего записей: 58 | Зарегистр. 21-09-2017 | Отправлено: 13:21 05-10-2017
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
письмо из папки "Входящие" перемещалось бы в папку с названием года (год брать из столбца "Получено"), если же папки года нет, то создать папку год и переместить письмо.

Начните с этого куска и дальше гуглем/хелпом (в данном куске письмо перемещается в папку "Готовые" того же ящика

Код:
 
     Dim olMail As Outlook.MailItem
     Dim myInbox As Outlook.Folder
     Dim myDestFolder As Outlook.Folder
   
     Set olMail = Application.ActiveWindow.Selection.Item(1)
 
     Set myInbox = olMail.Parent
           
     'MsgBox (myInbox.Parent.Name)
     Set myDestFolder = myInbox.Parent.Folders("Готовые")
       
     olMail.Move myDestFolder
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:18 06-10-2017
by Dim



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день. Подскажите пожалуйста. В оутлуке 16 зарегистрировано несколько почтовых ящиков. Необходимо с разных ящиков выгружать вложения в разные директории. Нашел скрипт для выгрузки вложений на жесткий диск,  

Цитата:
Public Sub saveAtt(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment 'переменная для работы с вложениями
Dim saveFolder As String 'переменная для пути к папке сохранения
Dim sDateMail As String 'переменная для даты письма
'сохраняем в правильном формате время создания сообщения
sDateMail = Format(itm.CreationTime, "hh-mm-ss_dd.mm.yyyy")
'задаем путь к папке сохранения
saveFolder = "d:\!3\2020\mail\"
For Each objAtt In itm.Attachments
'сохраняем вложение в папку под именем: дата письма + название файла вложения
objAtt.SaveAsFile saveFolder & "\" & sDateMail & "_" & objAtt.FileName
Set objAtt = Nothing
Next objAtt
End Sub

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

Всего записей: 122 | Зарегистр. 19-11-2002 | Отправлено: 01:10 15-12-2020 | Исправлено: by Dim, 01:12 15-12-2020
Ipower



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! подскажите нужно добавить 300 пользователям интернет календарь для каждого пользователя с его именем
ссылка на календарь выглядить вот так
https://calendar.домен.ру/caldav.php/%имя_пользователя%@домен.ру/calendar/
 
в ссылке меняется только имя пользователя

Всего записей: 14 | Зарегистр. 02-06-2008 | Отправлено: 10:39 30-11-2022
fhorse



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Подскажите, пожалуйста, как запустить макрос при ответе на письмо.
 
Собственно сам макрос я написал. А вот как подцепить его к обработчику события Reply, не понимаю.

Всего записей: 218 | Зарегистр. 27-03-2010 | Отправлено: 14:23 22-03-2023 | Исправлено: fhorse, 14:24 22-03-2023
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fhorse
аутлука под рукой нет проверить, но начал бы с этих примеров:
https://documentation.help/Microsoft-Outlook-Visual-Basic-Reference/olevtReply.htm
https://stackoverflow.com/questions/24029515/mailitem-reply-event-not-working-as-expected
если первый не работает, то попробовать совместить с кодом в последнем сообщении на стэковерфло, там надо вместо метода Open прописать Reply
 

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 10:21 24-03-2023
fhorse



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DenSyo, спасибо.  
Первый пример - это из хелпа в Аутлуке. Он работает только при ручном запуске процедуры инициализации.
 
Второй похоже, должен работать.
Буду пробовать...

Всего записей: 218 | Зарегистр. 27-03-2010 | Отправлено: 11:03 24-03-2023
fhorse



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разборался. Подцепился к событию Application_ItemSend.
А хендл на application получил при запуск Аутлука.

Всего записей: 218 | Зарегистр. 27-03-2010 | Отправлено: 14:39 25-03-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание скриптов в Outlook


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru