On 2016-12-05 07:22, Stephan Bosch wrote:> Op 5-12-2016 om 16:10 schreef MRob: >> On 2016-12-05 06:13, Stephan Bosch wrote: >>> Op 5-12-2016 om 14:32 schreef MRob: >>> >>> Could you show me your full script? I am mainly interested in the >>> require statements involved. >> >> 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 :)> - 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"? :)
Op 12/5/2016 om 10:25 PM schreef MRob:> On 2016-12-05 07:22, Stephan Bosch wrote: >> Op 5-12-2016 om 16:10 schreef MRob: >>> On 2016-12-05 06:13, Stephan Bosch wrote: >>>> Op 5-12-2016 om 14:32 schreef MRob: >>>> >>>> Could you show me your full script? I am mainly interested in the >>>> require statements involved. >>> >>> 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).> - 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]. 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}"; }. The standard [1] provides no alternative. Relevant specifications: [1] http://tools.ietf.org/html/rfc5183/ [2] http://tools.ietf.org/html/rfc5229/ [3] https://raw.githubusercontent.com/dovecot/pigeonhole/master/doc/rfc/spec-bosch-sieve-dovecot-environment.txt [4] https://tools.ietf.org/html/rfc6785 Regards, Stephan.
>>>> 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?