On 25/09/2020 11:33, Graham Leggett wrote:
On 24 Sep 2020, at 22:07, Sami Ketola <[email protected]
<mailto:[email protected]>> wrote:
I think this should be
require ["environment"];
instead.
I eventually stumbled on a syntax that worked. Putting all of this in
one place:
- You need to turn on the sieve_extprograms plugin:
sieve_plugins = sieve_extprograms
This step is not needed for vnd.dovecot.environment. I don't see
anything else in your Sieve script that makes this a requirement, so you
should be able to remove it.
- Then you need to enable vnd.dovecot.environment:
sieve_global_extensions = +vnd.dovecot.environment
- Then you need to pull the extra fields you want out of the userdb,
and those fields must be prefixed with “sieve_env_”, like this example
for LDAP:
user_attrs =
mailMessageStore=home=%$,=sieve_env_mail_auto_reply_mode=%{ldap:mailAutoReplyMode},=sieve_env_mail_auto_reply_text=%{ldap:mailAutoReplyText}
- Then you need to add a requirement on “vnd.dovecot.environment” to
the sieve script.
- Then, to access the variables in the sieve script, you need to drop
the “sieve_env_” part, and add the prefix “env.vnd.dovecot.config.”.
There are various docs floating around that reference the above
variable without the leading “env.” - this must be there too.
Where are those erroneous docs?
- The resulting sieve looks like this:
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}";
}
}
- The output of sieve-test looks like this. The handle is weird, but
I’m assuming there is method in the madness somehow:
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
The handle is created implicitly and makes sure vacation avoids sending
multiple identical responses within the :days (or :seconds) period. If
you change the vacation command in the Sieve script, the handle changes,
making sure that contacts get to see a new vacation message even when
they've contacted the recipient within the :days period.
Regards,
Stephan.
Regards,
Graham
—