+#################################
+# The routers that handle the actual local delivery of mail. These routers all
+# work just on the localhost "domain", so any previous routers that want to
+# have mail delivered locally should redirect to username@localhost and set
+# redirect_router to "local_delivery". These routers are not used directly on
+# incoming messages, the first router guarantees this.
+#
+# These routers support .forward files, procmail and mbox delivery in
+# /var/mail, each tried in turn.
+#################################
+
+
+# Dummy noop router, that ensures that these routers are never called directly
+# on an incoming message and enforces that they only be called when a previous
+# router explicitely sets redirect_router to local_delivery.
+always_fail:
+ debug_print = "R: local_delivery for $local_part@$domain"
+ driver = redirect
+ data =
+ more = false
+ cannot_route_message = "Internal error"
+
+# Dummy noop router, that can be used by other routers for the value of
+# redirect_router or pass_router, without being dependent on the (order of)
+# actual delivery routers below.
+local_delivery:
+ debug_print = "R: local_delivery for $local_part@$domain"
+ driver = redirect
+ data =
+
+# This router handles forwarding using traditional .forward files in users'
+# home directories. It also allows mail filtering with a forward file
+# starting with the string "# Exim filter" or "# Sieve filter".
+#
+# The no_verify setting means that this router is skipped when Exim is
+# verifying addresses. Similarly, no_expn means that this router is skipped if
+# Exim is processing an EXPN command.
+#
+# The check_ancestor option means that if the forward file generates an
+# address that is an ancestor of the current one, the current one gets
+# passed on instead. This covers the case where A is aliased to B and B
+# has a .forward file pointing to A.
+#
+# The four transports specified at the end are those that are used when
+# forwarding generates a direct delivery to a directory, or a file, or to a
+# pipe, or sets up an auto-reply, respectively.
+#
+# Any syntax errors in the .forward are sent with the real- prefix, which the
+# real_local router directly delivers through the maildir_home transport,
+# avoiding the routers in this file.
+userforward:
+ debug_print = "R: userforward for $local_part@$domain"
+ driver = redirect
+ domains = localhost
+ check_local_user
+ file = $home/.forward
+ require_files = $local_part:$home/.forward
+ no_verify
+ no_expn
+ check_ancestor
+ allow_filter
+ forbid_smtp_code = true
+ directory_transport = address_directory
+ file_transport = address_file
+ pipe_transport = address_pipe
+ reply_transport = address_reply
+ skip_syntax_errors
+ syntax_errors_to = real-$local_part@$domain
+ syntax_errors_text = \
+ This is an automatically generated message. An error has\n\
+ been found in your .forward file. Details of the error are\n\
+ reported below. While this error persists, you will receive\n\
+ a copy of this message for every message that is addressed\n\
+ to you. If your .forward file is a filter file, or if it is\n\
+ a non-filter file containing no valid forwarding addresses,\n\
+ a copy of each incoming message will be put in your normal\n\
+ mailbox. If a non-filter file contains at least one valid\n\
+ forwarding address, forwarding to the valid addresses will\n\
+ happen, and those will be the only deliveries that occur.
+
+# Let procmail deliver the message if a global or local (in the user's
+# homedir) procmailrc exists.
+procmail:
+ debug_print = "R: procmail for $local_part@$domain"
+ driver = accept
+ domains = localhost
+ check_local_user
+ transport = procmail_pipe
+ # emulate OR with "if exists"-expansion
+ require_files = ${local_part}:\
+ ${if exists{/etc/procmailrc}\
+ {/etc/procmailrc}{${home}/.procmailrc}}:\
+ +/usr/bin/procmail
+ no_verify
+ no_expn
+
+# This router delivers to /var/mail.
+local_user:
+ debug_print = "R: local_user for $local_part@$domain"
+ driver = accept
+ domains = localhost
+ check_local_user
+ local_parts = ! root
+ transport = maildir_home
+ # If we get here, some previous router redirected to a non-existing user.
+ # That should not happen!
+ cannot_route_message = Unknown user: This should not happen
+
+# vim: set sts=2 expandtab sw=2 ai: