Go to the first, previous, next, last section, table of contents.


14 Generic options for transports

The generic options for transports are as follows:

driver (transport) option

Option: driver
Type: string
Default: unset

This specifies which of the available transport drivers is to be used. For example:


driver = smtp

There is no default, and this option must be set for every transport.

headers_add (transport) option

Option: headers_add
Type: string
Default: unset

This option specifies a string of text which is expanded and added to the header portion of a message as it is transported. It should be in the form of one or more RFC 822 header lines, separated by newlines (coded as `\n' inside a quoted string), for example:


add_headers = "X-added: this is a header added at $tod_log\n\
               X-added: this is another"

Exim does not check the syntax of these added headers. A newline is supplied at the end if one is not present. The text is added at the end of any existing headers. If you include a blank line within the string, you can subvert this facility into adding text at the start of the message's body.

The name `add_headers' was formerly used for this option, and is retained as a synonym for backward compatibility. Additional headers can also be specified by directors and routers. See chapter "Common generic options for directors and routers" and section "Adding and removing headers" in chapter "Message processing".

headers_remove (transport) option

Option: headers_remove
Type: string
Default: unset

This option consists of a colon-separated list of header names, not including the terminating colon, for example:


remove_headers = "return-recipt-to:acknowledge-to"

Any existing headers matching those names are not included in any message that transmitted by the transport. However, added headers may have these names. Thus it is possible to replace a header by specifying it in `remove_headers' and supplying the replacement in `add_headers'.

The name `remove_headers' was formerly used for this option, and is retained as a synonym for backward compatibility. Headers to be removed can also be specified by directors and routers. See chapter "Common generic options for directors and routers" and section "Adding and removing headers" in chapter "Message processing".

shadow_condition (transport) option

Option: shadow_condition
Type: string
Default: unset

See `shadow_transport' below.

shadow_transport (transport) option

Option: shadow_transport
Type: string
Default: unset

This facility is somewhat experimental, and may change in future. A local transport may set the `shadow_transport' option to the name of another, previously-defined, local transport. Shadow remote transports are not supported.

Whenever a delivery to the main transport succeeds, and either `shadow_condition' is unset, or its expansion does not result in a forced expansion failure or the empty string or one of the strings `0' or `no' or `false', the message is also passed to the shadow transport. However, the result of the shadow transport is discarded and does not affect the subsequent processing of the message. Only a single level of shadowing is provided; the `shadow_transport' option is ignored on any transport when it is running as a shadow. Options concerned with output from pipes are also ignored.

The log line for the successful delivery has an item added on the end, of the form


ST=<shadow transport name>

If the shadow transport did not succeed, the error message is put in parentheses afterwards.

Shadow transports can be used for a number of different purposes, including keeping more detailed log information than Exim normally provides, and implementing the automatic acknowledgement policies that some sites insist on.

transport_filter (transport) option

Option: transport_filter
Type: string
Default: unset

This option sets up a filtering (in the Unix shell sense) process for messages at transport time. It should not be confused with mail filtering as set up by individual users.

When the message is about to be written out, the command specified by `transport_filter' is started up in a separate process, and the entire message, including the headers, is passed to it on its standard input (this in fact is done from a third process, to avoid deadlock). This happens before any SMTP-specific processing, such as turning `\n' into `\r\n' and escaping lines beginning with a dot.

The filter's standard output is read and written to the message's destination. The filter can perform any transformations it likes, but of course should take care not to break RFC 822 syntax. A demonstration Perl script is provided in `util/transport-filter.pl'; this makes a few arbitrary modifications just to show the possibilities.

The value of the option is the command string for starting up the filter, which run directly from Exim, not under a shell. The string is parsed by Exim in the same way as a command string for the `pipe' transport: Exim breaks it up into arguments and then expands each argument separately. The special argument `$pipe_addresses' is replaced by a number of arguments, one for each address that applies to this delivery. (This isn't an ideal name for this feature here, but as it was already implemented for the `pipe' transport, it seemed sensible not to change it.)

The expansion variables `$host' and `$host_address' are available when the transport is a remote one. They are set only for the expansion of a transport filter command, as that is the only thing that is expanded after a connection has been set up. For example:


transport_filter = "/some/directory/transport-filter.pl \
  $host $host_address $sender_address $pipe_addresses"

The filter process is run under the same uid and gid as the normal delivery. For remote deliveries this is the exim uid/gid if they are defined.

If a transport filter is set on an autoreply transport, the original message is passed through the filter as it is being copied into the newly generated message, which happens if the `return_message' option is set.


Go to the first, previous, next, last section, table of contents.