1 { lib, pkgs, config, ... }:
3 getDomains = p: lib.mapAttrsToList (n: v: v) (lib.filterAttrs (n: v: v.receive) p.emailPolicies);
4 bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones;
5 domains = lib.flatten (builtins.attrValues bydomain);
6 mxes = lib.mapAttrsToList
8 (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers);
9 file = d: pkgs.writeText "mta-sts-${d.fqdn}.txt" (
10 builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ]
11 ++ (map (v: "mx: ${v}.${d.domain}") mxes)
12 ++ [ "max_age: 604800" ]
14 root = pkgs.runCommand "mta-sts_root" {} ''
16 ${builtins.concatStringsSep "\n" (map (d:
17 "cp ${file d} $out/${d.fqdn}.txt"
21 let autoconfig = pkgs.writeText "config-v1.1.xml" ''
23 <clientConfig version="1.1">
24 <emailProvider id="mail.immae.eu">
25 <domain>mail.immae.eu</domain>
26 <domain>%EMAILDOMAIN%</domain>
27 <displayName>Immae E-mail</displayName>
28 <displayShortName>Immae E-mail</displayShortName>
30 <incomingServer type="imap">
31 <hostname>imap.immae.eu</hostname>
33 <socketType>STARTTLS</socketType>
34 <username>%EMAILADDRESS%</username>
35 <authentication>password-cleartext</authentication>
38 <incomingServer type="imap">
39 <hostname>imap.immae.eu</hostname>
41 <socketType>SSL</socketType>
42 <username>%EMAILADDRESS%</username>
43 <authentication>password-cleartext</authentication>
46 <incomingServer type="pop3">
47 <hostname>pop.immae.eu</hostname>
49 <socketType>STARTTLS</socketType>
50 <username>%EMAILADDRESS%</username>
51 <authentication>password-cleartext</authentication>
54 <incomingServer type="pop3">
55 <hostname>pop.immae.eu</hostname>
57 <socketType>SSL</socketType>
58 <username>%EMAILADDRESS%</username>
59 <authentication>password-cleartext</authentication>
62 <outgoingServer type="smtp">
63 <hostname>smtp.immae.eu</hostname>
65 <socketType>STARTTLS</socketType>
66 <username>%EMAILADDRESS%</username>
67 <authentication>password-cleartext</authentication>
70 <outgoingServer type="smtp">
71 <hostname>smtp.immae.eu</hostname>
73 <socketType>SSL</socketType>
74 <username>%EMAILADDRESS%</username>
75 <authentication>password-cleartext</authentication>
80 autodiscover = pkgs.writeText "Autodiscover.xml" ''
81 <?xml version="1.0" encoding="utf-8" ?>
82 <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
83 <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
85 <DisplayName>Name</DisplayName>
88 <AccountType>email</AccountType>
89 <Action>settings</Action>
93 <Server>imap.immae.eu</Server>
95 <DomainRequired>on</DomainRequired>
98 <AuthRequired>on</AuthRequired>
103 <Server>pop3.immae.eu</Server>
105 <DomainRequired>on</DomainRequired>
108 <AuthRequired>on</AuthRequired>
113 <Server>smtp.immae.eu</Server>
115 <DomainRequired>on</DomainRequired>
118 <AuthRequired>on</AuthRequired>
123 <Server>imap.immae.eu</Server>
125 <DomainRequired>on</DomainRequired>
128 <AuthRequired>on</AuthRequired>
133 <Server>pop3.immae.eu</Server>
135 <DomainRequired>on</DomainRequired>
138 <AuthRequired>on</AuthRequired>
143 <Server>smtp.immae.eu</Server>
145 <DomainRequired>on</DomainRequired>
148 <AuthRequired>on</AuthRequired>
155 pkgs.runCommand "autoconfig" {} ''
157 ln -s ${autoconfig} $out/mail/config-v1.1.xml
158 mkdir -p $out/AutoDiscover
159 ln -s ${autodiscover} $out/AutoDiscover/AutoDiscover.xml
160 mkdir -p $out/Autodiscover
161 ln -s ${autodiscover} $out/Autodiscover/Autodiscover.xml
162 mkdir -p $out/autodiscover
163 ln -s ${autodiscover} $out/autodiscover/autodiscover.xml
165 cfg = config.myServices.websites.tools.email;
168 config = lib.mkIf cfg.enable {
169 security.acme.certs.mail.extraDomainNames =
170 [ "mta-sts.mail.immae.eu" "autoconfig.mail.immae.eu" "autodiscover.mail.immae.eu" ]
171 ++ map (v: "mta-sts.${v.fqdn}") domains
172 ++ map (v: "autoconfig.${v.fqdn}") domains
173 ++ map (v: "autodiscover.${v.fqdn}") domains;
174 services.websites.env.tools.vhostConfs.mta_sts = {
176 hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains;
181 RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$
182 RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L]
190 services.websites.env.tools.vhostConfs.mail_autoconfig = {
192 hosts = ["autoconfig.mail.immae.eu" "autodiscover.mail.immae.eu" ]
193 ++ map (v: "autoconfig.${v.fqdn}") domains
194 ++ map (v: "autodiscover.${v.fqdn}") domains;
195 root = autoconfigRoot;
198 <Directory ${autoconfigRoot}>