From 5f532fce3c5f3ec1af67210b84808e88ad7dc043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=C3=BCrmann?= Date: Mon, 8 Jan 2018 14:47:00 +0100 Subject: [PATCH 1/4] Add selection to user-mailfilter editor --- interface/web/mail/form/mail_user_filter.tform.php | 2 +- interface/web/mail/lib/lang/de_mail_user_filter.lng | 1 + interface/web/mail/lib/lang/en_mail_user_filter.lng | 1 + interface/web/mailuser/lib/lang/de_mail_user_filter.lng | 1 + interface/web/mailuser/lib/lang/en_mail_user_filter.lng | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php index 76b54feb09..02dfa59b47 100644 --- a/interface/web/mail/form/mail_user_filter.tform.php +++ b/interface/web/mail/form/mail_user_filter.tform.php @@ -88,7 +88,7 @@ $form["tabs"]['filter'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => '', - 'value' => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt') + 'value' => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'Detail'=>'detail_txt') ), 'op' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/mail/lib/lang/de_mail_user_filter.lng b/interface/web/mail/lib/lang/de_mail_user_filter.lng index e951d18c6b..d789c025d7 100644 --- a/interface/web/mail/lib/lang/de_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/de_mail_user_filter.lng @@ -27,4 +27,5 @@ $wb['reject_txt'] = 'Abweisen'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Verschiebe nach'; $wb['mark_read_txt'] = 'Als gelesen markieren'; +$wb['detail_txt'] = 'Detail-Angabe des Empfängers (user+detail@domain.com)'; ?> diff --git a/interface/web/mail/lib/lang/en_mail_user_filter.lng b/interface/web/mail/lib/lang/en_mail_user_filter.lng index 6bec7601c3..6f1a62ae13 100644 --- a/interface/web/mail/lib/lang/en_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/en_mail_user_filter.lng @@ -27,4 +27,5 @@ $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; $wb['mark_read_txt'] = 'Mark as read'; +$wb['detail_txt'] = 'Detail part in recipient (user+detail@domain.com)'; ?> diff --git a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng index 1665ba14d2..ac4016713b 100644 --- a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng +++ b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng @@ -18,4 +18,5 @@ $wb['begins_with_txt'] = 'Startet mit'; $wb['ends_with_txt'] = 'Endet mit'; $wb['move_to_txt'] = 'Verschieben nach'; $wb['delete_txt'] = 'Löschen'; +$wb['detail_txt'] = 'Detail-Angabe des Empfängers (user+detail@domain.com)'; ?> diff --git a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng index 23451b74db..652d509741 100644 --- a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng +++ b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng @@ -18,4 +18,5 @@ $wb['begins_with_txt'] = 'Begins with'; $wb['ends_with_txt'] = 'Ends with'; $wb['move_to_txt'] = 'Move to'; $wb['delete_txt'] = 'Delete'; +$wb['detail_txt'] = 'Detail part in recipient (user+detail@domain.com)'; ?> -- GitLab From c44c12ff1cf788ad7cba0690686377d1d1de16ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=C3=BCrmann?= Date: Mon, 8 Jan 2018 14:48:08 +0100 Subject: [PATCH 2/4] Handle new filter source type "Detail" --- .../plugins/mail_user_filter_plugin.inc.php | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 5b898f84c6..a4e973973e 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -148,17 +148,20 @@ class mail_user_filter_plugin { } $content .= 'if size :over '.intval($page_form->dataRecord["searchterm"]).$unit.' {'."\n"; } else { - - if($page_form->dataRecord["source"] == 'Header') { - $parts = explode(':',trim($page_form->dataRecord["searchterm"])); - $page_form->dataRecord["source"] = trim($parts[0]); - unset($parts[0]); - $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); - unset($parts); + if($page_form->dataRecord["source"] == 'Detail') { + $content .= 'if envelope :detail :regex "to" ["'; + } else { + if($page_form->dataRecord["source"] == 'Header') { + $parts = explode(':',trim($page_form->dataRecord["searchterm"])); + $page_form->dataRecord["source"] = trim($parts[0]); + unset($parts[0]); + $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); + unset($parts); + } + + $content .= 'if header :regex ["'.strtolower($page_form->dataRecord["source"]).'"] ["'; } - $content .= 'if header :regex ["'.strtolower($page_form->dataRecord["source"]).'"] ["'; - $searchterm = preg_quote($page_form->dataRecord["searchterm"]); $searchterm = str_replace( array( -- GitLab From d8390bfbb44a661da36f9c3b7c3d7420b4d69f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=C3=BCrmann?= Date: Mon, 8 Jan 2018 14:48:45 +0100 Subject: [PATCH 3/4] Require modules for :details --- server/conf/sieve_filter.master | 2 +- server/conf/sieve_filter_1.2.master | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index 43dfeac052..bfd75c4d43 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -1,4 +1,4 @@ -require ["fileinto", "regex", "vacation", "imap4flags"]; +require ["fileinto", "regex", "vacation", "imap4flags", "envelope", "subaddress"]; # Send a copy of email to diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master index 7580e190dc..47370ec0a9 100644 --- a/server/conf/sieve_filter_1.2.master +++ b/server/conf/sieve_filter_1.2.master @@ -1,4 +1,4 @@ -require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags"]; +require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress"]; # Send a copy of email to -- GitLab From 8ef8a7d211f53bfea1a0418f4dff859cf277c310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=C3=BCrmann?= Date: Mon, 8 Jan 2018 14:50:16 +0100 Subject: [PATCH 4/4] Tell postfix to pass original_recipient to dovecot (required to extract envelope :detail) --- install/dist/lib/debian60.lib.php | 2 +- install/dist/lib/fedora.lib.php | 2 +- install/dist/lib/gentoo.lib.php | 2 +- install/dist/lib/opensuse.lib.php | 2 +- install/lib/installer_base.lib.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index 57fb193440..ecf3db3a4b 100644 --- a/install/dist/lib/debian60.lib.php +++ b/install/dist/lib/debian60.lib.php @@ -61,7 +61,7 @@ class installer extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index f1c8d67204..70bed24d10 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -394,7 +394,7 @@ class installer_dist extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index b3cfc20719..46bd662535 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -303,7 +303,7 @@ class installer extends installer_base } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index f991c77d2b..598f98ec43 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -404,7 +404,7 @@ class installer_dist extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 95e0d9f5a5..a504b3b255 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1322,7 +1322,7 @@ class installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); -- GitLab