Exim's Transport Configuration

I have already explained a little about transports, the section begins with the heading "begin transports". The order of the list is not important as a specific transport will be choosen by the router.

 
begin transports

#####################################################
### end transport/00_exim-config_header
#####################################################
#####################################################
### transport/30_exim-config_address_file
#####################################################

# This transport is used for handling deliveries directly to files that are
# generated by aliasing or forwarding.
#
address_file:
  debug_print = "T: address_file for $local_part@$domain"
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

#####################################################
### end transport/30_exim-config_address_file
#####################################################
#####################################################
### transport/30_exim-config_address_pipe
#####################################################

# This transport is used for handling pipe deliveries generated by alias or
# .forward files. If the commands fails and produces any output on standard
# output or standard error streams, the output is returned to the sender
# of the message as a delivery error.
# You can set different transports for aliases and forwards if you want to
# - see the references to address_pipe in the routers section above.
address_pipe:
  debug_print = "T: address_pipe for $local_part@$domain"
  driver = pipe
  return_fail_output

#####################################################
### end transport/30_exim-config_address_pipe
#####################################################
#####################################################
### transport/30_exim-config_address_reply
#####################################################

# This transport is used for handling autoreplies generated by the filtering
# option of the userforward router.
#
address_reply:
  debug_print = "T: autoreply for $local_part@$domain"
  driver = autoreply

#####################################################
### end transport/30_exim-config_address_reply
#####################################################
#####################################################
### transport/30_exim-config_mail_spool
#####################################################

### transport/30_exim-config_mail_spool

# This transport is used for local delivery to user mailboxes in traditional
# BSD mailbox format.
#
mail_spool:
  debug_print = "T: appendfile for $local_part@$domain"
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660
  mode_fail_narrower = false

#####################################################
### end transport/30_exim-config_mail_spool
#####################################################
#####################################################
### transport/30_exim-config_maildir_home
#####################################################

### transport/30_exim-config_maildir_home
#################################

# Use this instead of mail_spool if you want to to deliver to Maildir in
# home-directory - change the definition of LOCAL_DELIVERY
#
maildir_home:
  debug_print = "T: maildir_home for $local_part@$domain"
  driver = appendfile
  .ifdef MAILDIR_HOME_MAILDIR_LOCATION
  directory = MAILDIR_HOME_MAILDIR_LOCATION
  .else
  directory = $home/Maildir
  .endif
  .ifdef MAILDIR_HOME_CREATE_DIRECTORY
  create_directory
  .endif
  .ifdef MAILDIR_HOME_CREATE_FILE
  create_file = MAILDIR_HOME_CREATE_FILE
  .endif
  delivery_date_add
  envelope_to_add
  return_path_add
  maildir_format
  .ifdef MAILDIR_HOME_DIRECTORY_MODE
  directory_mode = MAILDIR_HOME_DIRECTORY_MODE
  .else
  directory_mode = 0700
  .endif
  .ifdef MAILDIR_HOME_MODE
  mode = MAILDIR_HOME_MODE
  .else
  mode = 0600
  .endif
  mode_fail_narrower = false

#####################################################
### end transport/30_exim-config_maildir_home
#####################################################
#####################################################
### transport/30_exim-config_maildrop_pipe
#####################################################

maildrop_pipe:
  debug_print = "T: maildrop_pipe for $local_part@$domain"
  driver = pipe
  path = "/bin:/usr/bin:/usr/local/bin"
  command = "/usr/bin/maildrop"
  return_path_add
  delivery_date_add
  envelope_to_add

#####################################################
### end transport/30_exim-config_maildrop_pipe
#####################################################
#####################################################
### transport/30_exim-config_procmail_pipe
#####################################################

procmail_pipe:
  debug_print = "T: procmail_pipe for $local_part@$domain"
  driver = pipe
  path = "/bin:/usr/bin:/usr/local/bin"
  command = "/usr/bin/procmail"
  return_path_add
  delivery_date_add
  envelope_to_add

#####################################################
### end transport/30_exim-config_procmail_pipe
#####################################################
#####################################################
### transport/30_exim-config_remote_smtp
#####################################################

### transport/30_exim-config_remote_smtp
#################################
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp
#####################################################
### end transport/30_exim-config_remote_smtp
#####################################################
#####################################################
### transport/30_exim-config_remote_smtp_smarthost
#####################################################

### transport/30_exim-config_remote_smtp_smarthost
#################################

# This transport is used for delivering messages over SMTP connections
# to a smarthost. The local host tries to authenticate and does some
# modification in headers and return-path.
# This transport is used for smarthost and satellite configurations.

remote_smtp_smarthost:
  debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
  driver = smtp
  hosts_try_auth = ${if exists {CONFDIR/passwd.client}{DCsmarthost}{}}
  tls_tempfail_tryclear = false
  DEBCONFheaders_rewriteDEBCONF
  DEBCONFreturn_pathDEBCONF
