{
config,
lib,
pkgs,
...
}:
let
mkThunderbirdAutoconfig = domain:
pkgs.writeText "autoconfig-${domain}.xml" ''
${domain}
${domain}
${domain}
${config.mailserver.fqdn}
993
SSL
%EMAILADDRESS%
password-cleartext
${config.mailserver.fqdn}
587
STARTTLS
%EMAILADDRESS%
password-cleartext
'';
mkOutlookAutodiscover = domain:
pkgs.writeText "autodiscover-${domain}.xml" ''
email
settings
IMAP
${config.mailserver.fqdn}
993
%EMAILADDRESS%
on
on
SMTP
${config.mailserver.fqdn}
587
%EMAILADDRESS%
on
TLS
on
off
'';
mailDiscoveryVirtualHosts =
lib.listToAttrs (
lib.concatMap (
domain:
let
autoconfigXml = mkThunderbirdAutoconfig domain;
autodiscoverXml = mkOutlookAutodiscover domain;
in
[
{
name = "autoconfig.${domain}";
value = {
enableACME = true;
forceSSL = true;
locations."= /mail/config-v1.1.xml".extraConfig = ''
default_type application/xml;
alias ${autoconfigXml};
'';
};
}
{
name = "autodiscover.${domain}";
value = {
enableACME = true;
forceSSL = true;
locations."= /autodiscover/autodiscover.xml".extraConfig = ''
default_type application/xml;
alias ${autodiscoverXml};
'';
};
}
]
) config.mailserver.domains
);
in
{
networking.firewall.allowedTCPPorts = [ 80 443 ];
services.nginx.virtualHosts = mailDiscoveryVirtualHosts // {
${config.mailserver.fqdn}.enableACME = true;
};
}