Проверил на bat-файле - работает.
Код:
$$$$ TB! Message Filter $$$$
beginFilter
UID: [DED52FC7.01CD7E99.792E5934.358F1209]
Name: run_bat
Filter: {\0D\0A\20`2`0`test11\0D\0A}
ExtractFiles IncrementName AutoPath dir C:\5Ctemp dirRelative %EXEDRIVE%\5Ctemp
RunExternal Wait CmdLine cmd\20/C\20c:\5Ctemp\5C%oAttachments
RunExternal Wait CmdLine cmd\20/C\20del\20c:\5Ctemp\5C%oAttachments
IsContinue
IsActive
Ignore
endFilter
Выделяете эти строки фильтра, копируете в буфер обмена, вставляете в фильтры Incoming mail (фокус должен быть на этой папке). Далее меняете признак фильтрации, так как у меня ради отладки сортировка происходила по теме сообщения "test11", а у Вас будет что-то другое. Папку куда прикреплённый файл будет "падать", тоже выберите самостоятельно. Как запускать без записи файла на диск - не знаю.
Попробуйте, возможно с CMD-файлами тоже прокатит. Фактически надо просто письмо с таким файлом подсунуть, фильтр тот же.
Немного позже он дописал…
Проверил с CMD - тоже работает.
Слегка улучшил фильтр переместив временную папку на диск C:\temp, так как при отсутствии диска с именем D: (которое было указано в фильтре), Бат заменяет его на другое, используя значение %EXEDRIVE%. Из этого следует, что в фильтре надо указывать реально существующий диск, иначе файл запишется в одно место, а запуск на выполнение будет производится из другого.
Ещё одна тонкость - может возникнуть коллизия на почве совпадения имени файла с именами в последующих письмах. Суть коллизии состоит в том, что если в фильтре "Извлечь" указать "Изменить имена, если уже существуют", то к имени файла в конце добавится (n), где n - порядковый номер. Скажем, есть в папке файл Hello.bat, тогда второй обзовётся Hello(1).bat, ну и так далее. А самое главное - в последующей команде cmd /C c:\temp\%oAttachments будет исполнен файл Hello.bat. Такие вот дела.
Это можно обойти несколькими способами:
1. Указать в фильтре "Извлечь прикреплённый файл" параметр - "Записать поверх существующео файла".
Тогда файл всегда будет исполняться из последнего письма. Плохо тем, что файл будет затираться более новым. Если он нужен, то надо предусмотреть его сохранение.
2. Добавить в фильтр последней строкой действие - cmd /C del c:\temp\%oAttachments. При этом рекомендуется в предшествующем вызове командного файла на исполнение поставить галочку "Дождаться завершения исполнения", иначе не знаю как будет работать. Файл исполняется, а его другой процесс будет пытаться удалить…хз чего будет.
В итоге, файл будет сушествовать на диске лишь некоторое время и по завершении выполнения будет удалён. Что будет когда сразу несколько писем пришло и во всех файл с одинаковым именем - не проверял.
В данном сообщении фильтр сделан по варианту п.2. Можно легко поменять на п.1.
--
Успехов!