[EXT] How do I make "vnd.dovecot.environment" available?

Stephan Bosch stephan at rename-it.nl
Thu Oct 8 22:13:18 EEST 2020



On 25/09/2020 11:33, Graham Leggett wrote:
> On 24 Sep 2020, at 22:07, Sami Ketola <sami.ketola at dovecot.fi 
> <mailto:sami.ketola at dovecot.fi>> 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
>>



More information about the dovecot mailing list