Отправка уведомлений о входящих письмах средствами Dovecot:Sieve

Самый простой способ отправить уведомление — это написать правило в 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *