Exim4Config
Example for exim4 configs:
Debian Exim
The following was tested on Exim 4.94.2 Debian split config.
- Install either exim4-daemon-light or exim4-daemon-heavy, depending on feature requirements.
exim4-daemon-light is sufficient unless you need database lookup features (MySQL etc.) or content/malware scanning etc.
apt-get install exim4-daemon-light
Initial setup
If RT is on a dedicated server or VM, you will probably want to configure Exim in smarthost mode.
smarthost mode will send all outgoing email to your mail server. There are some exceptions which you may want to configure.
/etc/exim4/update-exim4.conf.conf example below - set any domains for your RT box, and the mail server name, and then execute update-exim4.conf
# /etc/exim4/update-exim4.conf.conf # # Edit this file and /etc/mailname by hand and execute update-exim4.conf # yourself or use 'dpkg-reconfigure exim4-config' # # Please note that this is _not_ a dpkg-conffile and that automatic changes # to this file might happen. The code handling this will honor your local # changes, so this is usually fine, but will break local schemes that mess # around with multiple versions of the file. # # update-exim4.conf uses this file to determine variable values to generate # exim configuration macros for the configuration file. # # Most settings found in here do have corresponding questions in the # Debconf configuration, but not all of them. # # This is a Debian specific file dc_eximconfig_configtype='smarthost' dc_other_hostnames='rt.example.com:support.example.com' dc_local_interfaces= dc_readhost= dc_relay_domains= dc_minimaldns='false' dc_relay_nets= dc_smarthost='your-mail-server.example.com' CFILEMODE='644' dc_use_split_config='true' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='mail_spool'
Macros (Defined in debian-exim config. Allows easy enabling or config of certain features.)
/etc/exim4/conf.d/main/000_localmacros:
REWRITE_LOCAL_DOMAIN = example.com SYSTEM_ALIASES_PIPE_TRANSPORT = address_pipe IGNORE_SMTP_LINE_LENGTH_LIMIT = 1 MAIN_TRUSTED_USERS = www-data
Outgoing mail - extra tweaks
1. Optional: Allow exceptions to sending everything to the smarthost, for example some local mailboxes.
The following will deliver mail to bob@rt.example.com, but only if the user bob actually exists, and there is a mailbox file in /var/mail/bob
/etc/exim4/conf.d/router/900_exim4-config_local_user
# /etc/exim4/conf.d/router/900_exim4-config_local_user # # This router matches local user mailboxes. local_user: debug_print = "R: local_user for $local_part@$domain" driver = accept domains = +local_domains require_files = /var/mail/${local_part} check_local_user # local_parts = ! root transport = LOCAL_DELIVERY cannot_route_message = Unknown user
Everything else will get sent to the smarthost, (Even if the user exists, a mailbox file must also exist)
Test with:
# touch /var/mail/bob && chown bob:bob /var/mail/bob # service exim4 restart # id bob uid=1002(bob) gid=1002(bob) groups=1002(bob),27(sudo) # exim -bt bob@rt.example.com R: system_aliases for bob@rt.example.com R: userforward for bob@rt.example.com R: procmail for bob@rt.example.com R: maildrop for bob@rt.example.com R: lowuid_aliases for bob@rt.example.com (UID 1002) R: local_user for bob@rt.example.com bob@rt.example.com router = local_user, transport = mail_spool
2. Optional: Reroute *@rt.example.com to *@example.com
Bear in mind that Exim will be the MTA for everything on the local machine, not just RT. It can be annoying if local processes, (for example cron) send mail to local users where it will either bounce, or sit in /var/mail and never be seen.
To ensure local mail gets delivered to a user's actual mailbox (and save a bit of /etc/aliases hell), the following will deliver any mail for local users to the main domain (and via the smarthost):
# /etc/exim4/conf.d/router/950_exim4-config_local_user_smarthost # force delivery of user@rt.example.com -> user@example.com: not_local_user: debug_print = "R: not_local_user for $local_part@$domain" driver = redirect domains = +local_domains data = ${local_part}@REWRITE_LOCAL_DOMAIN no_verify
Test with:
# service exim4 restart # exim -bt bob@rt.example.com R: system_aliases for bob@rt.example.com R: userforward for bob@rt.example.com R: procmail for bob@rt.example.com R: maildrop for bob@rt.example.com R: lowuid_aliases for bob@rt.example.com (UID 1002) R: local_user for bob@rt.example.com R: not_local_user for bob@rt.example.com R: smarthost for bob@example.com bob@example.com <-- bob@rt.example.com router = smarthost, transport = remote_smtp_smarthost host your-mail-server.example.com [x:x:x::x] host your-mail-server.example.com [x.x.x.x]
Incoming mail
For incoming mail to RT, the simplest method is to add the queue aliases to /etc/aliases:
On your mail server (if appropriate):
### RT/Ticketer Addresses: sales: sales@rt.example.com sales-comment: sales-comment@rt.example.com support: support@rt.example.com support-comment: support-comment@rt.example.com accounts: accounts@rt.example.com accounts-comment: accounts-comment@rt.example.com
On the RT server:
# forwarders for RT queues: sales: "|/usr/bin/rt-mailgate --queue \"Sales\" --action correspond --url https://rt.example.com/rt" sales-comment: "|/usr/bin/rt-mailgate --queue \"Sales\" --action comment --url https://rt.example.com/rt" support: "|/usr/bin/rt-mailgate --queue \"Support\" --action correspond --url https://rt.example.com/rt" support-comment: "|/usr/bin/rt-mailgate --queue \"Support\" --action comment --url https://rt.example.com/rt" accounts: "|/usr/bin/rt-mailgate --queue \"Accounts\" --action correspond --url https://rt.example.com/rt" accounts-comment: "|/usr/bin/rt-mailgate --queue \"Accounts\" --action comment --url https://rt.example.com/rt"