eximconf: add an alternative SMTP router for "single domain" domains
authorAdam D. Barratt <adam@adam-barratt.org.uk>
Thu, 26 Sep 2019 17:04:12 +0000 (18:04 +0100)
committerAdam D. Barratt <adam@adam-barratt.org.uk>
Thu, 26 Sep 2019 17:04:12 +0000 (18:04 +0100)
These are domains that only allow a single recipient domain per SMTP
connection, in order to allow simple differentiation of filtering
options.

Signed-off-by: Adam D. Barratt <adam@adam-barratt.org.uk>
modules/exim/templates/eximconf.erb

index 49ca251..9768f25 100644 (file)
@@ -132,6 +132,9 @@ hostlist debianhosts = <; ; 127.0.0.1 ; ::1 ; /var/lib/misc/thishost/debianhosts
 
 hostlist reservedaddrs = 0.0.0.0/8 : 127.0.0.0/8 : 10.0.0.0/8 : 169.254.0.0/16 : 172.16.0.0/12 : 192.0.0.0/24 : 192.168.0.0/16 : 224.0.0.0/4 : 240.0.0.0/5 : 248.0.0.0/5
 
 
 hostlist reservedaddrs = 0.0.0.0/8 : 127.0.0.0/8 : 10.0.0.0/8 : 169.254.0.0/16 : 172.16.0.0/12 : 192.0.0.0/24 : 192.168.0.0/16 : 224.0.0.0/4 : 240.0.0.0/5 : 248.0.0.0/5
 
+domainlist google_mxen = aspmx.l.google.com : gmail-smtp-in.l.google.com
+domainlist single_domain_mx = +google_mxen
+
 <%- if @is_mailrelay -%>
 # Domains we relay for; that is domains that aren't considered local but we 
 # accept mail for them.
 <%- if @is_mailrelay -%>
 # Domains we relay for; that is domains that aren't considered local but we 
 # accept mail for them.
@@ -1057,7 +1060,10 @@ begin routers
 relay_manualroute:
   driver = manualroute
   domains = +mailhubdomains
 relay_manualroute:
   driver = manualroute
   domains = +mailhubdomains
-  transport = remote_smtp
+  transport = ${if forany{${lookup dnsdb{>: mxh=$domain}}}\
+                  {match_domain{$item}{+single_domain_mx}}\
+                  {remote_smtp_single_domain}{remote_smtp}\
+               }
   route_data = ${lookup{$domain}lsearch{/etc/exim4/manualroute}}
   require_files = /etc/exim4/manualroute
 
   route_data = ${lookup{$domain}lsearch{/etc/exim4/manualroute}}
   require_files = /etc/exim4/manualroute
 
@@ -1100,7 +1106,10 @@ dnslookup:
   debug_print = "R: dnslookup for $local_part@$domain"
   driver = dnslookup
   domains = !+handled_domains
   debug_print = "R: dnslookup for $local_part@$domain"
   driver = dnslookup
   domains = !+handled_domains
-  transport = remote_smtp
+  transport = ${if forany{${lookup dnsdb{>: mxh=$domain}}}\
+                  {match_domain{$item}{+single_domain_mx}}\
+                  {remote_smtp_single_domain}{remote_smtp}\
+               }
   ignore_target_hosts = +reservedaddrs
   no_more
 
   ignore_target_hosts = +reservedaddrs
   no_more
 
@@ -1563,6 +1572,14 @@ remote_smtp:
   tls_certificate = /etc/exim4/ssl/thishost.crt
   tls_privatekey = /etc/exim4/ssl/thishost.key
 
   tls_certificate = /etc/exim4/ssl/thishost.crt
   tls_privatekey = /etc/exim4/ssl/thishost.key
 
+remote_smtp_single_domain:
+  driver = smtp
+  connect_timeout = 15s
+  delay_after_cutoff = false
+  no_multi_domain
+  tls_certificate = /etc/exim4/ssl/thishost.crt
+  tls_privatekey = /etc/exim4/ssl/thishost.key
+
 <%- if @use_smarthost -%>
 remote_smtp_smarthost:
   debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
 <%- if @use_smarthost -%>
 remote_smtp_smarthost:
   debug_print = "T: remote_smtp_smarthost for $local_part@$domain"