Выполнение внешних скриптов в 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 28 дн

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

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

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

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

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

Tamila 28 дн

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

Tamila 28 дн

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

Tamila 28 дн

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

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

Tamila 28 дн

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

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

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

Tamila 28 дн

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

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

Здравствуйте. Не исчез, а:

  1. Было много работы, поэтому сюда просто не заходил.
  2. Не получал уведомления о новых комментариях в блоге, надо разобраться.

Попробую еще раз воспроизвести ситуацию и расписать более детально.