Выполнение внешних скриптов в Sieve
Понадобилось недавно каким-то образом запускать внешний скрипт по приходу определенного письма. Начал поиски как это сделать. В Postfix это можно сделать, используя файл aliases, но мне этот способ не подходил, потому что он подразумевает приход письма на определенный почтовый адрес. С Dovecot сильно не разбирался, но вот информацию по Sieve нашел. Немного времени спустя у меня был наполовину рабочий вариант. Наполовину потому, что выполняемая во внешнем скрипте команда напрочь отказалась принимать отправляемые ей данные. Пришлось немного подправить скрипт в самом Sieve, чтобы получить желаемый результат.
Все оказалось очень просто. Для начала нужно включить доступ к плагину vnd.dovecot.execute. Для этого открываем файл с настройками Sieve /etc/dovecot/conf.d/90-sieve.conf и вносим следующие изменения:
plugin {
sieve_extensions = +vnd.dovecot.execute
sieve_plugins = sieve_extprograms
sieve_execute_bin_dir = /etc/dovecot/sieve/execute
}
Все остальные параметры нам не нужны.
В первой строчке включаем доступ к плагину для пользователей. Можно использовать параметр sieve_global_extensions, в таком случае плагин будет работать глобально. Но глобальный скрипт работает ТОЛЬКО если у пользователя нет своего файла скрипта Sieve. Пользователей на моем сервере очень мало, поэтому такой вариант мне не подходит.
Во второй строке мы разрешаем использование плагинов как таковых.
И, наконец, в третьей строке указывает папку, в которой будут находиться эти самые внешние скрипты. Доступ к этой папке для Dovecot, конечно, нужно обеспечить. Подозреваю, что папку можно и не указывать, а в скрипте Sieve просто указать полный путь к запускаемой программе, но проверять лень.
Теперь остается только написать правило обработки входящих писем. Что-то вроде такого:
# rule:[Test rule]
if allof (header :contains "from" "test@example.com", header :contains "subject" "Prikaz 66")
{
execute "test.sh";
fileinto "Trash";
stop;
}
Получив письмо от отправителя test@example.com с темой «Prikaz 66» Sieve запустит на выполнение скрипт /etc/dovecot/sieve/execute/test.sh, затем удалит письмо в корзину и завершит обработку писем.
Знаю, что информации по этой теме в интернете достаточно. Но большая часть из нее, как водится, на английском и содержит много воды. Хотелось сделать небольшую выдержку на более привычном русском языке.
Приветствую, Иван!
«Все оказалось очень просто. ...... Знаю, что информации по этой теме в интернете достаточно.»
Да если бы так... Уже неделю решаю эту задачу, что только не перепробовала, но ничего так и не заработало.
В итоге зашла со своим вопром на сайт разработчиков iRedMail (именно в ней мне нужно сделать запуск скрипта) _https://forum.iredmail.org/post90488.html#p90488
Там мне искренне пытались помочь, но ничего из этого не вышло. В итоге мне посоветовали изучить доку, которая мне очень не понравилась, потому что затрагивает MySQL.
Ваш простой howto мне очень понравился, сейчас буду пробовать.
Вот, дошла до «Теперь остается только написать правило обработки входящих писем.»
Правило я написала, но в какой конфиг и в какое его место его вписывать, непонятно :-(
И вот еще:
«Доступ к этой папке для Dovecot, конечно, нужно обеспечить»
Какой именно доступ нужно обеспечить?
Как сумела, использовала ваши рекомендации, но увы, и они тоже не сработала 😔
Прямо какая-тонерещаемая задача.
Так что только вы, Иван, сможете помочь в решении этой задачи.
Надеюсь на вашу помощь 😉
И еще. Чтобы пользователи могли безошибочно воспользоваться этими вашими советами, хорошо бы создать тупое пошаговое howto, в котором содержались бы только команды типа:
чтобы пользователи могли их тупо выполнить и получить гарантитированный результат.
Иначе, если пользоваться текстовыми советами, пользователи в силу различного восприятия могут иногда понимать их по-разному и совершать ошибки при их реализации.
Похоже, автор это хавту исчез, так что считаю своим долгом предупредить других пользователей:
Так что не трате напрасно на него время, ищите другие решения.