| 1 | # Exim test configuration 0001 |
| 2 | |
| 3 | # This configuration sets every option that is not dependent on optional code |
| 4 | # in the binary, except for exim_user and exim_group, because setting them can |
| 5 | # mess up the creation of the spool directory etc. |
| 6 | |
| 7 | exim_path = EXIM_PATH |
| 8 | host_lookup_order = bydns |
| 9 | spool_directory = DIR/spool |
| 10 | log_file_path = DIR/spool/log/%slog |
| 11 | gecos_pattern = "" |
| 12 | gecos_name = CALLER_NAME |
| 13 | |
| 14 | |
| 15 | no_accept_8bitmime |
| 16 | acl_not_smtp = check_local_message |
| 17 | acl_smtp_auth = check_auth |
| 18 | acl_smtp_connect = check_connect |
| 19 | acl_smtp_data = check_message |
| 20 | acl_smtp_etrn = check_etrn |
| 21 | acl_smtp_expn = check_expn |
| 22 | acl_smtp_helo = check_helo |
| 23 | acl_smtp_mail = check_mail |
| 24 | acl_smtp_mailauth = check_mailauth |
| 25 | acl_smtp_quit = check_quit |
| 26 | acl_smtp_predata = check_predata |
| 27 | acl_smtp_rcpt = check_recipient |
| 28 | acl_smtp_vrfy = check_vrfy |
| 29 | admin_groups = 1234 |
| 30 | allow_mx_to_ip |
| 31 | allow_utf8_domains |
| 32 | auth_advertise_hosts = a.a.h |
| 33 | auto_thaw = 1d |
| 34 | bi_command = |
| 35 | bounce_message_file = |
| 36 | bounce_message_text = |
| 37 | bounce_return_body = false |
| 38 | no_bounce_return_message |
| 39 | return_size_limit = 12K |
| 40 | bounce_return_size_limit = 10K |
| 41 | callout_domain_negative_expire = 1h |
| 42 | callout_domain_positive_expire = 1d |
| 43 | callout_negative_expire = 5h |
| 44 | callout_positive_expire = 1w |
| 45 | callout_random_local_part = xxx\ |
| 46 | xx |
| 47 | check_log_inodes = 0 |
| 48 | check_log_space = 0 |
| 49 | check_spool_inodes = 0 |
| 50 | check_spool_space = 0 |
| 51 | daemon_smtp_port = |
| 52 | daemon_smtp_ports = |
| 53 | daemon_startup_retries = 3 |
| 54 | daemon_startup_sleep = 8s |
| 55 | delay_warning = 1d |
| 56 | delay_warning_condition = ${if match{$h_precedence:}{(?i)bulk|list}{no}{yes}} |
| 57 | deliver_drop_privilege |
| 58 | deliver_queue_load_max = 6.2 |
| 59 | delivery_date_remove |
| 60 | dns_again_means_nonexist = *.esri.com:jeni.com |
| 61 | dns_check_names_pattern = ^.*$ |
| 62 | dns_ipv4_lookup = * |
| 63 | dns_retrans = 0s |
| 64 | dns_retry = 0 |
| 65 | drop_cr |
| 66 | envelope_to_remove |
| 67 | errors_copy = |
| 68 | errors_reply_to = postmaster@cam.ac.uk |
| 69 | extra_local_interfaces = 1.2.3.4 |
| 70 | no_extract_addresses_remove_arguments |
| 71 | finduser_retries = 0 |
| 72 | allow_domain_literals |
| 73 | freeze_tell = postmaster |
| 74 | headers_charset = UTF-8 |
| 75 | header_maxsize = 2M |
| 76 | header_line_maxsize = 2K |
| 77 | helo_accept_junk_hosts = |
| 78 | helo_allow_chars = _ |
| 79 | helo_lookup_domains = |
| 80 | helo_verify_hosts = localhost |
| 81 | helo_try_verify_hosts = 1.2.3.4 |
| 82 | hold_domains = |
| 83 | host_lookup = a.b.c.d |
| 84 | host_reject_connection = 10.9.8.7 |
| 85 | hosts_connection_nolog = 127.0.0.1 |
| 86 | hosts_treat_as_local = |
| 87 | ignore_bounce_errors_after = 2m |
| 88 | ignore_fromline_hosts = a.b.c.d |
| 89 | ignore_fromline_local |
| 90 | keep_malformed = 4d |
| 91 | no_local_from_check |
| 92 | local_from_prefix = *- |
| 93 | local_from_suffix = =* |
| 94 | local_interfaces = |
| 95 | local_scan_timeout = 10s |
| 96 | local_sender_retain |
| 97 | localhost_number = "3 " |
| 98 | log_selector = \ |
| 99 | +address_rewrite \ |
| 100 | -all \ |
| 101 | +all_parents \ |
| 102 | +arguments \ |
| 103 | -connection_reject \ |
| 104 | -delay_delivery \ |
| 105 | +incoming_interface \ |
| 106 | +incoming_port \ |
| 107 | +lost_incoming_connection \ |
| 108 | -queue_run \ |
| 109 | +received_recipients \ |
| 110 | +received_sender \ |
| 111 | -retry_defer \ |
| 112 | +return_path_on_delivery \ |
| 113 | +sender_on_delivery \ |
| 114 | +size_reject \ |
| 115 | -skip_delivery \ |
| 116 | +smtp_confirmation \ |
| 117 | +smtp_connection \ |
| 118 | +smtp_syntax_error \ |
| 119 | +subject \ |
| 120 | +tls_cipher \ |
| 121 | +tls_peerdn |
| 122 | log_timezone |
| 123 | lookup_open_max = 16 |
| 124 | max_username_length = 8 |
| 125 | message_body_visible = 500 |
| 126 | message_id_header_domain = a.b.c |
| 127 | message_id_header_text = x.y.z |
| 128 | no_message_logs |
| 129 | message_size_limit = 500K |
| 130 | mua_wrapper |
| 131 | never_users = root:0 |
| 132 | percent_hack_domains = |
| 133 | pipelining_advertise_hosts = *.b.c |
| 134 | pid_file_path = /some/thing |
| 135 | no_preserve_message_logs |
| 136 | primary_hostname = some.host.name |
| 137 | no_print_topbitchars |
| 138 | process_log_path = /a/b/c/d |
| 139 | prod_requires_admin |
| 140 | qualify_domain = some.dom.ain |
| 141 | qualify_recipient = some.dom.ain |
| 142 | queue_domains = a.b.c |
| 143 | queue_list_requires_admin |
| 144 | no_queue_only |
| 145 | no_queue_only_override |
| 146 | queue_only_file = /var/spool/exim/queue_only |
| 147 | queue_only_load = 8.2 |
| 148 | no_queue_run_in_order |
| 149 | queue_run_max = 5 |
| 150 | queue_smtp_domains = x.y.z |
| 151 | receive_timeout = 0s |
| 152 | received_header_text = Received: ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}{${if def:sender_ident {from ${sender_ident} }}${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}by ${primary_hostname} ${if def:received_protocol {with ${received_protocol}}} (Exim ${version_number} #${compile_number})\n\tid ${message_id}${if def:received_for {\n\tfor $received_for}} |
| 153 | received_headers_max = 30 |
| 154 | recipient_unqualified_hosts = localhost:some.host.name |
| 155 | recipients_max = 0 |
| 156 | no_recipients_max_reject |
| 157 | remote_max_parallel = 1 |
| 158 | remote_sort_domains = |
| 159 | retry_data_expire = 24h |
| 160 | retry_interval_max = 3d |
| 161 | return_path_remove |
| 162 | rfc1413_hosts = |
| 163 | sender_unqualified_hosts = localhost:some.host.name |
| 164 | smtp_accept_keepalive |
| 165 | smtp_accept_max = 20 |
| 166 | smtp_accept_max_nonmail = 40 |
| 167 | smtp_accept_max_nonmail_hosts = ! *.b.c |
| 168 | smtp_accept_max_per_connection = 20 |
| 169 | smtp_accept_max_per_host = 4 |
| 170 | smtp_accept_queue = 0 |
| 171 | smtp_accept_queue_per_connection = 10 |
| 172 | smtp_active_hostname = x.y.z |
| 173 | no_smtp_enforce_sync |
| 174 | smtp_max_synprot_errors = 11 |
| 175 | smtp_max_unknown_commands = 10 |
| 176 | smtp_ratelimit_hosts = * |
| 177 | smtp_ratelimit_mail = 1, 1s, 2, 10s |
| 178 | smtp_ratelimit_rcpt = 10, 2s, 5, 5m |
| 179 | smtp_accept_reserve = 0 |
| 180 | smtp_banner = ${primary_hostname} ESMTP Exim ${version_number} #${compile_number} ${tod_full} |
| 181 | smtp_check_spool_space |
| 182 | smtp_connect_backlog = 5 |
| 183 | smtp_etrn_command = |
| 184 | smtp_etrn_serialize |
| 185 | smtp_load_reserve = 2 |
| 186 | smtp_receive_timeout = 1m |
| 187 | smtp_reserve_hosts = |
| 188 | smtp_return_error_details |
| 189 | no_split_spool_directory |
| 190 | no_strip_excess_angle_brackets |
| 191 | no_strip_trailing_dot |
| 192 | no_syslog_duplication |
| 193 | syslog_facility = uucp |
| 194 | syslog_processname = mta-exim |
| 195 | no_syslog_timestamp |
| 196 | system_filter = /home/exim/test/filter |
| 197 | system_filter_directory_transport = |
| 198 | system_filter_file_transport = |
| 199 | system_filter_group = mail |
| 200 | system_filter_pipe_transport = |
| 201 | system_filter_reply_transport = |
| 202 | system_filter_user = 99 |
| 203 | tcp_nodelay = false |
| 204 | timeout_frozen_after = 7d |
| 205 | timezone = EDT |
| 206 | trusted_groups = 42 |
| 207 | trusted_users = ${readfile{DIR/aux-fixed/TESTNUM.trusted}{:}} |
| 208 | unknown_login = unknownlogin |
| 209 | unknown_username = Exim Testing |
| 210 | untrusted_set_sender = * |
| 211 | uucp_from_pattern = ^From\s+(\S+)\s+(?:[a-zA-Z]{3},?\s+)?(?:[a-zA-Z]{3}\s+\d?\d|\d?\d\s+[a-zA-Z]{3}\s+\d\d(?:\d\d)?)\s+\d\d?:\d\d? |
| 212 | uucp_from_sender = $1 |
| 213 | warn_message_file = /home/exim/test/warnmsg_file |
| 214 | write_rejectlog = false |
| 215 | |
| 216 | |
| 217 | # ----- Routers ----- |
| 218 | |
| 219 | begin routers |
| 220 | |
| 221 | # The manualroute router |
| 222 | |
| 223 | manualroute: |
| 224 | driver = manualroute |
| 225 | address_data = domainlist address data |
| 226 | cannot_route_message = can't route this address |
| 227 | caseful_local_part |
| 228 | condition = |
| 229 | debug_print = |
| 230 | disable_logging |
| 231 | domains = |
| 232 | errors_to = |
| 233 | no_fail_verify_recipient |
| 234 | no_fail_verify_sender |
| 235 | fallback_hosts = localhost |
| 236 | group = mail |
| 237 | headers_add = |
| 238 | headers_remove = |
| 239 | host_find_failed = freeze |
| 240 | hosts_randomize |
| 241 | no_initgroups |
| 242 | local_parts = |
| 243 | more |
| 244 | no_pass_on_timeout |
| 245 | pass_router = manualroute2 |
| 246 | redirect_router = manualroute2 |
| 247 | require_files = |
| 248 | route_data = ${lookup{$local_part}lsearch{/}} |
| 249 | router_home_directory = /usr |
| 250 | self = freeze |
| 251 | senders = |
| 252 | transport = smtp |
| 253 | no_unseen |
| 254 | user = root |
| 255 | no_verify_only |
| 256 | verify_recipient |
| 257 | verify_sender |
| 258 | |
| 259 | # Manualroute2 router, for mutually exclusive options |
| 260 | |
| 261 | manualroute2: |
| 262 | driver = manualroute |
| 263 | domains = ! +local_domains |
| 264 | route_list = ^fax(\.cl(\.cam(\.ac\.uk)?)?)?$ cl.cam.ac.uk; \ |
| 265 | *.uucp britain.eu.net |
| 266 | |
| 267 | # The redirect router, in "alias" mode |
| 268 | |
| 269 | alias: |
| 270 | driver = redirect |
| 271 | address_data = aliasfile address data |
| 272 | allow_fail |
| 273 | allow_freeze |
| 274 | caseful_local_part |
| 275 | no_check_ancestor |
| 276 | condition = |
| 277 | data = ${lookup{$local_part}lsearch{/etc/aliases}} |
| 278 | debug_print = |
| 279 | directory_transport = dummy |
| 280 | domains = |
| 281 | errors_to = |
| 282 | expn |
| 283 | no_fail_verify_recipient |
| 284 | no_fail_verify_sender |
| 285 | fallback_hosts = |
| 286 | file_transport = dummy |
| 287 | forbid_blackhole |
| 288 | no_forbid_file |
| 289 | forbid_include |
| 290 | no_forbid_pipe |
| 291 | group = 100 |
| 292 | headers_add = |
| 293 | headers_remove = |
| 294 | hide_child_in_errmsg |
| 295 | include_directory = /i/n/c |
| 296 | no_initgroups |
| 297 | local_part_prefix = |
| 298 | no_local_part_prefix_optional |
| 299 | local_part_suffix = |
| 300 | no_local_part_suffix_optional |
| 301 | local_parts = |
| 302 | more |
| 303 | no_one_time |
| 304 | pipe_transport = dummy |
| 305 | no_qualify_preserve_domain |
| 306 | no_repeat_use |
| 307 | qualify_domain = xxxx |
| 308 | redirect_router = aliasfile2 |
| 309 | require_files = |
| 310 | retry_use_local_part |
| 311 | no_rewrite |
| 312 | senders = |
| 313 | sieve_vacation_directory = /thing/thong |
| 314 | sieve_subaddress = rhubarb |
| 315 | sieve_useraddress = custard |
| 316 | no_skip_syntax_errors |
| 317 | syntax_errors_to = |
| 318 | transport_current_directory = |
| 319 | transport_home_directory = |
| 320 | no_unseen |
| 321 | user = 100 |
| 322 | no_verify_only |
| 323 | verify_recipient |
| 324 | verify_sender |
| 325 | |
| 326 | # Aliasfile2 for mutually exclusive options |
| 327 | |
| 328 | aliasfile2: |
| 329 | driver = redirect |
| 330 | allow_defer |
| 331 | caseful_local_part |
| 332 | check_group |
| 333 | check_owner |
| 334 | file = /some/file |
| 335 | retry_use_local_part |
| 336 | |
| 337 | # The redirect router in "forward" mode |
| 338 | |
| 339 | forward: |
| 340 | driver = redirect |
| 341 | allow_filter |
| 342 | forbid_exim_filter |
| 343 | forbid_sieve_filter |
| 344 | caseful_local_part |
| 345 | check_ancestor |
| 346 | check_local_user |
| 347 | condition = |
| 348 | debug_print = |
| 349 | directory_transport = dummy |
| 350 | domains = |
| 351 | errors_to = |
| 352 | expn |
| 353 | no_fail_verify_recipient |
| 354 | no_fail_verify_sender |
| 355 | fallback_hosts = |
| 356 | file = //.forward2 |
| 357 | file_transport = dummy |
| 358 | no_forbid_file |
| 359 | forbid_blackhole |
| 360 | forbid_filter_existstest |
| 361 | no_forbid_filter_logwrite |
| 362 | forbid_filter_dlfunc |
| 363 | forbid_filter_lookup |
| 364 | forbid_filter_readfile |
| 365 | forbid_filter_readsocket |
| 366 | forbid_filter_reply |
| 367 | forbid_filter_run |
| 368 | no_forbid_include |
| 369 | no_forbid_pipe |
| 370 | group = mail |
| 371 | headers_add = |
| 372 | headers_remove = |
| 373 | hide_child_in_errmsg |
| 374 | no_ignore_eacces |
| 375 | no_ignore_enotdir |
| 376 | no_initgroups |
| 377 | local_part_prefix = xxx- |
| 378 | local_part_prefix_optional |
| 379 | local_part_suffix = |
| 380 | no_local_part_suffix_optional |
| 381 | local_parts = |
| 382 | modemask = 022 |
| 383 | more |
| 384 | no_one_time |
| 385 | owners = root |
| 386 | owngroups = mail |
| 387 | pipe_transport = dummy |
| 388 | no_qualify_preserve_domain |
| 389 | redirect_router = aliasfile2 |
| 390 | reply_transport = dummy |
| 391 | require_files = |
| 392 | rewrite |
| 393 | senders = |
| 394 | no_skip_syntax_errors |
| 395 | syntax_errors_text = rhubarb |
| 396 | syntax_errors_to = |
| 397 | transport_current_directory = |
| 398 | transport_home_directory = |
| 399 | no_unseen |
| 400 | user = root |
| 401 | no_verify_only |
| 402 | no_verify_recipient |
| 403 | no_verify_sender |
| 404 | |
| 405 | # The accept router |
| 406 | |
| 407 | localuser: |
| 408 | driver = accept |
| 409 | no_address_test |
| 410 | caseful_local_part |
| 411 | check_local_user |
| 412 | condition = |
| 413 | debug_print = |
| 414 | domains = |
| 415 | errors_to = |
| 416 | expn |
| 417 | no_fail_verify_recipient |
| 418 | no_fail_verify_sender |
| 419 | fallback_hosts = |
| 420 | group = mail |
| 421 | headers_add = X-added: by localuser |
| 422 | headers_remove = |
| 423 | no_initgroups |
| 424 | local_part_prefix = |
| 425 | no_local_part_prefix_optional |
| 426 | local_part_suffix = |
| 427 | no_local_part_suffix_optional |
| 428 | local_parts = |
| 429 | no_log_as_local |
| 430 | more |
| 431 | redirect_router = smartuser |
| 432 | require_files = |
| 433 | senders = |
| 434 | transport = ${if eq{$local_part}{caller}{local_mbx_delivery}{local_delivery}} |
| 435 | transport_current_directory = |
| 436 | transport_home_directory = |
| 437 | no_unseen |
| 438 | user = 99 |
| 439 | no_verify_only |
| 440 | verify_recipient |
| 441 | verify_sender |
| 442 | |
| 443 | # The redirect router in "smartuser" mode |
| 444 | |
| 445 | smartuser: |
| 446 | driver = redirect |
| 447 | caseful_local_part |
| 448 | condition = |
| 449 | data = user@domain |
| 450 | debug_print = |
| 451 | domains = |
| 452 | errors_to = |
| 453 | expn |
| 454 | no_fail_verify_recipient |
| 455 | no_fail_verify_sender |
| 456 | fallback_hosts = |
| 457 | file_transport = dummy |
| 458 | forbid_file |
| 459 | forbid_pipe |
| 460 | group = mail |
| 461 | headers_add = |
| 462 | headers_remove = |
| 463 | hide_child_in_errmsg |
| 464 | no_initgroups |
| 465 | local_part_prefix = |
| 466 | no_local_part_prefix_optional |
| 467 | local_part_suffix = |
| 468 | no_local_part_suffix_optional |
| 469 | local_parts = abcd |
| 470 | log_as_local |
| 471 | more |
| 472 | pipe_transport = dummy |
| 473 | qualify_preserve_domain |
| 474 | redirect_router = localuser |
| 475 | require_files = |
| 476 | retry_use_local_part |
| 477 | no_rewrite |
| 478 | senders = |
| 479 | no_unseen |
| 480 | user = root |
| 481 | no_verify_only |
| 482 | verify_recipient |
| 483 | verify_sender |
| 484 | |
| 485 | |
| 486 | # ----- Transports ----- |
| 487 | |
| 488 | # Dummy transport, to refer back to |
| 489 | |
| 490 | begin transports |
| 491 | |
| 492 | dummy: |
| 493 | driver = pipe |
| 494 | disable_logging |
| 495 | |
| 496 | # Appendfile Transport |
| 497 | |
| 498 | appendfile: |
| 499 | driver = appendfile |
| 500 | allow_fifo |
| 501 | no_allow_symlink |
| 502 | batch_max = 100 |
| 503 | batch_id = rhubarb |
| 504 | body_only |
| 505 | no_check_group |
| 506 | no_check_owner |
| 507 | check_string = abcd |
| 508 | create_directory |
| 509 | create_file = anywhere |
| 510 | current_directory = |
| 511 | debug_print = |
| 512 | delivery_date_add |
| 513 | directory_mode = 0700 |
| 514 | envelope_to_add |
| 515 | escape_string = xyz |
| 516 | file = /home/$local_part/inbox |
| 517 | file_format = "From : appendfile" |
| 518 | no_file_must_exist |
| 519 | group = mail |
| 520 | headers_add = X-original-domain: $original_domain\nX-original-localp: $original_local_part |
| 521 | headers_remove = |
| 522 | headers_rewrite = a@b c@d |
| 523 | lock_fcntl_timeout = 10s |
| 524 | lock_interval = 3s |
| 525 | lock_retries = 10 |
| 526 | lockfile_mode = 0600 |
| 527 | lockfile_timeout = 30m |
| 528 | mailbox_size = 1000 |
| 529 | mailbox_filecount = 9999 |
| 530 | message_size_limit = 1M |
| 531 | mode = 0600 |
| 532 | mode_fail_narrower |
| 533 | no_notify_comsat |
| 534 | message_prefix = From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox}\n |
| 535 | quota = |
| 536 | no_quota_is_inclusive |
| 537 | quota_size_regex = (\d+)$ |
| 538 | quota_warn_message = "A warning message" |
| 539 | quota_warn_threshold = |
| 540 | rcpt_include_affixes |
| 541 | retry_use_local_part |
| 542 | return_path = xxxx |
| 543 | return_path_add |
| 544 | shadow_condition = $h_return-receipt-to |
| 545 | shadow_transport = dummy |
| 546 | message_suffix = \n |
| 547 | transport_filter = |
| 548 | transport_filter_timeout = 10s |
| 549 | no_use_crlf |
| 550 | use_fcntl_lock |
| 551 | use_lockfile |
| 552 | user = root |
| 553 | |
| 554 | # For options that are mutually exclusive with those above |
| 555 | |
| 556 | appendfile2: |
| 557 | driver = appendfile |
| 558 | directory = /etc |
| 559 | directory_file = afilename |
| 560 | quota_directory = /some/directory |
| 561 | quota = 1M |
| 562 | quota_filecount = 10 |
| 563 | use_bsmtp |
| 564 | |
| 565 | # Ditto |
| 566 | |
| 567 | appendfile4: |
| 568 | driver = appendfile |
| 569 | directory = /etc |
| 570 | |
| 571 | # Smtp transport |
| 572 | |
| 573 | smtp: |
| 574 | driver = smtp |
| 575 | authenticated_sender = abcde |
| 576 | authenticated_sender_force = true |
| 577 | no_allow_localhost |
| 578 | command_timeout = 5m |
| 579 | connect_timeout = 0s |
| 580 | connection_max_messages = 0 |
| 581 | data_timeout = 5m |
| 582 | debug_print = |
| 583 | delay_after_cutoff |
| 584 | no_delivery_date_add |
| 585 | dns_qualify_single |
| 586 | no_dns_search_parents |
| 587 | no_envelope_to_add |
| 588 | fallback_hosts = localhost |
| 589 | final_timeout = 10m |
| 590 | no_gethostbyname |
| 591 | headers_add = |
| 592 | headers_remove = |
| 593 | helo_data = some.text |
| 594 | hosts = localhost |
| 595 | hosts_avoid_esmtp = x.y.z |
| 596 | hosts_max_try = 10 |
| 597 | hosts_max_try_hardlimit = 20 |
| 598 | hosts_override |
| 599 | hosts_randomize |
| 600 | hosts_require_auth = * |
| 601 | hosts_try_auth = * |
| 602 | interface = 127.0.0.1 |
| 603 | max_rcpt = 0 |
| 604 | multi_domain |
| 605 | port = 25 |
| 606 | retry_include_ip_address |
| 607 | no_return_path_add |
| 608 | serialize_hosts = |
| 609 | size_addition = -1 |
| 610 | transport_filter = |
| 611 | |
| 612 | # End |