Как создать скрипт сита в dovecot, который отправляет автоответ на отпуск из userdb, например LDAP?
Решетчатый отпуск, описанный на https://tools.ietf.org/html/rfc5230, позволяет определить и отправить сообщение об отпуске с помощью dovecot.
По умолчанию текст сообщения об отпуске жестко закодирован в скрипте сита.
Как заполнить текст сообщения об отпуске из дополнительного поля базы данных dovecot userdb, чтобы несколько пользователей могли использовать один и тот же сценарий сита, но при этом настраивать свое сообщение об отпуске в LDAP?
1 ответ
Собирая все вместе, есть несколько шагов, которые необходимо сделать, чтобы все заработало:
- Вам необходимо включить плагин sieve_extprograms:
sieve_plugins = sieve_extprograms
- Затем вам нужно включить vnd.dovecot.environment:
sieve_global_extensions = +vnd.dovecot.environment
- Затем вам нужно вытащить дополнительные поля из userdb, и эти поля должны иметь префикс sieve_env_, как в этом примере для LDAP:
user_attrs = mailMessageStore=home=%$,=sieve_env_mail_auto_reply_mode=%{ldap:mailAutoReplyMode},=sieve_env_mail_auto_reply_text=%{ldap:mailAutoReplyText}
Затем вам нужно добавить требование "vnd.dovecot.environment" в скрипт сита, как показано в примере ниже.
Затем, чтобы получить доступ к переменным в скрипте sieve, вам нужно отбросить часть "sieve_env_" и добавить префикс "env.vnd.dovecot.config.". Существуют различные документы, которые ссылаются на указанную выше переменную без начального "env". - это тоже должно быть.
Полученное сито выглядит так:
require ["fileinto", "mailbox"];
require ["vacation", "variables"];
require ["vnd.dovecot.environment"];
# fileinto: for putting mail into a imap folder
# mailbox: for creating imap folder if not exists
#
if header :contains "X-Spam-Flag" "YES" {
# move mail into folder Junk, create folder if not exists
fileinto :create "Junk";
stop;
}
if string :matches "${env.vnd.dovecot.config.mail_auto_reply_mode}" "reply" {
if header :matches "subject" "*" {
vacation :subject "AutoReply: ${1}"
"${env.vnd.dovecot.config.mail_auto_reply_text}";
}
}
- Результат sieve-test выглядит следующим образом. Ручка странная, но я предполагаю, что в безумии есть какой-то метод:
sieve-test(root): Debug: sieve: Pigeonhole version 0.5.8 (b7b03ba2) initializing
sieve-test(root): Debug: sieve: include: sieve_global is not set; it is currently not possible to include `:global' scripts.
sieve-test(root): Debug: sieve: Sieve Extprograms plugin for Pigeonhole version 0.5.8 (b7b03ba2) loaded
debug: file storage: Using Sieve script path: /var/lib/dovecot-sieve/default.sieve.
debug: file script: Opened script `default' from `/var/lib/dovecot-sieve/default.sieve'.
debug: Script binary /var/lib/dovecot-sieve/default.svbin successfully loaded.
debug: binary save: not saving binary /var/lib/dovecot-sieve/default.svbin, because it is already stored.
Performed actions:
* send vacation message:
=> seconds : 604800
=> subject : AutoReply: Test1
=> handle : ${env.vnd.dovecot.config.mail_auto_reply_text}AutoReply: ${1}<default-from><NO-MIME>
START MESSAGE
I am truly away...
END MESSAGE
Implicit keep:
* store message in folder: INBOX
sieve-test(root): Info: final result: success