Выполнение внешних скриптов в 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, затем удалит письмо в корзину и завершит обработку писем.
Знаю, что информации по этой теме в интернете достаточно. Но большая часть из нее, как водится, на английском и содержит много воды. Хотелось сделать небольшую выдержку на более привычном русском языке.

Отправить
Поделиться
6 комментариев
Tamila 21 д

Приветствую, Иван!

«Все оказалось очень просто. ...... Знаю, что информации по этой теме в интернете достаточно.»

Да если бы так... Уже неделю решаю эту задачу, что только не перепробовала, но ничего так и не заработало.
В итоге зашла со своим вопром на сайт разработчиков iRedMail (именно в ней мне нужно сделать запуск скрипта) _https://forum.iredmail.org/post90488.html#p90488

Там мне искренне пытались помочь, но ничего из этого не вышло. В итоге мне посоветовали изучить доку, которая мне очень не понравилась, потому что затрагивает MySQL.

Ваш простой howto мне очень понравился, сейчас буду пробовать.

Tamila 21 д

Вот, дошла до «Теперь остается только написать правило обработки входящих писем.»
Правило я написала, но в какой конфиг и в какое его место его вписывать, непонятно :-(

Tamila 21 д

И вот еще:
«Доступ к этой папке для Dovecot, конечно, нужно обеспечить»
Какой именно доступ нужно обеспечить?

Tamila 21 д

Как сумела, использовала ваши рекомендации, но увы, и они тоже не сработала 😔
Прямо какая-тонерещаемая задача.

Так что только вы, Иван, сможете помочь в решении этой задачи.
Надеюсь на вашу помощь 😉

Tamila 21 д

И еще. Чтобы пользователи могли безошибочно воспользоваться этими вашими советами, хорошо бы создать тупое пошаговое howto, в котором содержались бы только команды типа:

  1. cd ...
  2. mkdir ...
  3. tail ...
  4. chown ...
  5. chmod

чтобы пользователи могли их тупо выполнить и получить гарантитированный результат.
Иначе, если пользоваться текстовыми советами, пользователи в силу различного восприятия могут иногда понимать их по-разному и совершать ошибки при их реализации.

Tamila 20 дн

Похоже, автор это хавту исчез, так что считаю своим долгом предупредить других пользователей:

  • это хавту — не-ра-бо-чее.
    Так что не трате напрасно на него время, ищите другие решения.