--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/blueprint Wed Nov 19 02:00:33 2014 +0100
@@ -0,0 +1,1232 @@
+Konfig im Detail
+----------------
+
+# Welche Konfiguration wird eingelesen?
+
+ > exim -bV | tail -n 1
+ TODO: exim -be '$config_file'
+
+# Wann wird die Konfiguration eingelesen?
+
+ - Klar - beim Start
+ - Aber - wann wird gestartet?
+ - Start Daemon
+ - Signal HUP
+ - re-exec for verschiedene Zwecke
+ - Achtung:
+ - exim4.conf + .include ist "statisch"
+ - lists, lookups, … "dynamisch"
+ - Config-Parser: nur simple Syntax-Checks
+ - trim, "de-comment"
+
+# Syntax der Konfiguration
+
+## Macros und …
+ - Macros - Text-Ersatz während des Einlesens,
+ ggf. bedingt über .ifdef
+ - .include, .include_ifexists
+
+ > exim -DFOO=bar -C <(echo primary_hostname = FOO) -bP primary_hostname
+
+## Options
+ - statische Namen
+ - benamst Listen
+ - Instanzen von Routern, Transports, ..
+
+## Values
+
+### bool
+ Format: true|yes|false|no
+ <option> eg: split_spool_directory
+ no_<option> eg: no_split_spool_directory
+ not_<option> eg: not_split_spool_directory
+
+
+ +---------------------+---------+-------------+--------------+
+ |split_spool_directory|Use: main|Type: boolean|Default: false|
+ +---------------------+---------+-------------+--------------+
+ > exim -C <(echo split_spool_directory = no) -bP split_spool_directory
+
+
+### integer:
+ Format: <n>[<suffix>] eg: 27M
+ 0<n>[<suffix>] eg: 01000M
+ 0x<n>[<suffix>] eg: 0xFFFFK
+ suffix: k|m
+
+ +-----------------+---------+-------------+----------+
+ |check_spool_space|Use: main|Type: integer|Default: 0|
+ +-----------------+---------+-------------+----------+
+ > exim -C <(echo check_spool_space = 01000M) -bP check_spool_space
+
+### fixed-point
+ Format: <i>[.d[d[d]]] eg: 0.234
+
+ +----------------------+---------+-----------------+--------------+
+ |deliver_queue_load_max|Use: main|Type: fixed-point|Default: unset|
+ +----------------------+---------+-----------------+--------------+
+ > exim -C <(echo deliver_queue_load_max = 3.3) -bP deliver_queue_load_max
+
+### time intervals
+ Format: n<suffix>... eg: 2w3d
+ suffix: s|m|h|d|w
+
+ +---------+---------+----------+-----------+
+ |auto_thaw|Use: main|Type: time|Default: 0s|
+ +---------+---------+----------+-----------+
+ > exim -C <(echo auto_thaw = 0s) -bP auto_thaw
+
+### strings
+ Fromat: <string> eg: localhost
+ <"string"> eg: " A\x42C"
+
+ Quoting für \\, \n, \r, \t, \ddd, \xdd und führende oder baumelnde Spaces
+
+ - Vorsicht: Expansion
+ - Vorsicht: User/Groups
+
+ +----------------+---------+------------+------------------+
+ |primary_hostname|Use: main|Type: string|Default: see below|
+ +----------------+---------+------------+------------------+
+ > exim -C <(echo 'primary_hostname = a\x41b') -bP primary_hostname
+ > exim -C <(echo 'primary_hostname = "a\x41b"') -bP primary_hostname
+
+ Steuerzeichen werden für die Ausgabe escaped:
+ > exim -C <(echo 'primary_hostname = "a\x091b"') -bP primary_hostname
+
+
+### Lists
+ Format: <item>:… eg: a:b:c:d vs. a:b::c:d
+ eg: : -> ein leeres Element
+ [<<sep> <item><sep>…] eg: <, a,b,c
+
+ - leere Felder am Ende werden „gestrippt“
+ - Whitespace der Felder wird gestrippt
+ - leeres Feld in der Mitte: a: :b
+ - leeres Felder am Anfang bleibt
+
+ > exim -be '-be '${map{<, ,a,b,,, ,c,}{<$item>}}'
+
+### Regexp
+ Format ^…
+
+ Beginnt mit ^, damit es sich von einem normalen String unterscheidet!
+ Achtung, Backslash ggf. vom String-Expander gefressen,
+ hauptsächlich in Listen, die RE enthalten dürfen
+
+ Ggf. mit \N..\N
+
+## Lookups
+
+ - 2 Syntaxen
+ - 2 Types
+ => 4 Varianten
+
+### Syntax 1: explizit - der Key oder die Frage wird ausdrücklich formuliert
+ es ist ein String-Expansion. s.u.
+
+ ${lookup{<key>}<type>{file}} eg: ${lookup{$domain}dsearch{/etc/exim4/domains}}
+ ${lookup <type> {<query>}} eg: ${lookup ldap {ldap:///o=roka?mail?sub?uid=${quote_ldap:$local_part}}}
+
+ Liefert eine Liste zurück, ggf. Listentrenner unorthodox und muss massiert werden
+
+### Syntax 2: implizit - der Key ergibt sich aus dem Kontext
+ keine Stringexpansion, sondern ein Element für sich
+
+
+ <type>;<file> eg: domains = dsearch;/etc/exim4/domains
+ <type>;<query> eg: sqlite;/etc/db.sqlite SELECT … WHERE ${quote_sqlite:$local_part} …
+ ldap;ldap:///o=roka?mail?sub?…
+
+ - Auffindes des "impliziten" Keys
+ - Query: Success der Query ist entscheidend, nicht der Resultat-Wert
+ - Achtung: In einer Liste ggf. an den Listentrenner denken!
+ domains = ldap;ldap::///o=…
+
+### Style 1: Single Key
+
+ ${lookup{<key>}<type>{<file>} eg: ${lookup{$sender_host_address}iplsearch{/etc/exim4/blacklist}}
+ <type>;<file> eg: hosts = iplsearch;/etc/exim4/blacklist
+
+ <type> ist dann lsearch, dsearch, iplsearch, …
+
+### Style 2: Query Style
+
+ ${lookup <type> {<query>}} eg: ${lookup dnsdb{mxh=roka.net}}
+ <type>;<query> eg: dnsdb;mxh=roka.net
+
+
+ Matrix
+
+ style| single key | query style
+ syntax \| |
+ ---------+--------------------------------+---------------------------
+ explicit | ${lookup{<key>}<type>{<file>} | ${lookup <type> {<query>}}
+ implizit | <type>;<file> | [ <type>;<query> ]
+
+
+ eg. config:
+
+ domains = ${lookup{$domain}lsearch{/etc/exim4/local_domains}} # WRONG
+ = <\n ${lookup mysql { SELECT domain FROM domains }} # BETTER
+ = ${lookup mysql { SELECT DISTINCT(domain) FROM domains WHERE domain = $domain}} # ggf BEST
+ vs
+ domains = lsearch;/etc/exim4/local_domains # OK
+
+
+## Named Lists
+ Format: <listtype> <name>
+ <listtype>_cache <name>
+ Bezug: +<name>
+
+ Typen: domainlist, hostlist, addresslist, localpartlist
+ Caching nur wenn die RHS keine '$' enthält, also konstante Ergebnisse zu erwarten sind.
+
+ Jeder Listtyp hat seine Eigenarten.
+
+### domainlist
+
+ domainlist - @, @mx_primary, @mx_secondary, @mx_any, <pattern>, lookup, literal
+ hostlist - Namen, Adressen spec(10.11 ff)
+
+
+## String-Expansion
+
+ - von links nach rechts: $ und \ wirken als Trigger
+
+ > exim -be <string>
+ > exim -bem <message-file> <string>
+ > exim -be -Mset <spool-id> <string>
+
+ eg: exim -be '$primary_hostname'
+ exim -be '$tod_full'
+ exim -bem <(echo 'Subject: Hi') '$h_subject:'
+
+ Expansionen liefern neuen Text zurück oder können „forced expansion failure“
+ bewirken
+
+## Expansions-Items
+
+### Variablen
+ Format: $<variable> eg: $localhost_number
+ ${<variable>}
+### Operatoren
+ Format: ${<op>:<string>}
+ Für einfache Expansionen, lc, uc, hash, …
+
+### Funktionen
+ Format ${<function>{string1}...}
+
+# Debugging
+
+## Konfiguration
+
+ - > exim -bV
+
+## Routing / Transport
+
+ > exim -bt <address>
+
+ > exim -bt <address>
+ > exim -bts <address>
+
+ Routing, Fake-Delivery
+ > exim -N < <message-file>
+
+ Fake-SMTP-Session
+ > exim -bh <sender-ip>
+
+ - debug_print Option für Router und Transports
+
+
+### Minimalkonfiguration
+
+ .-[ m.conf ]-------- {{{
+ |exim_user = exim
+ |spool_directory = /tmp/exim-spool
+ |log_file_path =
+ |
+ |begin routers
+ |
+ | default:
+ | driver = accept
+ | transport = null
+ | no_more
+ |
+ |begin transports
+ |
+ | null:
+ | driver = appendfile
+ | file = /dev/null
+ `------------- }}}
+
+
+# Routing
+
+ - Preconditions
+ - Driver und Driver-Options
+ Result: - accept -> DONE (transport oder neue Adresse)
+ - pass -> pass_router (bzw. nächster Router)
+ - decline -> nächster Router (or fail, wenn no_more)
+ - fail -> DONE (bounce)
+ - defer -> Semi-DONE (re-queue)
+ - error -> wie defer
+
+# DNS Lookups
+
+## DNSSEC
+ dns_dnssec_ok = 1
+
+ dnslookup.dnssec_require_domains =
+ smtp.dnssec_require_domains =
+ dnslookup.dnssec_request_domains =
+ smtp.dnssec_request_domains =
+
+# Anhang
+
+## Misc
+
+ Spec.txt durchsuchen (less):
+ - Option /^.<option> eg: |exim_user|
+ - Variable /^\$[^{] eg: $localhost_number
+ - Operators: /^\$\{<operator> eg: ${hash:<string>} …
+ - Condition: /^<condition> \{ eg: eq {<string1>}{<string2>} …
+ - Functions: /^\$\{ eg: ${map{<string1>}{<string2>}} …
+
+## List of Options {{{
+
+ |accept_8bitmime|Use: main|Type: boolean|Default: true|
+ |acl_not_smtp|Use: main|Type: string*|Default: unset|
+ |acl_not_smtp_mime|Use: main|Type: string*|Default: unset|
+ |acl_not_smtp_start|Use: main|Type: string*|Default: unset|
+ |acl_smtp_auth|Use: main|Type: string*|Default: unset|
+ |acl_smtp_connect|Use: main|Type: string*|Default: unset|
+ |acl_smtp_data|Use: main|Type: string*|Default: unset|
+ |acl_smtp_data_prdr|Use: main|Type: string*|Default: unset|
+ |acl_smtp_etrn|Use: main|Type: string*|Default: unset|
+ |acl_smtp_expn|Use: main|Type: string*|Default: unset|
+ |acl_smtp_helo|Use: main|Type: string*|Default: unset|
+ |acl_smtp_mail|Use: main|Type: string*|Default: unset|
+ |acl_smtp_mailauth|Use: main|Type: string*|Default: unset|
+ |acl_smtp_mime|Use: main|Type: string*|Default: unset|
+ |acl_smtp_predata|Use: main|Type: string*|Default: unset|
+ |acl_smtp_quit|Use: main|Type: string*|Default: unset|
+ |acl_smtp_rcpt|Use: main|Type: string*|Default: unset|
+ |acl_smtp_starttls|Use: main|Type: string*|Default: unset|
+ |acl_smtp_vrfy|Use: main|Type: string*|Default: unset|
+ |admin_groups|Use: main|Type: string list*|Default: unset|
+ |allow_domain_literals|Use: main|Type: boolean|Default: false|
+ |allow_mx_to_ip|Use: main|Type: boolean|Default: false|
+ |allow_utf8_domains|Use: main|Type: boolean|Default: false|
+ |auth_advertise_hosts|Use: main|Type: host list*|Default: *|
+ |auto_thaw|Use: main|Type: time|Default: 0s|
+ |av_scanner|Use: main|Type: string|Default: see below|
+ |bi_command|Use: main|Type: string|Default: unset|
+ |bounce_message_file|Use: main|Type: string|Default: unset|
+ |bounce_message_text|Use: main|Type: string|Default: unset|
+ |bounce_return_body|Use: main|Type: boolean|Default: true|
+ |bounce_return_message|Use: main|Type: boolean|Default: true|
+ |bounce_return_size_limit|Use: main|Type: integer|Default: 100K|
+ |bounce_sender_authentication|Use: main|Type: string|Default: unset|
+ |callout_domain_negative_expire|Use: main|Type: time|Default: 3h|
+ |callout_domain_positive_expire|Use: main|Type: time|Default: 7d|
+ |callout_negative_expire|Use: main|Type: time|Default: 2h|
+ |callout_positive_expire|Use: main|Type: time|Default: 24h|
+ |callout_random_local_part|Use: main|Type: string*|Default: see below|
+ |check_log_inodes|Use: main|Type: integer|Default: 0|
+ |check_log_space|Use: main|Type: integer|Default: 0|
+ |check_rfc2047_length|Use: main|Type: boolean|Default: true|
+ |check_spool_inodes|Use: main|Type: integer|Default: 0|
+ |check_spool_space|Use: main|Type: integer|Default: 0|
+ |daemon_smtp_ports|Use: main|Type: string|Default: "smtp"|
+ |daemon_startup_retries|Use: main|Type: integer|Default: 9|
+ |daemon_startup_sleep|Use: main|Type: time|Default: 30s|
+ |delay_warning|Use: main|Type: time list|Default: 24h|
+ |delay_warning_condition|Use: main|Type: string*|Default: see below|
+ |deliver_drop_privilege|Use: main|Type: boolean|Default: false|
+ |deliver_queue_load_max|Use: main|Type: fixed-point|Default: unset|
+ |delivery_date_remove|Use: main|Type: boolean|Default: true|
+ |disable_fsync|Use: main|Type: boolean|Default: false|
+ |disable_ipv6|Use: main|Type: boolean|Default: false|
+ |dns_again_means_nonexist|Use: main|Type: domain list*|Default: unset|
+ |dns_check_names_pattern|Use: main|Type: string|Default: see below|
+ |dns_csa_search_limit|Use: main|Type: integer|Default: 5|
+ |dns_csa_use_reverse|Use: main|Type: boolean|Default: true|
+ |dns_dnssec_ok|Use: main|Type: integer|Default: -1|
+ |dns_ipv4_lookup|Use: main|Type: domain list*|Default: unset|
+ |dns_retrans|Use: main|Type: time|Default: 0s|
+ |dns_retry|Use: main|Type: integer|Default: 0|
+ |dns_use_edns0|Use: main|Type: integer|Default: -1|
+ |drop_cr|Use: main|Type: boolean|Default: false|
+ |dsn_from|Use: main|Type: string*|Default: see below|
+ |envelope_to_remove|Use: main|Type: boolean|Default: true|
+ |errors_copy|Use: main|Type: string list*|Default: unset|
+ |errors_reply_to|Use: main|Type: string|Default: unset|
+ |exim_group|Use: main|Type: string|Default: compile-time configured|
+ |exim_path|Use: main|Type: string|Default: see below|
+ |exim_user|Use: main|Type: string|Default: compile-time configured|
+ |extra_local_interfaces|Use: main|Type: string list|Default: unset|
+ |extract_addresses_remove_ arguments|Use: main|Type: boolean|Default: true|
+ |finduser_retries|Use: main|Type: integer|Default: 0|
+ |freeze_tell|Use: main|Type: string list, comma separated|Default: unset|
+ |gecos_name|Use: main|Type: string*|Default: unset|
+ |gecos_pattern|Use: main|Type: string|Default: unset|
+ |gnutls_compat_mode|Use: main|Type: boolean|Default: unset|
+ |headers_charset|Use: main|Type: string|Default: see below|
+ |header_maxsize|Use: main|Type: integer|Default: see below|
+ |header_line_maxsize|Use: main|Type: integer|Default: 0|
+ |helo_accept_junk_hosts|Use: main|Type: host list*|Default: unset|
+ |helo_allow_chars|Use: main|Type: string|Default: unset|
+ |helo_lookup_domains|Use: main|Type: domain list*|Default: "@:@[]"|
+ |helo_try_verify_hosts|Use: main|Type: host list*|Default: unset|
+ |helo_verify_hosts|Use: main|Type: host list*|Default: unset|
+ |hold_domains|Use: main|Type: domain list*|Default: unset|
+ |host_lookup|Use: main|Type: host list*|Default: unset|
+ |host_lookup_order|Use: main|Type: string list|Default: "bydns:byaddr"|
+ |host_reject_connection|Use: main|Type: host list*|Default: unset|
+ |hosts_connection_nolog|Use: main|Type: host list*|Default: unset|
+ |hosts_treat_as_local|Use: main|Type: domain list*|Default: unset|
+ |ibase_servers|Use: main|Type: string list|Default: unset|
+ |ignore_bounce_errors_after|Use: main|Type: time|Default: 10w|
+ |ignore_fromline_hosts|Use: main|Type: host list*|Default: unset|
+ |ignore_fromline_local|Use: main|Type: boolean|Default: false|
+ |keep_malformed|Use: main|Type: time|Default: 4d|
+ |ldap_ca_cert_dir|Use: main|Type: string|Default: unset|
+ |ldap_ca_cert_file|Use: main|Type: string|Default: unset|
+ |ldap_cert_file|Use: main|Type: string|Default: unset|
+ |ldap_cert_key|Use: main|Type: string|Default: unset|
+ |ldap_cipher_suite|Use: main|Type: string|Default: unset|
+ |ldap_default_servers|Use: main|Type: string list|Default: unset|
+ |ldap_require_cert|Use: main|Type: string|Default: unset.|
+ |ldap_start_tls|Use: main|Type: boolean|Default: false|
+ |ldap_version|Use: main|Type: integer|Default: unset|
+ |local_from_check|Use: main|Type: boolean|Default: true|
+ |local_from_prefix|Use: main|Type: string|Default: unset|
+ |local_from_suffix|Use: main|Type: string|Default: unset|
+ |local_interfaces|Use: main|Type: string list|Default: see below|
+ |local_scan_timeout|Use: main|Type: time|Default: 5m|
+ |local_sender_retain|Use: main|Type: boolean|Default: false|
+ |localhost_number|Use: main|Type: string*|Default: unset|
+ |log_file_path|Use: main|Type: string list*|Default: set at compile time|
+ |log_selector|Use: main|Type: string|Default: unset|
+ |log_timezone|Use: main|Type: boolean|Default: false|
+ |lookup_open_max|Use: main|Type: integer|Default: 25|
+ |max_username_length|Use: main|Type: integer|Default: 0|
+ |message_body_newlines|Use: main|Type: bool|Default: false|
+ |message_body_visible|Use: main|Type: integer|Default: 500|
+ |message_id_header_domain|Use: main|Type: string*|Default: unset|
+ |message_id_header_text|Use: main|Type: string*|Default: unset|
+ |message_logs|Use: main|Type: boolean|Default: true|
+ |message_size_limit|Use: main|Type: string*|Default: 50M|
+ |move_frozen_messages|Use: main|Type: boolean|Default: false|
+ |mua_wrapper|Use: main|Type: boolean|Default: false|
+ |mysql_servers|Use: main|Type: string list|Default: unset|
+ |never_users|Use: main|Type: string list*|Default: unset|
+ |openssl_options|Use: main|Type: string list|Default: +no_sslv2|
+ |oracle_servers|Use: main|Type: string list|Default: unset|
+ |percent_hack_domains|Use: main|Type: domain list*|Default: unset|
+ |perl_at_start|Use: main|Type: boolean|Default: false|
+ |perl_startup|Use: main|Type: string|Default: unset|
+ |pgsql_servers|Use: main|Type: string list|Default: unset|
+ |pid_file_path|Use: main|Type: string*|Default: set at compile time|
+ |pipelining_advertise_hosts|Use: main|Type: host list*|Default: *|
+ |prdr_enable|Use: main|Type: boolean|Default: false|
+ |preserve_message_logs|Use: main|Type: boolean|Default: false|
+ |primary_hostname|Use: main|Type: string|Default: see below|
+ |print_topbitchars|Use: main|Type: boolean|Default: false|
+ |process_log_path|Use: main|Type: string|Default: unset|
+ |prod_requires_admin|Use: main|Type: boolean|Default: true|
+ |qualify_domain|Use: main|Type: string|Default: see below|
+ |qualify_recipient|Use: main|Type: string|Default: see below|
+ |queue_domains|Use: main|Type: domain list*|Default: unset|
+ |queue_list_requires_admin|Use: main|Type: boolean|Default: true|
+ |queue_only|Use: main|Type: boolean|Default: false|
+ |queue_only_file|Use: main|Type: string|Default: unset|
+ |queue_only_load|Use: main|Type: fixed-point|Default: unset|
+ |queue_only_load_latch|Use: main|Type: boolean|Default: true|
+ |queue_only_override|Use: main|Type: boolean|Default: true|
+ |queue_run_in_order|Use: main|Type: boolean|Default: false|
+ |queue_run_max|Use: main|Type: integer|Default: 5|
+ |queue_smtp_domains|Use: main|Type: domain list*|Default: unset|
+ |receive_timeout|Use: main|Type: time|Default: 0s|
+ |received_header_text|Use: main|Type: string*|Default: see below|
+ |received_headers_max|Use: main|Type: integer|Default: 30|
+ |recipient_unqualified_hosts|Use: main|Type: host list*|Default: unset|
+ |recipients_max|Use: main|Type: integer|Default: 0|
+ |recipients_max_reject|Use: main|Type: boolean|Default: false|
+ |remote_max_parallel|Use: main|Type: integer|Default: 2|
+ |remote_sort_domains|Use: main|Type: domain list*|Default: unset|
+ |retry_data_expire|Use: main|Type: time|Default: 7d|
+ |retry_interval_max|Use: main|Type: time|Default: 24h|
+ |return_path_remove|Use: main|Type: boolean|Default: true|
+ |return_size_limit|Use: main|Type: integer|Default: 100K|
+ |rfc1413_hosts|Use: main|Type: host list*|Default: *|
+ |rfc1413_query_timeout|Use: main|Type: time|Default: 5s|
+ |sender_unqualified_hosts|Use: main|Type: host list*|Default: unset|
+ |smtp_accept_keepalive|Use: main|Type: boolean|Default: true|
+ |smtp_accept_max|Use: main|Type: integer|Default: 20|
+ |smtp_accept_max_nonmail|Use: main|Type: integer|Default: 10|
+ |smtp_accept_max_nonmail_hosts|Use: main|Type: host list*|Default: *|
+ |smtp_accept_max_per_connection|Use: main|Type: integer|Default: 1000|
+ |smtp_accept_max_per_host|Use: main|Type: string*|Default: unset|
+ |smtp_accept_queue|Use: main|Type: integer|Default: 0|
+ |smtp_accept_queue_per_connection|Use: main|Type: integer|Default: 10|
+ |smtp_accept_reserve|Use: main|Type: integer|Default: 0|
+ |smtp_active_hostname|Use: main|Type: string*|Default: unset|
+ |smtp_banner|Use: main|Type: string*|Default: see below|
+ |smtp_check_spool_space|Use: main|Type: boolean|Default: true|
+ |smtp_connect_backlog|Use: main|Type: integer|Default: 20|
+ |smtp_enforce_sync|Use: main|Type: boolean|Default: true|
+ |smtp_etrn_command|Use: main|Type: string*|Default: unset|
+ |smtp_etrn_serialize|Use: main|Type: boolean|Default: true|
+ |smtp_load_reserve|Use: main|Type: fixed-point|Default: unset|
+ |smtp_max_synprot_errors|Use: main|Type: integer|Default: 3|
+ |smtp_max_unknown_commands|Use: main|Type: integer|Default: 3|
+ |smtp_ratelimit_hosts|Use: main|Type: host list*|Default: unset|
+ |smtp_ratelimit_mail|Use: main|Type: string|Default: unset|
+ |smtp_ratelimit_rcpt|Use: main|Type: string|Default: unset|
+ |smtp_receive_timeout|Use: main|Type: time|Default: 5m|
+ |smtp_reserve_hosts|Use: main|Type: host list*|Default: unset|
+ |smtp_return_error_details|Use: main|Type: boolean|Default: false|
+ |spamd_address|Use: main|Type: string|Default: see below|
+ |split_spool_directory|Use: main|Type: boolean|Default: false|
+ |spool_directory|Use: main|Type: string*|Default: set at compile time|
+ |sqlite_lock_timeout|Use: main|Type: time|Default: 5s|
+ |strict_acl_vars|Use: main|Type: boolean|Default: false|
+ |strip_excess_angle_brackets|Use: main|Type: boolean|Default: false|
+ |strip_trailing_dot|Use: main|Type: boolean|Default: false|
+ |syslog_duplication|Use: main|Type: boolean|Default: true|
+ |syslog_facility|Use: main|Type: string|Default: unset|
+ |syslog_processname|Use: main|Type: string|Default: "exim"|
+ |syslog_timestamp|Use: main|Type: boolean|Default: true|
+ |system_filter|Use: main|Type: string*|Default: unset|
+ |system_filter_directory_transport|Use: main|Type: string*|Default: unset|
+ |system_filter_file_transport|Use: main|Type: string*|Default: unset|
+ |system_filter_group|Use: main|Type: string|Default: unset|
+ |system_filter_pipe_transport|Use: main|Type: string*|Default: unset|
+ |system_filter_reply_transport|Use: main|Type: string*|Default: unset|
+ |system_filter_user|Use: main|Type: string|Default: unset|
+ |tcp_nodelay|Use: main|Type: boolean|Default: true|
+ |timeout_frozen_after|Use: main|Type: time|Default: 0s|
+ |timezone|Use: main|Type: string|Default: unset|
+ |tls_advertise_hosts|Use: main|Type: host list*|Default: unset|
+ |tls_certificate|Use: main|Type: string*|Default: unset|
+ |tls_crl|Use: main|Type: string*|Default: unset|
+ |tls_dh_max_bits|Use: main|Type: integer|Default: 2236|
+ |tls_dhparam|Use: main|Type: string*|Default: unset|
+ |tls_ocsp_file|Use: main|Type: string*|Default: unset|
+ |tls_on_connect_ports|Use: main|Type: string list|Default: unset|
+ |tls_privatekey|Use: main|Type: string*|Default: unset|
+ |tls_remember_esmtp|Use: main|Type: boolean|Default: false|
+ |tls_require_ciphers|Use: main|Type: string*|Default: unset|
+ |tls_try_verify_hosts|Use: main|Type: host list*|Default: unset|
+ |tls_verify_certificates|Use: main|Type: string*|Default: unset|
+ |tls_verify_hosts|Use: main|Type: host list*|Default: unset|
+ |trusted_groups|Use: main|Type: string list*|Default: unset|
+ |trusted_users|Use: main|Type: string list*|Default: unset|
+ |unknown_login|Use: main|Type: string*|Default: unset|
+ |unknown_username|Use: main|Type: string|Default: unset|
+ |untrusted_set_sender|Use: main|Type: address list*|Default: unset|
+ |uucp_from_pattern|Use: main|Type: string|Default: see below|
+ |uucp_from_sender|Use: main|Type: string*|Default: "$1"|
+ |warn_message_file|Use: main|Type: string|Default: unset|
+ |write_rejectlog|Use: main|Type: boolean|Default: true|
+ |address_data|Use: routers|Type: string*|Default: unset|
+ |address_test|Use: routers**|Type: boolean|Default: true|
+ |cannot_route_message|Use: routers|Type: string*|Default: unset|
+ |caseful_local_part|Use: routers|Type: boolean|Default: false|
+ |check_local_user|Use: routers**|Type: boolean|Default: false|
+ |condition|Use: routers**|Type: string*|Default: unset|
+ |debug_print|Use: routers|Type: string*|Default: unset|
+ |disable_logging|Use: routers|Type: boolean|Default: false|
+ |domains|Use: routers**|Type: domain list*|Default: unset|
+ |driver|Use: routers|Type: string|Default: unset|
+ |errors_to|Use: routers|Type: string*|Default: unset|
+ |expn|Use: routers**|Type: boolean|Default: true|
+ |fail_verify|Use: routers|Type: boolean|Default: false|
+ |fail_verify_recipient|Use: routers|Type: boolean|Default: false|
+ |fail_verify_sender|Use: routers|Type: boolean|Default: false|
+ |fallback_hosts|Use: routers|Type: string list|Default: unset|
+ |group|Use: routers|Type: string*|Default: see below|
+ |headers_add|Use: routers|Type: list*|Default: unset|
+ |headers_remove|Use: routers|Type: list*|Default: unset|
+ |ignore_target_hosts|Use: routers|Type: host list*|Default: unset|
+ |initgroups|Use: routers|Type: boolean|Default: false|
+ |local_part_prefix|Use: routers**|Type: string list|Default: unset|
+ |local_part_prefix_optional|Use: routers|Type: boolean|Default: false|
+ |local_part_suffix|Use: routers**|Type: string list|Default: unset|
+ |local_part_suffix_optional|Use: routers|Type: boolean|Default: false|
+ |local_parts|Use: routers**|Type: local part list*|Default: unset|
+ |log_as_local|Use: routers|Type: boolean|Default: see below|
+ |more|Use: routers|Type: boolean*|Default: true|
+ |pass_on_timeout|Use: routers|Type: boolean|Default: false|
+ |pass_router|Use: routers|Type: string|Default: unset|
+ |redirect_router|Use: routers|Type: string|Default: unset|
+ |require_files|Use: routers**|Type: string list*|Default: unset|
+ |retry_use_local_part|Use: routers|Type: boolean|Default: see below|
+ |router_home_directory|Use: routers|Type: string*|Default: unset|
+ |self|Use: routers|Type: string|Default: freeze|
+ |senders|Use: routers**|Type: address list*|Default: unset|
+ |translate_ip_address|Use: routers|Type: string*|Default: unset|
+ |transport|Use: routers|Type: string*|Default: unset|
+ |transport_current_directory|Use: routers|Type: string*|Default: unset|
+ |transport_home_directory|Use: routers|Type: string*|Default: see below|
+ |unseen|Use: routers|Type: boolean*|Default: false|
+ |user|Use: routers|Type: string*|Default: see below|
+ |verify|Use: routers**|Type: boolean|Default: true|
+ |verify_only|Use: routers**|Type: boolean|Default: false|
+ |verify_recipient|Use: routers**|Type: boolean|Default: true|
+ |verify_sender|Use: routers**|Type: boolean|Default: true|
+ |check_secondary_mx|Use: dnslookup|Type: boolean|Default: false|
+ |check_srv|Use: dnslookup|Type: string*|Default: unset|
+ |dnssec_request_domains|Use: dnslookup|Type: domain list*|Default: unset|
+ |dnssec_require_domains|Use: dnslookup|Type: domain list*|Default: unset|
+ |mx_domains|Use: dnslookup|Type: domain list*|Default: unset|
+ |mx_fail_domains|Use: dnslookup|Type: domain list*|Default: unset|
+ |qualify_single|Use: dnslookup|Type: boolean|Default: true|
+ |rewrite_headers|Use: dnslookup|Type: boolean|Default: true|
+ |same_domain_copy_routing|Use: dnslookup|Type: boolean|Default: false|
+ |search_parents|Use: dnslookup|Type: boolean|Default: false|
+ |srv_fail_domains|Use: dnslookup|Type: domain list*|Default: unset|
+ |widen_domains|Use: dnslookup|Type: string list|Default: unset|
+ |hosts|Use: iplookup|Type: string|Default: unset|
+ |optional|Use: iplookup|Type: boolean|Default: false|
+ |port|Use: iplookup|Type: integer|Default: 0|
+ |protocol|Use: iplookup|Type: string|Default: udp|
+ |query|Use: iplookup|Type: string*|Default: see below|
+ |reroute|Use: iplookup|Type: string*|Default: unset|
+ |response_pattern|Use: iplookup|Type: string|Default: unset|
+ |timeout|Use: iplookup|Type: time|Default: 5s|
+ |host_all_ignored|Use: manualroute|Type: string|Default: defer|
+ |host_find_failed|Use: manualroute|Type: string|Default: freeze|
+ |hosts_randomize|Use: manualroute|Type: boolean|Default: false|
+ |route_data|Use: manualroute|Type: string*|Default: unset|
+ |route_list|Use: manualroute|Type: string list|Default: unset|
+ |same_domain_copy_routing|Use: manualroute|Type: boolean|Default: false|
+ |command|Use: queryprogram|Type: string*|Default: unset|
+ |command_group|Use: queryprogram|Type: string|Default: unset|
+ |command_user|Use: queryprogram|Type: string|Default: unset|
+ |current_directory|Use: queryprogram|Type: string|Default: /|
+ |timeout|Use: queryprogram|Type: time|Default: 1h|
+ |allow_defer|Use: redirect|Type: boolean|Default: false|
+ |allow_fail|Use: redirect|Type: boolean|Default: false|
+ |allow_filter|Use: redirect|Type: boolean|Default: false|
+ |allow_freeze|Use: redirect|Type: boolean|Default: false|
+ |check_ancestor|Use: redirect|Type: boolean|Default: false|
+ |check_group|Use: redirect|Type: boolean|Default: see below|
+ |check_owner|Use: redirect|Type: boolean|Default: see below|
+ |data|Use: redirect|Type: string*|Default: unset|
+ |directory_transport|Use: redirect|Type: string*|Default: unset|
+ |file|Use: redirect|Type: string*|Default: unset|
+ |file_transport|Use: redirect|Type: string*|Default: unset|
+ |filter_prepend_home|Use: redirect|Type: boolean|Default: true|
+ |forbid_blackhole|Use: redirect|Type: boolean|Default: false|
+ |forbid_exim_filter|Use: redirect|Type: boolean|Default: false|
+ |forbid_file|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_dlfunc|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_existstest|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_logwrite|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_lookup|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_perl|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_readfile|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_readsocket|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_reply|Use: redirect|Type: boolean|Default: false|
+ |forbid_filter_run|Use: redirect|Type: boolean|Default: false|
+ |forbid_include|Use: redirect|Type: boolean|Default: false|
+ |forbid_pipe|Use: redirect|Type: boolean|Default: false|
+ |forbid_sieve_filter|Use: redirect|Type: boolean|Default: false|
+ |forbid_smtp_code|Use: redirect|Type: boolean|Default: false|
+ |hide_child_in_errmsg|Use: redirect|Type: boolean|Default: false|
+ |ignore_eacces|Use: redirect|Type: boolean|Default: false|
+ |ignore_enotdir|Use: redirect|Type: boolean|Default: false|
+ |include_directory|Use: redirect|Type: string|Default: unset|
+ |modemask|Use: redirect|Type: octal integer|Default: 022|
+ |one_time|Use: redirect|Type: boolean|Default: false|
+ |owners|Use: redirect|Type: string list|Default: unset|
+ |owngroups|Use: redirect|Type: string list|Default: unset|
+ |pipe_transport|Use: redirect|Type: string*|Default: unset|
+ |qualify_domain|Use: redirect|Type: string*|Default: unset|
+ |qualify_preserve_domain|Use: redirect|Type: boolean|Default: false|
+ |repeat_use|Use: redirect|Type: boolean|Default: true|
+ |reply_transport|Use: redirect|Type: string*|Default: unset|
+ |rewrite|Use: redirect|Type: boolean|Default: true|
+ |sieve_subaddress|Use: redirect|Type: string*|Default: unset|
+ |sieve_useraddress|Use: redirect|Type: string*|Default: unset|
+ |sieve_vacation_directory|Use: redirect|Type: string*|Default: unset|
+ |skip_syntax_errors|Use: redirect|Type: boolean|Default: false|
+ |syntax_errors_text|Use: redirect|Type: string*|Default: unset|
+ |syntax_errors_to|Use: redirect|Type: string|Default: unset|
+ |body_only|Use: transports|Type: boolean|Default: false|
+ |current_directory|Use: transports|Type: string*|Default: unset|
+ |disable_logging|Use: transports|Type: boolean|Default: false|
+ |debug_print|Use: transports|Type: string*|Default: unset|
+ |delivery_date_add|Use: transports|Type: boolean|Default: false|
+ |driver|Use: transports|Type: string|Default: unset|
+ |envelope_to_add|Use: transports|Type: boolean|Default: false|
+ |group|Use: transports|Type: string*|Default: Exim group|
+ |headers_add|Use: transports|Type: list*|Default: unset|
+ |headers_only|Use: transports|Type: boolean|Default: false|
+ |headers_remove|Use: transports|Type: list*|Default: unset|
+ |headers_rewrite|Use: transports|Type: string|Default: unset|
+ |home_directory|Use: transports|Type: string*|Default: unset|
+ |initgroups|Use: transports|Type: boolean|Default: false|
+ |message_size_limit|Use: transports|Type: string*|Default: 0|
+ |rcpt_include_affixes|Use: transports|Type: boolean|Default: false|
+ |retry_use_local_part|Use: transports|Type: boolean|Default: see below|
+ |return_path|Use: transports|Type: string*|Default: unset|
+ |return_path_add|Use: transports|Type: boolean|Default: false|
+ |shadow_condition|Use: transports|Type: string*|Default: unset|
+ |shadow_transport|Use: transports|Type: string|Default: unset|
+ |transport_filter|Use: transports|Type: string*|Default: unset|
+ |transport_filter_timeout|Use: transports|Type: time|Default: 5m|
+ |user|Use: transports|Type: string*|Default: Exim user|
+ |allow_fifo|Use: appendfile|Type: boolean|Default: false|
+ |allow_symlink|Use: appendfile|Type: boolean|Default: false|
+ |batch_id|Use: appendfile|Type: string*|Default: unset|
+ |batch_max|Use: appendfile|Type: integer|Default: 1|
+ |check_group|Use: appendfile|Type: boolean|Default: false|
+ |check_owner|Use: appendfile|Type: boolean|Default: true|
+ |check_string|Use: appendfile|Type: string|Default: see below|
+ |create_directory|Use: appendfile|Type: boolean|Default: true|
+ |create_file|Use: appendfile|Type: string|Default: anywhere|
+ |directory|Use: appendfile|Type: string*|Default: unset|
+ |directory_file|Use: appendfile|Type: string*|Default: see below|
+ |directory_mode|Use: appendfile|Type: octal integer|Default: 0700|
+ |escape_string|Use: appendfile|Type: string|Default: see description|
+ |file|Use: appendfile|Type: string*|Default: unset|
+ |file_format|Use: appendfile|Type: string|Default: unset|
+ |file_must_exist|Use: appendfile|Type: boolean|Default: false|
+ |lock_fcntl_timeout|Use: appendfile|Type: time|Default: 0s|
+ |lock_flock_timeout|Use: appendfile|Type: time|Default: 0s|
+ |lock_interval|Use: appendfile|Type: time|Default: 3s|
+ |lock_retries|Use: appendfile|Type: integer|Default: 10|
+ |lockfile_mode|Use: appendfile|Type: octal integer|Default: 0600|
+ |lockfile_timeout|Use: appendfile|Type: time|Default: 30m|
+ |mailbox_filecount|Use: appendfile|Type: string*|Default: unset|
+ |mailbox_size|Use: appendfile|Type: string*|Default: unset|
+ |maildir_format|Use: appendfile|Type: boolean|Default: false|
+ |maildir_quota_directory_regex|Use: appendfile|Type: string|Default: See below|
+ |maildir_retries|Use: appendfile|Type: integer|Default: 10|
+ |maildir_tag|Use: appendfile|Type: string*|Default: unset|
+ |maildir_use_size_file|Use: appendfile*|Type: boolean|Default: false|
+ |maildirfolder_create_regex|Use: appendfile|Type: string|Default: unset|
+ |mailstore_format|Use: appendfile|Type: boolean|Default: false|
+ |mailstore_prefix|Use: appendfile|Type: string*|Default: unset|
+ |mailstore_suffix|Use: appendfile|Type: string*|Default: unset|
+ |mbx_format|Use: appendfile|Type: boolean|Default: false|
+ |message_prefix|Use: appendfile|Type: string*|Default: see below|
+ |message_suffix|Use: appendfile|Type: string*|Default: see below|
+ |mode|Use: appendfile|Type: octal integer|Default: 0600|
+ |mode_fail_narrower|Use: appendfile|Type: boolean|Default: true|
+ |notify_comsat|Use: appendfile|Type: boolean|Default: false|
+ |quota|Use: appendfile|Type: string*|Default: unset|
+ |quota_directory|Use: appendfile|Type: string*|Default: unset|
+ |quota_filecount|Use: appendfile|Type: string*|Default: 0|
+ |quota_is_inclusive|Use: appendfile|Type: boolean|Default: true|
+ |quota_size_regex|Use: appendfile|Type: string|Default: unset|
+ |quota_warn_message|Use: appendfile|Type: string*|Default: see below|
+ |quota_warn_threshold|Use: appendfile|Type: string*|Default: 0|
+ |use_bsmtp|Use: appendfile|Type: boolean|Default: false|
+ |use_crlf|Use: appendfile|Type: boolean|Default: false|
+ |use_fcntl_lock|Use: appendfile|Type: boolean|Default: see below|
+ |use_flock_lock|Use: appendfile|Type: boolean|Default: false|
+ |use_lockfile|Use: appendfile|Type: boolean|Default: see below|
+ |use_mbx_lock|Use: appendfile|Type: boolean|Default: see below|
+ |bcc|Use: autoreply|Type: string*|Default: unset|
+ |cc|Use: autoreply|Type: string*|Default: unset|
+ |file|Use: autoreply|Type: string*|Default: unset|
+ |file_expand|Use: autoreply|Type: boolean|Default: false|
+ |file_optional|Use: autoreply|Type: boolean|Default: false|
+ |from|Use: autoreply|Type: string*|Default: unset|
+ |headers|Use: autoreply|Type: string*|Default: unset|
+ |log|Use: autoreply|Type: string*|Default: unset|
+ |mode|Use: autoreply|Type: octal integer|Default: 0600|
+ |never_mail|Use: autoreply|Type: address list*|Default: unset|
+ |once|Use: autoreply|Type: string*|Default: unset|
+ |once_file_size|Use: autoreply|Type: integer|Default: 0|
+ |once_repeat|Use: autoreply|Type: time*|Default: 0s|
+ |reply_to|Use: autoreply|Type: string*|Default: unset|
+ |return_message|Use: autoreply|Type: boolean|Default: false|
+ |subject|Use: autoreply|Type: string*|Default: unset|
+ |text|Use: autoreply|Type: string*|Default: unset|
+ |to|Use: autoreply|Type: string*|Default: unset|
+ |batch_id|Use: lmtp|Type: string*|Default: unset|
+ |batch_max|Use: lmtp|Type: integer|Default: 1|
+ |command|Use: lmtp|Type: string*|Default: unset|
+ |ignore_quota|Use: lmtp|Type: boolean|Default: false|
+ |socket|Use: lmtp|Type: string*|Default: unset|
+ |timeout|Use: lmtp|Type: time|Default: 5m|
+ |allow_commands|Use: pipe|Type: string list*|Default: unset|
+ |batch_id|Use: pipe|Type: string*|Default: unset|
+ |batch_max|Use: pipe|Type: integer|Default: 1|
+ |check_string|Use: pipe|Type: string|Default: unset|
+ |command|Use: pipe|Type: string*|Default: unset|
+ |environment|Use: pipe|Type: string*|Default: unset|
+ |escape_string|Use: pipe|Type: string|Default: unset|
+ |freeze_exec_fail|Use: pipe|Type: boolean|Default: false|
+ |freeze_signal|Use: pipe|Type: boolean|Default: false|
+ |force_command|Use: pipe|Type: boolean|Default: false|
+ |ignore_status|Use: pipe|Type: boolean|Default: false|
+ |log_defer_output|Use: pipe|Type: boolean|Default: false|
+ |log_fail_output|Use: pipe|Type: boolean|Default: false|
+ |log_output|Use: pipe|Type: boolean|Default: false|
+ |max_output|Use: pipe|Type: integer|Default: 20K|
+ |message_prefix|Use: pipe|Type: string*|Default: see below|
+ |message_suffix|Use: pipe|Type: string*|Default: see below|
+ |path|Use: pipe|Type: string|Default: see below|
+ |permit_coredump|Use: pipe|Type: boolean|Default: false|
+ |pipe_as_creator|Use: pipe|Type: boolean|Default: false|
+ |restrict_to_path|Use: pipe|Type: boolean|Default: false|
+ |return_fail_output|Use: pipe|Type: boolean|Default: false|
+ |return_output|Use: pipe|Type: boolean|Default: false|
+ |temp_errors|Use: pipe|Type: string list|Default: see below|
+ |timeout|Use: pipe|Type: time|Default: 1h|
+ |timeout_defer|Use: pipe|Type: boolean|Default: false|
+ |umask|Use: pipe|Type: octal integer|Default: 022|
+ |use_bsmtp|Use: pipe|Type: boolean|Default: false|
+ |use_classresources|Use: pipe|Type: boolean|Default: false|
+ |use_crlf|Use: pipe|Type: boolean|Default: false|
+ |use_shell|Use: pipe|Type: boolean|Default: false|
+ |address_retry_include_sender|Use: smtp|Type: boolean|Default: true|
+ |allow_localhost|Use: smtp|Type: boolean|Default: false|
+ |authenticated_sender|Use: smtp|Type: string*|Default: unset|
+ |authenticated_sender_force|Use: smtp|Type: boolean|Default: false|
+ |command_timeout|Use: smtp|Type: time|Default: 5m|
+ |connect_timeout|Use: smtp|Type: time|Default: 5m|
+ |connection_max_messages|Use: smtp|Type: integer|Default: 500|
+ |data_timeout|Use: smtp|Type: time|Default: 5m|
+ |delay_after_cutoff|Use: smtp|Type: boolean|Default: true|
+ |dns_qualify_single|Use: smtp|Type: boolean|Default: true|
+ |dns_search_parents|Use: smtp|Type: boolean|Default: false|
+ |dnssec_request_domains|Use: smtp|Type: domain list*|Default: unset|
+ |dnssec_require_domains|Use: smtp|Type: domain list*|Default: unset|
+ |dscp|Use: smtp|Type: string*|Default: unset|
+ |fallback_hosts|Use: smtp|Type: string list|Default: unset|
+ |final_timeout|Use: smtp|Type: time|Default: 10m|
+ |gethostbyname|Use: smtp|Type: boolean|Default: false|
+ |gnutls_compat_mode|Use: smtp|Type: boolean|Default: unset|
+ |helo_data|Use: smtp|Type: string*|Default: see below|
+ |hosts|Use: smtp|Type: string list*|Default: unset|
+ |hosts_avoid_esmtp|Use: smtp|Type: host list*|Default: unset|
+ |hosts_avoid_pipelining|Use: smtp|Type: host list*|Default: unset|
+ |hosts_avoid_tls|Use: smtp|Type: host list*|Default: unset|
+ |hosts_verify_avoid_tls|Use: smtp|Type: host list*|Default: *|
+ |hosts_max_try|Use: smtp|Type: integer|Default: 5|
+ |hosts_max_try_hardlimit|Use: smtp|Type: integer|Default: 50|
+ |hosts_nopass_tls|Use: smtp|Type: host list*|Default: unset|
+ |hosts_override|Use: smtp|Type: boolean|Default: false|
+ |hosts_randomize|Use: smtp|Type: boolean|Default: false|
+ |hosts_require_auth|Use: smtp|Type: host list*|Default: unset|
+ |hosts_request_ocsp|Use: smtp|Type: host list*|Default: *|
+ |hosts_require_ocsp|Use: smtp|Type: host list*|Default: unset|
+ |hosts_require_tls|Use: smtp|Type: host list*|Default: unset|
+ |hosts_try_auth|Use: smtp|Type: host list*|Default: unset|
+ |hosts_try_prdr|Use: smtp|Type: host list*|Default: unset|
+ |interface|Use: smtp|Type: string list*|Default: unset|
+ |keepalive|Use: smtp|Type: boolean|Default: true|
+ |lmtp_ignore_quota|Use: smtp|Type: boolean|Default: false|
+ |max_rcpt|Use: smtp|Type: integer|Default: 100|
+ |multi_domain|Use: smtp|Type: boolean|Default: true|
+ |port|Use: smtp|Type: string*|Default: see below|
+ |protocol|Use: smtp|Type: string|Default: smtp|
+ |retry_include_ip_address|Use: smtp|Type: boolean|Default: true|
+ |serialize_hosts|Use: smtp|Type: host list*|Default: unset|
+ |size_addition|Use: smtp|Type: integer|Default: 1024|
+ |tls_certificate|Use: smtp|Type: string*|Default: unset|
+ |tls_crl|Use: smtp|Type: string*|Default: unset|
+ |tls_dh_min_bits|Use: smtp|Type: integer|Default: 1024|
+ |tls_privatekey|Use: smtp|Type: string*|Default: unset|
+ |tls_require_ciphers|Use: smtp|Type: string*|Default: unset|
+ |tls_sni|Use: smtp|Type: string*|Default: unset|
+ |tls_tempfail_tryclear|Use: smtp|Type: boolean|Default: true|
+ |tls_try_verify_hosts|Use: smtp|Type: host list* unset|Default:|
+ |tls_verify_certificates|Use: smtp|Type: string*|Default: unset|
+ |tls_verify_hosts|Use: smtp|Type: host list* unset|Default:|
+ |client_condition|Use: authenticators|Type: string*|Default: unset|
+ |client_set_id|Use: authenticators|Type: string*|Default: unset|
+ |driver|Use: authenticators|Type: string|Default: unset|
+ |public_name|Use: authenticators|Type: string|Default: unset|
+ |server_advertise_condition|Use: authenticators|Type: string*|Default: unset|
+ |server_condition|Use: authenticators|Type: string*|Default: unset|
+ |server_debug_print|Use: authenticators|Type: string*|Default: unset|
+ |server_set_id|Use: authenticators|Type: string*|Default: unset|
+ |server_mail_auth_condition|Use: authenticators|Type: string*|Default: unset|
+ |server_condition|Use: authenticators|Type: string*|Default: unset|
+ |server_prompts|Use: plaintext|Type: string*|Default: unset|
+ |client_ignore_invalid_base64|Use: plaintext|Type: boolean|Default: false|
+ |client_send|Use: plaintext|Type: string*|Default: unset|
+ |server_secret|Use: cram_md5|Type: string*|Default: unset|
+ |client_name|Use: cram_md5|Type: string*|Default: the primary host name|
+ |client_secret|Use: cram_md5|Type: string*|Default: unset|
+ |server_hostname|Use: cyrus_sasl|Type: string*|Default: see below|
+ |server_mech|Use: cyrus_sasl|Type: string|Default: see below|
+ |server_realm|Use: cyrus_sasl|Type: string*|Default: unset|
+ |server_service|Use: cyrus_sasl|Type: string|Default: "smtp"|
+ |server_socket|Use: dovecot|Type: string|Default: unset|
+ |server_channelbinding|Use: gsasl|Type: boolean|Default: false|
+ |server_hostname|Use: gsasl|Type: string*|Default: see below|
+ |server_mech|Use: gsasl|Type: string|Default: see below|
+ |server_password|Use: gsasl|Type: string*|Default: unset|
+ |server_realm|Use: gsasl|Type: string*|Default: unset|
+ |server_scram_iter|Use: gsasl|Type: string*|Default: unset|
+ |server_scram_salt|Use: gsasl|Type: string*|Default: unset|
+ |server_service|Use: gsasl|Type: string|Default: "smtp"|
+ |server_hostname|Use: heimdal_gssapi|Type: string*|Default: see below|
+ |server_keytab|Use: heimdal_gssapi|Type: string*|Default: unset|
+ |server_service|Use: heimdal_gssapi|Type: string*|Default: smtp|
+ |server_password|Use: spa|Type: string*|Default: unset|
+ |client_domain|Use: spa|Type: string*|Default: unset|
+ |client_password|Use: spa|Type: string*|Default: unset|
+ |client_username|Use: spa|Type: string*|Default: unset|
+ |dkim_domain|Use: smtp|Type: string*|Default: unset|
+ |dkim_selector|Use: smtp|Type: string*|Default: unset|
+ |dkim_private_key|Use: smtp|Type: string*|Default: unset|
+ |dkim_canon|Use: smtp|Type: string*|Default: unset|
+ |dkim_strict|Use: smtp|Type: string*|Default: unset|
+ |dkim_sign_headers|Use: smtp|Type: string*|Default: unset|
+ }}}
+
+## List of Variables {{{
+
+ $0, $1, etc
+ $acl_arg1, $acl_arg2, etc
+ $acl_c...
+ $acl_m...
+ $acl_narg
+ $acl_verify_message
+ $address_data
+ $address_file
+ $address_pipe
+ $auth1 - $auth3
+ $authenticated_id
+ $authenticated_fail_id
+ $authenticated_sender
+ $authentication_failed
+ $av_failed
+
+ $body_linecount
+ $body_zerocount
+ $bounce_recipient
+ $bounce_return_size_limit
+
+ $caller_gid
+ $caller_uid
+ $compile_date
+ $compile_number
+
+ $demime_errorlevel
+ $demime_reason
+ $dnslist_domain, $dnslist_matched, $dnslist_text, $dnslist_value
+ $domain
+ $domain_data
+
+ $exim_gid
+ $exim_path
+ $exim_uid
+
+ $found_extension
+ $header_<name>
+
+ $headers_added
+ $home
+ $host
+ $host_address
+ $host_data
+ $host_lookup_deferred
+ $host_lookup_failed
+ $host_port
+
+ $inode
+ $interface_address
+ $interface_port
+ $item
+
+ $ldap_dn
+ $load_average
+ $local_part
+ $local_part_data
+ $local_part_prefix
+ $local_part_suffix
+ $local_scan_data
+ $local_user_gid
+ $local_user_uid
+ $localhost_number
+ $log_inodes
+ $log_space
+ $lookup_dnssec_authenticated
+
+ $mailstore_basename
+ $malware_name
+ $max_received_linelength
+ $message_age
+ $message_body
+ $message_body_end
+ $message_body_size
+ $message_exim_id
+ $message_headers
+ $message_headers_raw
+ $message_id
+ $message_linecount
+ $message_size
+ $mime_xxx
+
+ $n0 - $n9
+
+ $original_domain
+ $original_local_part
+ $originator_gid
+ $originator_uid
+
+ $parent_domain
+ $parent_local_part
+ $pid
+ $pipe_addresses
+ $primary_hostname
+ $prvscheck_address
+ $prvscheck_keynum
+ $prvscheck_result
+ $qualify_domain
+ $qualify_recipient
+
+ $rcpt_count
+ $rcpt_defer_count
+ $rcpt_fail_count
+ $received_count
+ $received_for
+ $received_ip_address
+ $received_port
+ $received_protocol
+ $received_time
+ $recipient_data
+ $recipient_verify_failure
+ $recipients
+ $recipients_count
+ $regex_match_string
+ $reply_address
+ $return_path
+ $return_size_limit
+ $router_name
+ $runrc
+
+ $self_hostname
+ $sender_address
+ $sender_address_data
+ $sender_address_domain
+ $sender_address_local_part
+ $sender_data
+ $sender_fullhost
+ $sender_helo_name
+ $sender_host_address
+ $sender_host_authenticated
+ $sender_host_dnssec
+ $sender_host_name
+ $sender_host_port
+ $sender_ident
+ $sender_rate_xxx
+ $sender_rcvhost
+ $sender_verify_failure
+ $sending_ip_address
+ $sending_port
+ $smtp_active_hostname
+ $smtp_command
+ $smtp_command_argument
+ $smtp_count_at_connection_start
+ $sn0 - $sn9
+ $spam_xxx
+ $spool_directory
+ $spool_inodes
+ $spool_space
+
+ $thisaddress
+ $tls_in_bits
+ $tls_out_bits
+ $tls_in_ourcert
+ $tls_in_peercert
+ $tls_out_ourcert
+ $tls_out_peercert
+ $tls_in_certificate_verified
+ $tls_out_certificate_verified
+ $tls_in_cipher
+ $tls_out_cipher
+ $tls_in_ocsp
+ $tls_out_ocsp
+ $tls_in_peerdn
+ $tls_out_peerdn
+ $tls_in_sni
+ $tls_out_sni
+
+ $tod_bsdinbox
+ $tod_epoch
+ $tod_epoch_l
+ $tod_full
+ $tod_log
+ $tod_logfile
+ $tod_zone
+ $tod_zulu
+ $transport_name
+
+ $value
+ $verify_mode
+ $version_number
+
+ $warn_message_delay
+ $warn_message_recipients
+ }}}
+
+## List of Operators {{{
+
+ ${quote_<lookup-type>:<string>}
+ ${quote_ldap: a(bc)*, a<yz>; }
+ ${quote_ldap_dn: a(bc)*, a<yz>; }
+ ${<op>:<string>}
+ ${address:<string>}
+ ${addresses:<string>}
+ ${base62:<digits>}
+ ${base62d:<base-62 digits>}
+ ${domain:<string>}
+ ${escape:<string>}
+ ${eval:<string>} and ${eval10:<string>}
+ ${expand:<string>}
+ ${from_utf8:<string>}
+ ${hash_<n>_<m>:<string>}
+ ${hex2b64:<hexstring>}
+ ${hexquote:<string>}
+ ${lc:<string>}
+ ${length_<number>:<string>}
+ ${listcount:<string>}
+ ${listnamed:<name>} and ${listnamed_<type>:<name>}
+ ${local_part:<string>}
+ ${mask:<IP address>/<bit count>}
+ ${md5:<string>}
+ ${nhash_<n>_<m>:<string>}
+ ${quote:<string>}
+ ${quote_local_part:<string>}
+ ${quote_<lookup-type>:<string>}
+ ${randint:<n>}
+ ${reverse_ip:<ipaddr>}
+ ${rfc2047:<string>}
+ ${rfc2047d:<string>}
+ ${rxquote:<string>}
+ ${sha1:<string>}
+ ${sha256:<certificate>}
+ ${stat:<string>}
+ ${str2b64:<string>}
+ ${strlen:<string>}
+ ${substr_<start>_<length>:<string>}
+ ${time_eval:<string>}
+ ${time_interval:<string>}
+ ${uc:<string>}
+ ${utf8clean:<string>}
+ }}}
+
+## List of Conditions {{{
+
+ acl {{<name>}{<arg1>}{<arg2>}...}
+ bool {<string>}
+ bool_lax {<string>}
+ crypteq {<string1>}{<string2>}
+ eq {<string1>}{<string2>}, eqi {<string1>}{<string2>}
+ exists {<file name>}
+ ge {<string1>}{<string2>}, gei {<string1>}{<string2>}
+ gt {<string1>}{<string2>}, gti {<string1>}{<string2>}
+ inlist {<string1>}{<string2>}, inlisti {<string1>}{<string2>}
+ isip {<string>}, isip4 {<string>}, isip6 {<string>}
+ ldapauth {<ldap query>}
+ le {<string1>}{<string2>}, lei {<string1>}{<string2>}
+ lt {<string1>}{<string2>}, lti {<string1>}{<string2>}
+ match {<string1>}{<string2>}
+ match_address {<string1>}{<string2>}
+ match_domain {<string1>}{<string2>}
+ match_ip {<string1>}{<string2>}
+ match_local_part {<string1>}{<string2>}
+ pam {<string1>:<string2>:...}
+ pwcheck {<string1>:<string2>}
+ radius {<authentication string>}
+ saslauthd {{<user>}{<password>}{<service>}{<realm>}}
+ or {{<cond1>}{<cond2>}...}
+ and {{<cond1>}{<cond2>}...}
+ }}}
+
+## List of Functions {{{
+
+ ${lookup dnsdb{mx=a.b.example}{$value}fail}
+ ${lookup dnsdb{ptr=192.168.4.5}{$value}fail}
+ ${lookup dnsdb{>: a=host1.example}}
+ ${lookup dnsdb{>\n,: txt=a.b.example}}
+ ${lookup dnsdb{>\n; txt=a.b.example}}
+ ${lookup dnsdb{spf=example.org}}
+ ${lookup dnsdb{mxh=a.b.example}}
+ ${lookup dnsdb{zns=xxx.quercite.com}}
+ ${lookup dnsdb{zns=xxx.edu}}
+ ${lookup dnsdb {csa=$sender_helo_name}}
+ ${lookup dnsdb {>; a+=$sender_helo_name}}
+ ${lookup dnsdb{one.domain.com:two.domain.com}}
+ ${lookup dnsdb{a=one.host.com:two.host.com}}
+ ${lookup dnsdb{ptr = <; 1.2.3.4 ; 4.5.6.8}}
+ ${lookup dnsdb{defer_lax,a=one.host.com:two.host.com}}
+ ${lookup dnsdb{a=one.host.com:two.host.com}}
+ ${quote_ldap: a(bc)*, a<yz>; }
+ ${quote_ldap_dn: a(bc)*, a<yz>; }
+ ${lookup ldap {ldapi://%2Ftmp%2Fldap.sock/o=...
+ ${lookup ldap
+ ${lookup mysql{select mailbox from users where id='userx'}\
+ ${lookup pgsql{select home,name from users where id='userx'}\
+ ${lookup mysql{servers=master; UPDATE ...} }
+ ${lookup pgsql{servers=master/db/name/pw; UPDATE ...} }
+ ${lookup sqlite {/some/thing/sqlitedb \
+ ${acl{<name>}{<arg>}...}
+ ${certextract{<field>}{<certificate>}{<string2>}{<string3>}}
+ ${dlfunc{<file>}{<function>}{<arg>}{<arg>}...}
+ ${extract{<key>}{<string1>}{<string2>}{<string3>}}
+ ${extract{<number>}{<separators>}{<string1>}{<string2>}{<string3>}}
+ ${filter{<string>}{<condition>}}
+ ${hash{<string1>}{<string2>}{<string3>}}
+ ${hmac{<hashname>}{<secret>}{<string>}}
+ ${if <condition> {<string1>}{<string2>}}
+ ${length{<string1>}{<string2>}}
+ ${listextract{<number>}{<string1>}{<string2>}{<string3>}}
+ ${lookup{<key>} <search type> {<file>} {<string1>} {<string2>}}
+ ${lookup <search type> {<query>} {<string1>} {<string2>}}
+ ${map{<string1>}{<string2>}}
+ ${nhash{<string1>}{<string2>}{<string3>}}
+ ${perl{<subroutine>}{<arg>}{<arg>}...}
+ ${prvs{<address>}{<secret>}{<keynumber>}}
+ ${prvscheck{<address>}{<secret>}{<string>}}
+ ${readfile{<file name>}{<eol string>}}
+ ${readsocket{<name>}{<request>}{<timeout>}{<eol string>}{<fail string>}}
+ ${reduce{<string1>}{<string2>}{<string3>}}
+ ${run{<command> <args>}{<string1>}{<string2>}}
+ ${sg{<subject>}{<regex>}{<replacement>}}
+ ${sort{<string>}{<comparator>}{<extractor>}}
+ ${substr{<string1>}{<string2>}{<string3>}}
+ ${tr{<subject>}{<characters>}{<replacements>}}
+ ${perl{foo}}
+ ${perl{foo}{argument}}
+ ${perl{foo}{argument1}{argument2} ... }
+ ${lookup dnsdb {csa=$sender_helo_name}}
+ }}}
+
+## Routing Pre-Conditions {{{
+
+ address_test
+ check_local_user
+ condition
+ domains
+ expn
+ local_part_prefix
+ local_part_suffix
+ local_parts
+ require_files
+ senders
+ verify
+ verify_only
+ verify_recipient
+ verify_sender
+ }}}
+
+
+
+Cheat sheet: http://www.datadisk.co.uk/html_docs/exim/exim_cs.htm
+
+# vim:tw=0:et:ts=4:sw=4:fdm=marker:
+