Тема: AHK: отправка письма с аттачем в The bat!
Желание написать данный скрипт у меня возникло давно. За идею я взял статью с данного сайта о использовании AutoHotkey для автоматизации отправки сообщения с аттачем из почтового клиента Outlook Express, поскольку сам Outlook Express не умеет работать с командной строкой и порулить им так просто не удастся. Все действия скрипта основаны на передаче окнам Outlook Express сообщений в результате которых вызывалось окно для вставки файлов, затем мы "передаем" окну путь к вложениям и имена самих файлов, далее скрипт нажимал кнопку "вложить" в итоге мы получаем готовое "к употреблению"сообщение с вложенными файлами, с заполненной темой сообщения и адресатом. The bat! же (в отличии от своего "брата" Outlook Express) имеет множество настроек и охотно работает с командной строкой, либо по своей неопытности я не нашел как вложить несколько файлов (вкладывался только один файл) поэтому пришлось прибегнуть к вспомогательным средствам я имею ввиду AHK
скрипт работает так: вызывается The bat! двумя разными путями см.настройки ниже (в зависимости от выбора пользователя) с новым сообщением в котором заполняются поля to: ,subject:, text: (адресат, тема и текст сообщения соотв-но ), затем скрипт посылает команду {Alt}+{PgUp} (вставка файла), далее нам нужно заполнить в окне выбора файлов путь к вложениям, а также имя файла(ов). Чтобы послать окну сообщение нам нужно знать заголовок окна либо класс окна (поскольку заголовок выбора файлов различен для разных версий бата, я использовал имя класса окна узнал с помощью утилиты Winspector Spy) если не поможет можно использовать все-таки заголовок окна, предварительно откорректировав его в настройках пользователя
Вот мой скиптец
; AutoHotkey Version: 1.0.46.05
; Автор: Serg Fomichev
; Имя скрипта: the_bat_example.ahk (v.1)
;*******************************************************************************
; Автоматизация отправки сообщения для The bat!
; сообщение отправляется по указанному в настройках адресу, с заданной темой, с
; заданным текстом сообщения и наконец прикрепляет файлы из заданной папки
; после отправки файлы из заданной папки удаляются по желанию пользователя
;*******************************************************************************
#NoEnv ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)
;#NoTrayIcon ; не отображать иконку скрипта в трее
; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
Attach_Path = c:\test\*.* ; путь к вложению & path
Recipient = test@mail.ru ; адрес получателя
Subject_message = твоя тема сообщения ; тема сообщения
Text_message = Файлы вложены и отправлены с помощью скрипта AutoHotKey ; текст сообщения
;title_insert_files = Прикрепить файл (MIME/Base64) ;заголовок окна вложения файлов (вызывается нажатием в бате {Alt}+{PgUp}
title_insert_files = ahk_class #32770 ;класс окна вложения файлов
; дополнительные настройки для использования если
; The bat! не настроен как клиент
; для обрабоки команды mailto: по умолчанию
The_bat_path = C:\Program Files\The Bat!\thebat.exe ;собственно путь к почтовому клиенту
account = yandex ; имя почтового ящика в бате
mailto_not_default = 1 ; если 1 то отправление почты будет происходить через команду типа
;C:\Program Files\The Bat!\thebat.exe /MAILU=MyAccount;S=%O
;EDIT;TO=test@mail.ru;Subj=твоя тема сообщения
; =================================================
Subject_message = "%Subject_message%" ; приводим к читаемому формату The bat! т.к.
Text_message = "%Text_message%`%0a`%0d " ; он считает пробел следующим параметром
IfNotExist, %Attach_Path% ; если НЕ существует указанного пути, то...
{
MsgBox, 0, Ошибка!, Проверьте существование путей!`n путь: %Attach_Path% не найден! ; вывод сообщения об ошибке
Return ; закончить обработку
}
IfNotExist, %The_bat_path% ; если НЕ существует указанного пути, то...
{
MsgBox, 0, Ошибка!, Проверьте существование путей!`n путь: %The_bat_path% не найден! ; вывод сообщения об ошибке
Return ; закончить обработку
}
Loop, %Attach_Path% ;считываем в переменную список файлов
FileList = %FileList% "%A_LoopFileName%" ;из пути вложений
if (mailto_not_default=1)
{
;Run, "%The_bat_path%" /MAILU=%account%;EDIT;TO=%Recipient%;Subj=%Subject_message% ;по желанию какая больше нравится
Run, "%The_bat_path%" mailto:%Recipient%?subject=%Subject_message%&body=%Text_message% ;первая создает сообщение по шаблону по умолчанию
;вторая в поле текст сообщения выводит желаемый текст сообщения + вывод запроса типа бат не установлен как клиент по умолчанию,
;поставь чек не задавать больше вопрос и выбери желаемое действие
}
else
{
Run, mailto:%Recipient%?subject=%Subject_message%&body=%Text_message% ;выполняем собственно команду
}
WinActivate, Редактирование письма -> %Recipient%
WinWait, Редактирование письма -> %Recipient% ;ждем окно перед нажатием {Alt}+{PgUp} (горячая клавиша бата для вставки файлов)
Send !{PgUp}
WinActivate, %title_insert_files% ;активируем окно (почему-то после нажатия клавиш вставки файлов было неактивным)
WinWait, %title_insert_files% ;ждем окно перед посылкой в поле пути к вложениям
ControlSetText, Edit1, %Attach_Path% ;собственно коментировать нечего итак понятно
Send {Enter} ;посылаем сначала путь жмем энтер
WinWait, %title_insert_files% ;ждем окна
ControlSetText, Edit1, %FileList% ;посылаем собственно список файлов из папки с вложениями
Send {Enter} ;жмем энтер
WinWait, Редактирование письма -> %Recipient% ;ждем окно с новым письмом
WinWaitClose, Редактирование письма -> %Recipient% ;можно сразу нажать F2 но для перестраховки что файлы вложились будем нажимать отправить сами
MsgBox, 4, Подтвердите удаление файла(ов), Файлы отправлены, очистить каталог`n%Attach_Path% ; диалог подверждения удаления файлов вложений
IfMsgBox, No
{
MsgBox, 0, Информационное сообщение, Не забудьте удалить файлы `nиз папки %Attach_Path% `nвручную!!!
Return ; User pressed the "No" button.
}
IfMsgBox, Yes
{
FileDelete %Attach_Path%
MsgBox, 0, Информационное сообщение, Каталог %Attach_Path%`n для дальнейшей работы очищен!
Return ;
}
Для написания данного скрипта я использовал материалы с "Серого форума", статьи, примеры из Хранилища, отдельное спасибо The gray Cardinal, а также Androgen'у за его скрипты и подробные объяснения к ним. Буду рад, если кто-то поправит или предложит новые идеи по реализации данной задачи.