annotate README.sendmail @ 790:e05f92db6857 BRANCH_1_2_17

Added tag RELEASE_1_2_17_1 for changeset dc0f9614c839
author Ben Schmidt
date Sun, 21 Nov 2010 01:00:59 +1100
parents 185d935587ae
children 0fb11a562397
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
473
185d935587ae Docu update
mmj
parents:
diff changeset
1 Using sendmail + VERP
185d935587ae Docu update
mmj
parents:
diff changeset
2
185d935587ae Docu update
mmj
parents:
diff changeset
3 --------------------------------------------------------------------------------
185d935587ae Docu update
mmj
parents:
diff changeset
4
185d935587ae Docu update
mmj
parents:
diff changeset
5 The following configuration enables VERP (http://cr.yp.to/proto/verp.txt) which
185d935587ae Docu update
mmj
parents:
diff changeset
6 is useful for mailing list managers that are able to take advantage of that
185d935587ae Docu update
mmj
parents:
diff changeset
7 feature.
185d935587ae Docu update
mmj
parents:
diff changeset
8
185d935587ae Docu update
mmj
parents:
diff changeset
9 This configuration is currently used for using the mlmmj manager
185d935587ae Docu update
mmj
parents:
diff changeset
10 (http://mlmmj.mmj.dk) with VERP enabled + sendmail.
185d935587ae Docu update
mmj
parents:
diff changeset
11
185d935587ae Docu update
mmj
parents:
diff changeset
12 The hack consists in hooking VERP rewriting in a replacement ruleset for the
185d935587ae Docu update
mmj
parents:
diff changeset
13 existing EnvFromSMTP one (called VerpEnvFromSMTP). This is going to work *only*
185d935587ae Docu update
mmj
parents:
diff changeset
14 if we are splitting messages with multiple recipients in separate queue files
185d935587ae Docu update
mmj
parents:
diff changeset
15 since the macro we are using for the rewriting ($u) is not set when multiple
185d935587ae Docu update
mmj
parents:
diff changeset
16 rcpt are present.
185d935587ae Docu update
mmj
parents:
diff changeset
17
185d935587ae Docu update
mmj
parents:
diff changeset
18 The first step consists in forcing envelope splitting, this is done using the
185d935587ae Docu update
mmj
parents:
diff changeset
19 QUEUE_GROUP feature, here we are definining r=1 (max 1 rcpt per message) for the
185d935587ae Docu update
mmj
parents:
diff changeset
20 default queue group:
185d935587ae Docu update
mmj
parents:
diff changeset
21
185d935587ae Docu update
mmj
parents:
diff changeset
22
185d935587ae Docu update
mmj
parents:
diff changeset
23 QUEUE_GROUP(`mqueue', `P=/var/spool/mqueue, F=f, I=1m, R=2, r=1')
185d935587ae Docu update
mmj
parents:
diff changeset
24
185d935587ae Docu update
mmj
parents:
diff changeset
25
185d935587ae Docu update
mmj
parents:
diff changeset
26 Since we are going to split a lot it's advisable to use the FAST_SPLIT option,
185d935587ae Docu update
mmj
parents:
diff changeset
27 additionally we need to enforce return-path inclusion in the local mailer:
185d935587ae Docu update
mmj
parents:
diff changeset
28
185d935587ae Docu update
mmj
parents:
diff changeset
29
185d935587ae Docu update
mmj
parents:
diff changeset
30 define(`confFAST_SPLIT', `100')dnl
185d935587ae Docu update
mmj
parents:
diff changeset
31 define(`LOCAL_SHELL_FLAGS', `eu9P')dnl
185d935587ae Docu update
mmj
parents:
diff changeset
32
185d935587ae Docu update
mmj
parents:
diff changeset
33
185d935587ae Docu update
mmj
parents:
diff changeset
34 Then we define a regex map for matching the addresses that we are going to
185d935587ae Docu update
mmj
parents:
diff changeset
35 rewrite, in our example we'll rewrite addresses like
185d935587ae Docu update
mmj
parents:
diff changeset
36
185d935587ae Docu update
mmj
parents:
diff changeset
37 <listname+bounces-123@domain.net>
185d935587ae Docu update
mmj
parents:
diff changeset
38
185d935587ae Docu update
mmj
parents:
diff changeset
39 with
185d935587ae Docu update
mmj
parents:
diff changeset
40
185d935587ae Docu update
mmj
parents:
diff changeset
41 <listname+bounces-123-user=foo.net@domain.net>
185d935587ae Docu update
mmj
parents:
diff changeset
42
185d935587ae Docu update
mmj
parents:
diff changeset
43 where user@foo.net is the recipient address of the message. So we need to apply
185d935587ae Docu update
mmj
parents:
diff changeset
44 our verp ruleset *only* to those addresses. Additionally we are also adding the
185d935587ae Docu update
mmj
parents:
diff changeset
45 Delivered-To header:
185d935587ae Docu update
mmj
parents:
diff changeset
46
185d935587ae Docu update
mmj
parents:
diff changeset
47
185d935587ae Docu update
mmj
parents:
diff changeset
48 LOCAL_CONFIG
185d935587ae Docu update
mmj
parents:
diff changeset
49 Kmatch_verp regex -m -a@VERP (listname\+bounces\-[0-9]+<@domain\.net\.?>)
185d935587ae Docu update
mmj
parents:
diff changeset
50 H?l?Delivered-To: $u
185d935587ae Docu update
mmj
parents:
diff changeset
51
185d935587ae Docu update
mmj
parents:
diff changeset
52
185d935587ae Docu update
mmj
parents:
diff changeset
53 Here's the ruleset, the first half of the ruleset is the existing EnvFromSMTP
185d935587ae Docu update
mmj
parents:
diff changeset
54 ruleset present in default sendmail.cf, the seconf half is the VERP stuff:
185d935587ae Docu update
mmj
parents:
diff changeset
55
185d935587ae Docu update
mmj
parents:
diff changeset
56
185d935587ae Docu update
mmj
parents:
diff changeset
57 SVerpEnvFromSMTP
185d935587ae Docu update
mmj
parents:
diff changeset
58 R$+ $: $>PseudoToReal $1 sender/recipient common
185d935587ae Docu update
mmj
parents:
diff changeset
59 R$* :; <@> $@ list:; special case
185d935587ae Docu update
mmj
parents:
diff changeset
60 R$* $: $>MasqSMTP $1 qualify unqual'ed names
185d935587ae Docu update
mmj
parents:
diff changeset
61 R$+ $: $>MasqEnv $1 do masquerading
185d935587ae Docu update
mmj
parents:
diff changeset
62
185d935587ae Docu update
mmj
parents:
diff changeset
63 R $* $: $(match_verp $1 $) match the address
185d935587ae Docu update
mmj
parents:
diff changeset
64 R $* + $* < @ $* . > $* @VERP $: $1 + $2 - $&u < @ $3 . > $4 VERP rewrite it using $u macro and add VERP string for failsafe
185d935587ae Docu update
mmj
parents:
diff changeset
65 R $* - < @ $* . > $* VERP $: $1 < @ $2 . > $3 if $u wasn't defined rewrite the address back
185d935587ae Docu update
mmj
parents:
diff changeset
66 R $* - < $+ @ $+ > < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
185d935587ae Docu update
mmj
parents:
diff changeset
67 R $* - $+ @ $+ < @ $* . > $* VERP $: $(dequote $1 "-" $2 "=" $3 $) < @ $4 . > $5 replace the "@" in rcpt address with "="
185d935587ae Docu update
mmj
parents:
diff changeset
68
185d935587ae Docu update
mmj
parents:
diff changeset
69
185d935587ae Docu update
mmj
parents:
diff changeset
70 Finally we need to rewrite the mailer definition for the used mailer (typically
185d935587ae Docu update
mmj
parents:
diff changeset
71 esmtp) specifying VerpEnvFromSMTP as the sender rewrite ruleset:
185d935587ae Docu update
mmj
parents:
diff changeset
72
185d935587ae Docu update
mmj
parents:
diff changeset
73
185d935587ae Docu update
mmj
parents:
diff changeset
74 MAILER_DEFINITIONS
185d935587ae Docu update
mmj
parents:
diff changeset
75 Mesmtp, P=[IPC], F=mDFMuXa, S=VerpEnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
185d935587ae Docu update
mmj
parents:
diff changeset
76 T=DNS/RFC822/SMTP,
185d935587ae Docu update
mmj
parents:
diff changeset
77 A=TCP $h
185d935587ae Docu update
mmj
parents:
diff changeset
78
185d935587ae Docu update
mmj
parents:
diff changeset
79
185d935587ae Docu update
mmj
parents:
diff changeset
80
185d935587ae Docu update
mmj
parents:
diff changeset
81 NOTE: for mailing list servers it's also a good idea keeping existing
185d935587ae Docu update
mmj
parents:
diff changeset
82 Delivered-To headers, sendmail needs the following patch for doing this
185d935587ae Docu update
mmj
parents:
diff changeset
83
185d935587ae Docu update
mmj
parents:
diff changeset
84 --- sendmail/conf.c.orig 2004-07-14 21:54:23.000000000 +0000
185d935587ae Docu update
mmj
parents:
diff changeset
85 +++ sendmail/conf.c 2004-12-06 15:22:05.000000000 +0000
185d935587ae Docu update
mmj
parents:
diff changeset
86 @@ -117,6 +117,7 @@
185d935587ae Docu update
mmj
parents:
diff changeset
87 { "content-length", H_ACHECK, NULL },
185d935587ae Docu update
mmj
parents:
diff changeset
88 { "subject", H_ENCODABLE, NULL },
185d935587ae Docu update
mmj
parents:
diff changeset
89 { "x-authentication-warning", H_FORCE, NULL },
185d935587ae Docu update
mmj
parents:
diff changeset
90 + { "delivered-to", H_FORCE, NULL },
185d935587ae Docu update
mmj
parents:
diff changeset
91
185d935587ae Docu update
mmj
parents:
diff changeset
92 { NULL, 0, NULL }
185d935587ae Docu update
mmj
parents:
diff changeset
93 };
185d935587ae Docu update
mmj
parents:
diff changeset
94
185d935587ae Docu update
mmj
parents:
diff changeset
95
185d935587ae Docu update
mmj
parents:
diff changeset
96 -- lcars@gentoo.org