1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
README.exim4 May 7th 2005
This is a step-by-step guide to run mlmmj with Exim4. The most current version
of this can be found on http://plonk.de/sw/mlmmj/README.exim4.
Notes:
- We assume that you have a user and group called mlmmj to use with mlmmj
- The exim user needs rx access rights to mlmmj's spool directory. (If you
don't want that, see below.) The easiest way is
"chmod 755 /path/to/mlmmj/spool", if it's ok that local users can see which
lists there are.
Note that the owner of the mlmmj spool must still be the mlmmj user (and
this user must have at least x rights to the directories below).
- Existence of mailing lists is automatically checked ($listdir) and you
don't need to put anything into your aliases file
- If you want VERP to be done by your MTA, follow the instructions below and
put an empty file named verp into the control directory of your lists
1. In the main configuration section:
MLMMJ_HOME=/var/spool/mlmmj
domainlist mlmmj_domains = list.example.net
2. Add +mlmmj_domains to relay_to_domains:
domainlist relay_to_domains = other.domain : +mlmmj_domains
3. mlmmj is barely interested in delay warnings, so add this in the main
configuration:
delay_warning_condition = ${if match_domain{$domain}{+mlmmj_domains}{no}{yes}}
4. In the routers section (before the dnslookup router, preferably at the
beginning):
mlmmj_router:
driver = accept
domains = +mlmmj_domains
require_files = MLMMJ_HOME/${lc::$local_part}
# Use this instead, if you don't want to give Exim rx rights to mlmmj spool.
# Exim will then spawn a new process running under the UID of "mlmmj".
#require_files = mlmmj:MLMMJ_HOME/${lc::$local_part}
local_part_suffix = +*
local_part_suffix_optional
headers_remove = Delivered-To
headers_add = Delivered-To: $local_part$local_part_suffix@$domain
transport = mlmmj_transport
If you want VERP to be done by your MTA, also add this:
verp_router:
driver = dnslookup
domains = !+mlmmj_domains
# we only consider messages sent in through loopback
condition = ${if eq{$sender_host_address}{127.0.0.1}{yes}{no}}
ignore_target_hosts = <; 0.0.0.0; 127.0.0.0/8; ::1/128; fe80::/10; ff00::/8
# only the un-VERPed bounce addresses are handled
senders = \N^.+\+bounces-\d+@.+\N
transport = verp_smtp
To prevent temporary errors for not-existing lists, add !+mlmmj_domains to the
domains condition of the dnslookup router:
dnslookup:
driver = dnslookup
domains = !+mlmmj_domains : !+local_domains
[...]
5. Somewhere in the transports section. (Change the path of mlmmj-receive if you
don't use the default location!):
mlmmj_transport:
driver = pipe
return_path_add
user = mlmmj
group = mlmmj
home_directory = MLMMJ_HOME
current_directory = MLMMJ_HOME
command = /usr/local/bin/mlmmj-receive -F -L MLMMJ_HOME/${lc:$local_part}
If you want VERP to be done by your MTA, also add this:
verp_smtp:
driver = smtp
# put recipient address into return_path
return_path = ${quote_local_part:${local_part:$return_path}}-\
${original_local_part}=${original_domain}@\
${domain:$return_path}
# must restrict to one recipient at a time
max_rcpt = 1
# Errors-To: may carry old return_path
headers_remove = Errors-To
headers_add = Errors-To: $return_path
6. Test your setup with
$ exim -bt mlmmj-test@your.list.domain
mlmmj-test@your.list.domain
router = mlmmj_router, transport = mlmmj_transport
If you get different output, run it with -d to see what's going wrong.
If not, you're done!
Jakob Hirsch (jh at plonk dot de)
|