On 15 Feb 2020, at 10:43, Armin Schindler wrote:

On 14.02.2020 11:44, Tobias Kirchhofer wrote:

On 14 Feb 2020, at 11:06, Armin Schindler wrote:

...

The sorting in the according public folder happens in a global sieve
script before user scripts are fireing. It is combined with the ‚+‘
notation in postfix for sub addresses and an special ‚listadm‘ user

postfix:
|
listadm+Verteiler/info@$DOMAIN
|

The sieve script is then reading the generated address and delivers it
into the according public folder. We learned a lot about sieve scripting
with this task :-)

|sieve_before = /var/vmail/sieve/global/global-before.sieve […] |

More details would be to much here.

To be honest, we needed some time to get it done properly. It is a
combination of features and A LOT OF testing and analysing the behaviour
of postfix/dovecot/public-folder/sieve/acl.

the sieve part seems to be very tricky.
My test is now working with a public folder and I have a
"sieve_before" script in place which works for rules of the
private namespace.

But when the rule shall "fileinto" a public folder, the mail isn't
filtered (moved) and syslog says
dovecot: lmtp(.): Error ... sieve...: Mailbox doesn't exist.

After some tests I found out it always looks in the private (or shared)
namespace for that specfied folder.
Do I miss a config option to let dovecot sieve "fileinto" a public
namespace folder?
I use dovecot version 2.2.13.

We „fileinto“ in this manner :

fileinto „Namespace/folder“;

The procedure in our setup is like this:

  1. Virtual alias for each public-Folder email address within postfix:

Pattern:
folder@domain.tld listadm+Namespace/folder@domain.tld
Example:
info@domain.tld listadm+Verteiler/info@domain.tld

Verteiler is the namespace, info the mailbox. listadm is a pseudo user in this context which holds the ACL for fileinto the resulting mailbox with proper permissions.

  1. Disassemble the virtual alias address with sieve:

Excerpt of the script. It is actually more code because we sort out spam for public folder. German comments, sorry.

        # Hat Subadresse?
        if envelope :matches :detail "to" "*"
        {
                # Adressaufbau: listadm+Namespace/liste@
                # ${liste} wird Namespace/box
                set "liste" "${1}";
        }
[…]

                fileinto "${liste}";

I can send you the whole script if you need.

Greetings!

Tobias

--
collect@shift.agency