complete patch. some parts were missing before
diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.c
b/src/lib-sieve/plugins/environment/ext-environment-common.c
--- a/src/lib-sieve/plugins/environment/ext-environment-common.c
+++ b/src/lib-sieve/plugins/environment/ext-environment-common.c
@@ -24,7 +24,8 @@ static const struct sieve_environment_item
*core_env_items[] = {
&location_env_item,
&phase_env_item,
&name_env_item,
- &version_env_item
+ &version_env_item,
+ &defaultfolder_env_item
};
static unsigned int core_env_items_count = N_ELEMENTS(core_env_items);
@@ -233,7 +234,19 @@ const struct sieve_environment_item
version_env_item = {
.value = PIGEONHOLE_VERSION,
};
+/* "defaultfolder":
+ * the default folder where mail is stored when no rule matches
+ */
+static const char *envit_defaultfolder_get_value
+(struct sieve_instance *svinst,
+ const struct sieve_script_env *senv)
+{
+ return senv->default_mailbox;
+}
-
+const struct sieve_environment_item defaultfolder_env_item = {
+ .name = "defaultfolder",
+ .get_value = envit_defaultfolder_get_value,
+};
diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.h
b/src/lib-sieve/plugins/environment/ext-environment-common.h
--- a/src/lib-sieve/plugins/environment/ext-environment-common.h
+++ b/src/lib-sieve/plugins/environment/ext-environment-common.h
@@ -38,6 +38,7 @@ extern const struct sieve_environment_item
location_env_item;
extern const struct sieve_environment_item phase_env_item;
extern const struct sieve_environment_item name_env_item;
extern const struct sieve_environment_item version_env_item;
+extern const struct sieve_environment_item defaultfolder_env_item;
/*
* Initialization
On 08/07/2015 04:03 PM, matthias lay wrote:> fixed my problem.
>
> if somebody is interested.
> I added an variable to the environment extension, which is quite easy.
> And the value of the folder is already there. so this is all:
>
>
> src/lib-sieve/plugins/environment/ext-environment-common.c
>
> static const char *envit_spfolder_get_value
> (struct sieve_instance *svinst,
> const struct sieve_script_env *senv)
> {
> return senv->default_mailbox;
> }
>
> const struct sieve_environment_item spfolder_env_item = {
> .name = "spfolder",
> .get_value = envit_spfolder_get_value,
> };
>
>
> after that the variable can easily be used in a script like
>
> if anyof ( environment :matches "spfolder" "*") {
> set "myfolder" "${1}";
> }
>
>
>
>
>
>
>
>
>
> On 08/07/2015 12:40 PM, matthias lay wrote:
>> hi jost thx for the reply,
>>
>> by access I mean to read the variable
>>
>>
>> require ["fileinto", "variables",
"?destfolder?" ];
>>
>> if anyof ( destfolder :matches "*") {
>>
>> fileinto "${1}/subfolder";
>>
>> }else{
>>
>> fileinto "INBOX/subfolder";
>>
>> }
>>
>>
>>
>> On 08/07/2015 12:26 PM, Jost Krieger wrote:
>>> On Fri Aug 7 12:19:22 2015, matthias lay wrote:
>>>
>>>> anybody knows, if there is a way to acces the folder from a
call like this
>>>>
>>>> deovecot-lda -m destfolder
>>>>
>>>> from within a sieve script?
>>>
>>> Depending on what you mean by "access", this could be as
easy as
>>>
>>> require "fileinto";
>>>
>>> fileinto "destfolder";
>>>
>>> Yours
>>> Jost Krieger
>>>
Steffen Kaiser
2015-Aug-10 14:29 UTC
PATCH for Stephan: Re: pigeonhole/lda accessing -m folder
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Mon, 10 Aug 2015, matthias lay wrote:
Hi Matthias,
there is another possibility:
require ["fileinto", "variables", "subaddress",
"envelope"];
if envelope :detail :matches "to" "*"
{
set "myfolder" "${1}";
} else {
set "myfolder" "INBOX";
}
fileinto "my_${myfolder}";
stop;
/usr/local/dovecot/libexec/dovecot/deliver -d user -m box -a user+box
And enable the recipient_delimiter option.
====
Dear Stephan,
If you find this code OK, please merge it into Pigeonhole. I find this
information useful, too. The +detail and the default mailbox are not
necessarily the same. Maybe, there is a namespace to expose this
information easily?
For the archive:
+ This works for both LDA and LMTP.
+ The Dovecot LDA requires option -m .
+ LMTP requires an active recipient_delimiter option.
+ If there is no -m option or no +detail, INBOX is the defaultfolder.
> complete patch. some parts were missing before
>
>
> diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.c
> b/src/lib-sieve/plugins/environment/ext-environment-common.c
> --- a/src/lib-sieve/plugins/environment/ext-environment-common.c
> +++ b/src/lib-sieve/plugins/environment/ext-environment-common.c
> @@ -24,7 +24,8 @@ static const struct sieve_environment_item
> *core_env_items[] = {
> &location_env_item,
> &phase_env_item,
> &name_env_item,
> - &version_env_item
> + &version_env_item,
> + &defaultfolder_env_item
> };
>
> static unsigned int core_env_items_count = N_ELEMENTS(core_env_items);
> @@ -233,7 +234,19 @@ const struct sieve_environment_item
> version_env_item = {
> .value = PIGEONHOLE_VERSION,
> };
>
> +/* "defaultfolder":
> + * the default folder where mail is stored when no rule matches
> + */
> +static const char *envit_defaultfolder_get_value
> +(struct sieve_instance *svinst,
> + const struct sieve_script_env *senv)
> +{
> + return senv->default_mailbox;
> +}
>
> -
> +const struct sieve_environment_item defaultfolder_env_item = {
> + .name = "defaultfolder",
> + .get_value = envit_defaultfolder_get_value,
> +};
>
>
> diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.h
> b/src/lib-sieve/plugins/environment/ext-environment-common.h
> --- a/src/lib-sieve/plugins/environment/ext-environment-common.h
> +++ b/src/lib-sieve/plugins/environment/ext-environment-common.h
> @@ -38,6 +38,7 @@ extern const struct sieve_environment_item
> location_env_item;
> extern const struct sieve_environment_item phase_env_item;
> extern const struct sieve_environment_item name_env_item;
> extern const struct sieve_environment_item version_env_item;
> +extern const struct sieve_environment_item defaultfolder_env_item;
>
> /*
> * Initialization
>
>
>
> On 08/07/2015 04:03 PM, matthias lay wrote:
>> fixed my problem.
>>
>> if somebody is interested.
>> I added an variable to the environment extension, which is quite easy.
>> And the value of the folder is already there. so this is all:
>>
>>
>> src/lib-sieve/plugins/environment/ext-environment-common.c
>>
>> static const char *envit_spfolder_get_value
>> (struct sieve_instance *svinst,
>> const struct sieve_script_env *senv)
>> {
>> return senv->default_mailbox;
>> }
>>
>> const struct sieve_environment_item spfolder_env_item = {
>> .name = "spfolder",
>> .get_value = envit_spfolder_get_value,
>> };
>>
>>
>> after that the variable can easily be used in a script like
>>
>> if anyof ( environment :matches "spfolder" "*") {
>> set "myfolder" "${1}";
>> }
>>
>>
>> On 08/07/2015 12:40 PM, matthias lay wrote:
>>> hi jost thx for the reply,
>>>
>>> by access I mean to read the variable
>>>
>>>
>>> require ["fileinto", "variables",
"?destfolder?" ];
>>>
>>> if anyof ( destfolder :matches "*") {
>>>
>>> fileinto "${1}/subfolder";
>>>
>>> }else{
>>>
>>> fileinto "INBOX/subfolder";
>>>
>>> }
>>>
>>>
>>>
>>> On 08/07/2015 12:26 PM, Jost Krieger wrote:
>>>> On Fri Aug 7 12:19:22 2015, matthias lay wrote:
>>>>
>>>>> anybody knows, if there is a way to acces the folder from a
call like this
>>>>>
>>>>> deovecot-lda -m destfolder
>>>>>
>>>>> from within a sieve script?
>>>>
>>>> Depending on what you mean by "access", this could be
as easy as
>>>>
>>>> require "fileinto";
>>>>
>>>> fileinto "destfolder";
>>>>
>>>> Yours
>>>> Jost Krieger
>>>>
>
- --
Steffen Kaiser
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEVAwUBVci1LXz1H7kL/d9rAQJJogf+PJl87IL3KEmc3uPDi7q8yJBRTChmqlGN
39SrJ6DGfe8+IZSlipJZzAAnE/nn+D/YHGcS20X40Nas4QassoZi16ZfX6OGId1O
8IvYjGc0k0Mu8Nnk0vyX0DwTA23oId0y934HCQxhxvgS6bM9iexA+Fs2KPA2ta+9
xOEtpjQCTvYFX6VvqhjQaz6lv/f+mSEoU/EFbvC9jMNV+v4a2SQ3Dazfg6OAoRUp
WfXjYAgmvsH/xbL/QGqzFkJX/1vVTBX8wJRDoZHC/XcWNr2775VFQHaO4PQrPAr/
48dHbiSwinGLBD4RkLVq7l9zZWfuxf6EMTmdNWHRO49cE3ZahxBtoQ==Jq9R
-----END PGP SIGNATURE-----
Stephan Bosch
2015-Aug-10 15:05 UTC
PATCH for Stephan: Re: pigeonhole/lda accessing -m folder
Op 8/10/2015 om 4:29 PM schreef Steffen Kaiser:> On Mon, 10 Aug 2015, matthias lay wrote: > > Dear Stephan, > > If you find this code OK, please merge it into Pigeonhole.Non-standard entries like this require a vnd.dovecot prefix.> I find this information useful, too. The +detail and the default > mailbox are not necessarily the same. Maybe, there is a namespace to > expose this information easily?The Pigeonhole internals support custom variable namespaces. The extdata plugin uses this too, so adding something like that is architecturally not problematic. I would make this dependent on an extension like "vnd.dovecot.environment", so that non-standard features are only added when this is in the require line. Currently, the "auth" envelope field (CMUSieve) is the only exception and I like to keep it that way. I'll give this a look. Also, are there any other environment items that may be useful? Regards, Stephan.