Самый простой способ отправить уведомление — это написать правило в Sieve нужного нам пользователя, например:
require ["enotify", "variables"];
set :encodeurl "message" "Вы получили новое письмо в корпоративной почте. Данное уведомление отправлено роботом Notify Man, пожалуйста, не отвечайте на это письмо!";
if header :matches "From" "*" {
set "from" "${1}";
}
notify :from "notify@pzmc-corp.ru"
:importance "2"
:message "Notify: новое сообщение от ${from}"
"mailto:test@server.ru?body=${message}";
:importance — «1» (high importance), «2» (normal importance), and «3» (low importance)
Для возможности отправлять уведомления на адреса электронной почты привязанные к базе данных необходимо установить плагин vnd.dovecot.extdata для Sieve.
Вся процедура проводится на Debian 10 с iRedMail v1.0 и Dovecot 2.3
Скачиваем сам плагин для Pigeonhole v0.5:
git clone -b core-0.5 https://github.com/stephanbosch/sieve-extdata-plugin.git
Для сборки плагина понадобятся некоторые утилиты:
apt install autoconf libtool dovecot-dev automake
cd sieve-extdata-plugin/
./autogen.sh
./configure --with-dovecot=/usr/lib/dovecot --with-pigeonhole=/usr/include/dovecot/sieve
make
make install
ln -s /usr/local/lib/dovecot/sieve/lib90_sieve_extdata_plugin.so /usr/lib/dovecot/modules/sieve/lib90_sieve_extdata_plugin.so
Установка завершена. Теперь нужно настроить плагин. Редактируем /etc/dovecot/dovecot.conf
# это наш скрипт, который будет выполняться до пользовательских скриптов
# добавьте следующую строку после sieve_before, если он занят
sieve_before2 = /var/vmail/sieve/notify.sieve
# еще рядом добавляем эти строчки
sieve_plugins = sieve_extdata
sieve_extensions = +vnd.dovecot.extdata
sieve_extdata_dict_uri = proxy::sieve
# в блоке dict {} нужно дабавить наш sql запрос
sieve = pgsql:/etc/dovecot/sieve-notify.conf
Создаем файл /etc/dovecot/sieve-notify.conf с правами 0500, user и group = dovecot
connect = host=127.0.0.1 port=5432 dbname=vmail user=vmail password=пароль
map {
pattern = priv/notify_email
table = mailbox
username_field = username
value_field = notify_email
}
Создаем файл /var/vmail/sieve/notify.sieve с правами 0500, user и group = vmail
require ["enotify", "variables", "vnd.dovecot.extdata"];
if extdata :matches "notify_email" "*" {
set "notify_addr" "${1}";
}
if not string :is "${notify_addr}" "" {
set :encodeurl "message" "Вы получили новое письмо в корпоративной почте. Данное уведомление отправлено роботом Notify Man, пожалуйста, не отвечайте на это письмо!";
if header :matches "From" "*" {
set "from" "${1}";
}
notify :from "notify@pzmc-corp.ru"
:importance "2"
:message "Notify: новое сообщение от ${from}"
"mailto:${notify_addr}?body=${message}";
}
Далее в базе данных vmail в таблице mailbox добавляем новую колонку, где будет расположен адрес для уведомления
ALTER TABLE public.mailbox ADD notify_email varchar(255) NULL;
Перезапускаем dovecot:
systemctl restart dovecot
Компилируем созданный скрипт средствами программы sievec
sievec /var/vmail/sieve/notify.sieve
Меняем у созданного файла /var/vmail/sieve/notify.svbin user и group на vmail
На этом всё! Для добавления уведомлений записываем у нужного пользователя в таблице mailbox в колонку notify_email электронный адрес, куда будут отправляться уведомления.
Оригинал статьи по установке плагина: https://wiki.dovecot.org/Pigeonhole/Sieve/Plugins/Extdata