imapsieve environment variables missing?

MRob mrobti at insiberia.net
Mon Dec 5 23:23:03 UTC 2016


>>>> I don't know how I managed to compile only using direct access of
>>>> ${imap.user} before since now I get an unknown namespace error on my
>>>> test script.
>>>> 
>>>> But doing it this way compiles:
>>>> 
>>>> require ["environment", "variables", "vnd.dovecot.debug"];
>>>> 
>>>> if environment :matches "imap.user" "*" {
>>>>   set "u" "${1}"; }
>>>> debug_log "Found username: \${u}";
>>>> if environment :matches "name" "*" {
>>>>   set "n" "${1}"; }
>>>> debug_log "Found product name: \${n}";
>>>> 
>>>> The output is:
>>>> 
>>>> DEBUG: Found username:
>>>> DEBUG: Found product name: Pigeonhole Sieve
>>> 
>>> - For the "imap.user" environment item, you need to add:
>>> 
>>> require "imapsieve";
>> 
>> Hmm, I had tried that and get this:
>> 
>> error: require command: unknown Sieve capability `imapsieve'
>> 
>> I've already got imapsieve working (per above output, which was
>> triggered by a COPY action) so it clearly is installed and configured.
>> 
>>> This also means that this script will only run from IMAP.
>> 
>> Seems as though it won't compile outside of IMAP either :)
> 
> Not if you're not using the sieve_imapsieve plugin for the Sieve
> interpreter (sieve_plugins = sieve_imapsieve).

Forgive me, but what other way is there to set it up? Is there any way 
to successfully compile a script with a require of "imapsieve" from the 
command line?

>> - For the "${imap.user}" variable, you need to add:
>>> 
>>> require "vnd.dovecot.environment";
>>> 
>>> This implicitly requires "environment", so that could be removed.
>>> 
>>> It is all in the specifications. :)
>> 
>> You're saying that to access the new imap. namespace vars for
>> imapsieve that vnd.dovecot.environment is required? I don't find
>> anything in the specifications that say this.
>> 
>> The RFC says those vars MUST be made available, so presumably it would
>> be referring to the RFC-standard environment extension and not some
>> vendor specific one.
>> 
>> Of course it's easy to work with that if this is how it's been built,
>> but as noted above I can't get it to compile anyway. Though what's the
>> point of trying to figure out imap.user or imap.email if I'm required
>> to use vnd.dovecot.environment which already has "username"? :)
> 
> The standard "environment" extension [1] does not register a variables
> namespace [2] for environment items. So, using a "${env.imap.user}"
> variable requires the Dovecot-specific "vnd.dovecot.environment"
> extension [3].

But this doesn't work:

require ["environment", "variables", "vnd.dovecot.debug", 
"vnd.dovecot.environment"];
debug_log "Username: ${env.imap.user}";

Output when running from a COPY event is:

DEBUG: Username:

What did I do wrong here?

> In contrast, the normal alternative for this variable
> using the "imap.user" environment item will work once the "imapsieve"
> extension [4] is require'd. That is a bit cumbersome though, since you
> need to put that in a variable with a statement like: if environment
> :matches "imap.user" "*" { set "imap_user" "${1}"; }.

I don't see that being too cumbersome, as it's the standard way the 
environment extension is used, and it's what I expect from reading the 
RFC. But I understand your point that it's more lengthy than just 
accessing the variable directly.

So the only issue I see is that the script won't compile on the CLI with 
the needed require. Is it simply a requirement to have Sieve do run-time 
compilation for this to work?



More information about the dovecot mailing list