# flushing' operations, but should be populated with a list
# of trusted machines. Wildcards are not permitted
# bsmtp_domains - Domains that we deliver locally via bsmtp
+# submission-domains - Domains for which mail will be accepted via the
+# submission port
<%- if @is_mailrelay -%>
# mailhubdomains - Domains for which we are the MX, but the mail is relayed
# elsewhere. This is designed for use with small volume or
localpartlist postmasterish = postmaster : abuse : hostmaster
-hostlist debianhosts = <; ; 127.0.0.1 ; ::1 ; /var/lib/misc/thishost/debianhosts ; 89.16.166.49 ; 82.195.75.76 ; 2001:41b8:202:deb:bab5:0:52c3:4b4c
+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
+domainlist google_mxen = aspmx.l.google.com : gmail-smtp-in.l.google.com : \
+ *.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.
# expensive, you can specify the networks for which a lookup is done, or
# remove the setting entirely.
host_lookup = *
-# dns_ipv4_lookup = !localhost (disabled upon sgrans request, zobel, 2010-03-16)
+dns_ipv4_lookup = +google_mxen
# If this option is set, then any process that is running as one of the
# listed users may pass a message to Exim and specify the sender's
gecos_pattern = ^([^,:]*)
gecos_name = $1
+# Do *not* include the body of the original message in a bounce
+# The combinaton of bounce_return_message and bounce_return_body
+# allows us to return only the headers within a bounce
+
+bounce_return_message = true
+bounce_return_body = false
+
# This tells Exim to immediately discard error messages (ie double bounces).
ignore_bounce_errors_after = 0s
auto_thaw = 1d
tls_advertise_hosts = *
smtp_enforce_sync = true
-log_selector = +tls_cipher +tls_peerdn +queue_time +deliver_time +smtp_connection +smtp_incomplete_transaction +smtp_confirmation +smtp_protocol_error
+log_selector = \
+ +tls_cipher \
+ +tls_peerdn \
+ +queue_time \
+ +queue_time_overall \
+ +deliver_time \
+ +received_recipients \
+ +sender_on_delivery \
+ +return_path_on_delivery \
+ +incoming_port \
+ +unknown_in_list \
+ +smtp_connection \
+ +smtp_incomplete_transaction \
+ +smtp_confirmation \
+ +smtp_syntax_error \
+ +smtp_no_mail \
+ +smtp_protocol_error
received_header_text = Received: ${if def:sender_rcvhost {from $sender_rcvhost\n\t}\
{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\
hosts = !+debianhosts
message = mail from <$sender_address> not allowed externally
- deny condition = ${if match_domain{$sender_address_domain}{+virtual_domains}}
+ deny sender_domains= +virtual_domains
condition = ${if exists {${extract{directory}{VSENDERDOMAINDATA}{${value}/neversenders}}}}
condition = ${lookup{$sender_address_local_part}lsearch{${extract{directory}{VSENDERDOMAINDATA}{${value}/neversenders}}}{true}}
message = no mail should ever come from <$sender_address>
<%- if @is_mailrelay -%>
relay_manualroute:
+ debug_print = "R: relay_manualroute for $local_part@$domain"
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
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
# directory. (The alternative, which most other unixes use, is to deliver
# as the user's own group, into a sticky-bitted directory)
local_delivery:
+ debug_print = "T: local_delivery for $local_part@$domain"
driver = appendfile
file = /var/mail/${local_part}
group = mail
# want this to happen only when the pipe fails to complete normally.
address_pipe:
+ debug_print = "T: address_pipe for $local_part@$domain"
driver = pipe
current_directory = ${home}
environment = "EXTENSION=${substr_1:${local_part_suffix}}:\
# mentioned elsewhere in this configuration file.
address_file:
+ debug_print = "T: address_file for $local_part@$domain"
driver = appendfile
return_path_add
address_file_group:
+ debug_print = "T: address_file_group for $local_part@$domain"
driver = appendfile
return_path_add
mode = 0660
# are passed to address_directory.
address_directory:
+ debug_print = "T: address_directory for $local_part@$domain"
driver = appendfile
check_string =
maildir_format
# option of the forwardfile director. It has a conventional name, since it
# is not actually mentioned elsewhere in this configuration file.
address_reply:
+ debug_print = "T: address_reply for $local_part@$domain"
driver = autoreply
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
+ debug_print = "T: remote_smtp for $local_part@$domain"
+ driver = smtp
+ connect_timeout = 15s
+ delay_after_cutoff = false
+ tls_certificate = /etc/exim4/ssl/thishost.crt
+ tls_privatekey = /etc/exim4/ssl/thishost.key
+
+remote_smtp_single_domain:
+ debug_print = "T: remote_smtp_single_domain for $local_part@$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
<%- end -%>
# Send the message to procmail
procmail_pipe:
+ debug_print = "T: procmail_pipe for $local_part@$domain"
driver = pipe
command = /usr/bin/procmail -a ${substr_1:${local_part_suffix}}
return_path_add
user = ${local_part}
bsmtp:
+ debug_print = "T: bsmtp for $local_part@$domain"
driver = appendfile
batch_max = 100
file = ${host}
<%- if @is_bugsmx -%>
bugs_pipe:
+ debug_print = "T: bugs_pipe for $local_part@$domain"
driver = pipe
command = /srv/bugs.debian.org/mail/run-procmail
environment = "EXTENSION=${substr_1:${local_part_suffix}}:\