#####################################################
### end transport/30_exim-config_remote_smtp_smarthost
#####################################################
#####################################################
### transport/35_exim-config_address_directory
#####################################################
# This transport is used for handling file addresses generated by alias
# or .forward files if the path ends in "/", which causes it to be treated
# as a directory name rather than a file name.

address_directory:
  debug_print = "T: address_directory for $local_part@$domain"
  driver = appendfile
  envelope_to_add = true
  return_path_add = true
  check_string = ""
  escape_string = ""
  maildir_format

Transports Definition

  begin transports

Address File Transport

This transport is used for handling deliveries directly to files that are generated by aliasing or forwarding. Notice the three header lines that are added to the mail message

  address_file:
   debug_print = "T: address_file for $local_part@$domain"
   driver = appendfile
   delivery_date_add
   envelope_to_add
   return_path_add

Address_pipe Transport

This transport is used for handling pipe deliveries generated by alias or .forward files. If the commands fails and produces any output on standard output or standard error streams, the output is returned to the sender of the message as a delivery error. You can set different transports for aliases and forwards if you want to - see the references to address_pipe in the routers configuration section.

 
address_pipe:
  debug_print = "T: address_pipe for $local_part@$domain"
  driver = pipe
  return_fail_output


Note: the return_fail_output ensures that if the command fails any output is put into the bounced message 

Address_reply Transport

This transport is used for handling autoreplies generated by the filtering option of the userforward router. The autoreply transport is not a real transport but actually generates another message that requires to be delivered via the normally methods.

  address_reply:
   debug_print = "T: autoreply for $local_part@$domain"
   driver = autoreply

Mail_spool Transport

This transport is used for local delivery to user mailboxes in traditional BSD mailbox format. The mode_fail_narrower option relates to the appended files permission, if set to false the delivery is attempted with nthe existing mode.

 
mail_spool:
  debug_print = "T: appendfile for $local_part@$domain"
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660
  mode_fail_narrower = false

Maildir_home Transport

Use this instead of mail_spool if you want to to deliver to Maildir in home-directory - change the definition of LOCAL_DELIVERY. There are lots of dependencies here which need to be set in the Main configuration section.

 
maildir_home:
  debug_print = "T: maildir_home for $local_part@$domain"
  driver = appendfile
  .ifdef MAILDIR_HOME_MAILDIR_LOCATION
     directory = MAILDIR_HOME_MAILDIR_LOCATION
  .else
     directory = $home/Maildir
  .endif
  .ifdef MAILDIR_HOME_CREATE_DIRECTORY
     create_directory
  .endif
  .ifdef MAILDIR_HOME_CREATE_FILE
     create_file = MAILDIR_HOME_CREATE_FILE
  .endif
  delivery_date_add
  envelope_to_add
  return_path_add
  maildir_format
  .ifdef MAILDIR_HOME_DIRECTORY_MODE
     directory_mode = MAILDIR_HOME_DIRECTORY_MODE
  .else
     directory_mode = 0700
  .endif
  .ifdef MAILDIR_HOME_MODE
     mode = MAILDIR_HOME_MODE
  .else
     mode = 0600
  .endif
  mode_fail_narrower = false

Maildrop_pipe Transport

This transport uses the maildrop software to delivery the message, the router would have already checked that the maildrop binary exists.

  maildrop_pipe:
   debug_print = "T: maildrop_pipe for $local_part@$domain"
   driver = pipe
   path = "/bin:/usr/bin:/usr/local/bin"
   command = "/usr/bin/maildrop"
   return_path_add
   delivery_date_add
   envelope_to_add

Procmail_pipe Transport

This transport uses the procmail software to delivery the message, the router would have already checked that the procmail binary exists.

 
procmail_pipe:
  debug_print = "T: procmail_pipe for $local_part@$domain"
  driver = pipe
  path = "/bin:/usr/bin:/usr/local/bin"
  command = "/usr/bin/procmail"
  return_path_add
  delivery_date_add
  envelope_to_add

Remote_smtp Transport

This transport is used for delivering messages over SMTP connections. This is the transport that will probably be used the most.

  remote_smtp:
   debug_print = "T: remote_smtp for $local_part@$domain"
   driver = smtp

Remote_smtp_smarthost Transport

This transport is used for delivering messages over SMTP connections to a smarthost. The local host tries to authenticate and does some modification in headers and return-path. This transport is used for smarthost and satellite configurations.

 

remote_smtp_smarthost:
   debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
   driver = smtp
   hosts_try_auth = ${if exists {CONFDIR/passwd.client}{DCsmarthost}{}}
   tls_tempfail_tryclear = false
   DEBCONFheaders_rewriteDEBCONF
   DEBCONFreturn_pathDEBCONF

Note: check out string expansion on more information regarding string expansion.

Address_directory Transport

This transport is used for handling file addresses generated by alias or .forward files if the path ends in "/", which causes it to be treated as a directory name rather than a file name, also see the routers configuration section.

  address_directory:
   debug_print = "T: address_directory for $local_part@$domain"
   driver = appendfile
   envelope_to_add = true
   return_path_add = true
   check_string = ""
   escape_string = ""
   maildir_format