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:
- 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.
- 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