Add a BCC to service account mails to enable threading #123
1 changed files with 60 additions and 12 deletions
|
@ -92,7 +92,7 @@ with lib; let
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
configFile =
|
sieveConfigFile =
|
||||||
# https://doc.dovecot.org/configuration_manual/sieve/examples/#plus-addressed-mail-filtering
|
# https://doc.dovecot.org/configuration_manual/sieve/examples/#plus-addressed-mail-filtering
|
||||||
pkgs.writeText "basic_sieve"
|
pkgs.writeText "basic_sieve"
|
||||||
''
|
''
|
||||||
|
@ -105,17 +105,32 @@ with lib; let
|
||||||
|
|
||||||
# this should be close to teh last step
|
# this should be close to teh last step
|
||||||
if allof (
|
if allof (
|
||||||
address :localpart ["To"] ["${toString create_config_to}"],
|
address :localpart ["To", "Cc"] ["${toString create_config_to}"],
|
||||||
address :domain ["To"] "skynet.ie"
|
address :domain ["To", "Cc"] "skynet.ie"
|
||||||
){
|
){
|
||||||
if address :matches ["To"] "*@skynet.ie" {
|
if address :matches ["To", "Cc"] "*@skynet.ie" {
|
||||||
if header :is "X-Spam" "Yes" {
|
if header :is "X-Spam" "Yes" {
|
||||||
fileinto :create "''${1}.Junk";
|
fileinto :create "''${1}.Junk";
|
||||||
stop;
|
stop;
|
||||||
} else {
|
} else {
|
||||||
fileinto :create "''${1}";
|
fileinto :create "''${1}";
|
||||||
}
|
stop;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if allof (
|
||||||
|
address :localpart ["From"] ["${toString create_config_to}"],
|
||||||
|
address :domain ["From"] "skynet.ie"
|
||||||
|
){
|
||||||
|
if address :matches ["From"] "*@skynet.ie" {
|
||||||
|
if header :is "X-Spam" "Yes" {
|
||||||
|
fileinto :create "''${1}.Junk";
|
||||||
|
stop;
|
||||||
|
} else {
|
||||||
|
fileinto :create "''${1}";
|
||||||
|
stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
|
@ -462,7 +477,40 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
services.dovecot2.sieve.scripts = {
|
services.dovecot2.sieve.scripts = {
|
||||||
before = configFile;
|
before = sieveConfigFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
# This is to add a bcc to outgoing mail
|
||||||
|
# this then interacts with teh filters to put it in the right folder
|
||||||
|
# we can directly add to the postfix service here
|
||||||
|
services.postfix = let
|
||||||
|
# mostly copied from the upstream mailserver config/functions
|
||||||
|
mappedFile = name: "hash:/var/lib/postfix/conf/${name}";
|
||||||
|
|
||||||
|
sender_bcc_maps_file = let
|
||||||
|
content = lookupTableToString create_skynet_service_bcc;
|
||||||
|
in
|
||||||
|
builtins.toFile "sender_bcc_maps" content;
|
||||||
|
|
||||||
|
lookupTableToString = attrs: let
|
||||||
|
valueToString = value: lib.concatStringsSep ", " value;
|
||||||
|
in
|
||||||
|
lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value: "${name} ${valueToString value}") attrs);
|
||||||
|
|
||||||
|
# convert the mailboxes config to something that can be used here
|
||||||
|
create_skynet_email_bcc = mailbox: {
|
||||||
|
name = "${mailbox}@skynet.ie";
|
||||||
|
value = ["${mailbox}@skynet.ie"];
|
||||||
|
};
|
||||||
|
create_skynet_service_bcc = builtins.listToAttrs (map (mailbox: (create_skynet_email_bcc mailbox.account)) service_mailboxes);
|
||||||
|
in {
|
||||||
|
mapFiles."sender_bcc_maps" = sender_bcc_maps_file;
|
||||||
|
|
||||||
|
config = {
|
||||||
|
sender_bcc_maps = [
|
||||||
|
(mappedFile "sender_bcc_maps")
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# tune the spam filter
|
# tune the spam filter
|
||||||
|
|
Loading…
Reference in a new issue