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
+# The combination of bounce_return_message and bounce_return_body
# allows us to return only the headers within a bounce
bounce_return_message = true
+queue_time_overall \
+deliver_time \
+received_recipients \
+ +sender_on_delivery \
+ +return_path_on_delivery \
+ +incoming_port \
+unknown_in_list \
+smtp_connection \
+smtp_incomplete_transaction \
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>
deny condition = ${if !eq {$acl_m_prf}{PopconMail}}
!verify = sender
+ warn !hosts = +debianhosts
+ condition = ${if !eq {$acl_m_prf}{PopconMail}}
+ condition = ${if >{${eval:$acl_c_scr+0}}{0}}
+ ratelimit = 10 / 60m / per_rcpt / strict / $sender_host_address
+ log_message = Sender rate $sender_rate / $sender_rate_period (limit: $sender_rate_limit)
+
defer !hosts = +debianhosts
condition = ${if !eq {$acl_m_prf}{PopconMail}}
condition = ${if >{${eval:$acl_c_scr+0}}{0}}
protocol_name=${uc:$received_protocol}\n\
instance=${acl_m_grey}\n\
helo_name=${sender_helo_name}\n\
-<%- if scope.call_function('versioncmp', [@lsbmajdistrelease, '8']) <= 0 -%>
- client_address=${substr_-3:${mask:$sender_host_address/24}}\n\
-<%- else -%>
client_address=${sender_host_address}\n\
-<%- end -%>
client_name=${sender_host_name}\n\
sender=${sender_address}\n\
recipient=$local_part@$domain\n\n
<%- if has_variable?("clamd") && @clamd -%>
discard condition = ${if eq {$acl_m_prf}{blackhole}}
- <%- if scope.call_function('versioncmp', [@lsbmajdistrelease, '8']) <= 0 -%>
- demime = *
- <%- end -%>
malware = */defer_ok
log_message = discarded malware message for $recipients
deny condition = ${if !eq {$acl_m_prf}{markup}}
condition = ${if !eq {$acl_m_prf}{PopconMail}}
- <%- if scope.call_function('versioncmp', [@lsbmajdistrelease, '8']) <= 0 -%>
- demime = *
- <%- end -%>
malware = */defer_ok
message = malware detected: $malware_name: message rejected
warn condition = ${if eq {$acl_m_prf}{markup}}
- <%- if scope.call_function('versioncmp', [@lsbmajdistrelease, '8']) <= 0 -%>
- demime = *
- <%- end -%>
malware = */defer_ok
message = X-malware detected: $malware_name
# 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_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
<%- 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}}:\
# RETRY CONFIGURATION #
######################################################################
-# This single retry rule applies to all domains and all errors. It specifies
-# retries every 15 minutes for 2 hours, then increasing retry intervals,
-# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
-# hours, then retries every 8 hours until 4 days have passed since the first
-# failed delivery.
-
# Domain Error Retries
# ------ ----- -------
-
begin retry
+## Note that retry rules specify when an address / host / mail should
+## become eligible for retrying. They do not specify when the retry
+## attempt will actually occur, as this is dependent on queue run
+## frequency and timing.
+
+# For mail to debian.org addresses, this rule starts with
+# retries every 10 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 14 days have passed since the first
+# failed delivery.
debian.org * F,2h,10m; G,16h,2h,1.5; F,14d,8h
+
+# Bounces should get retried every 10 minutes for up to 2 hours
* * senders=: F,2h,10m
+
+# Temporary errors at RCPT TO get retried at 5 minute intervals for
+# 2 hours, then 10 minute intervals for 4 hours, and finally at 15
+# minute intervals for 4 days. This assumes that the cause of the
+# error will get resolved quickly in most cases.
* rcpt_4xx F,2h,5m; F,4h,10m; F,4d,15m
+
+# For all remaining mails, addresses and hosts, this rule starts with
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
* * F,2h,15m; G,16h,2h,1.5; F,4d,8h
# End of Exim 4 configuration