consistent fork-time debug
[exim.git] / configs / config.samples / C037
CommitLineData
e0f3765a
PH
1Date: Wed, 22 Nov 2000 17:51:42 -0500 (EST)
2From: Dave C. <djc@microwave.com>
3
4[Syntax converted for Exim 4 by PH, 06-Dec-2001. Unchecked.]
5
6Ok.. Ive come up with something which might be worth including in the
7cookbook. Credit where it is due, the idea for this came from Nigel's
8C014.
9
10I have a setup to support ETRN for a few small (ok, two) domains.
11Currently it just leaves all the mail in the exim spool, and uses the
12default exim etrn response to flush it out.
13
14I don't like that - I agree with the opinion expressed on the list that
15mail should be delivered somewhere else, and then shoved down an SMTP
16session by some other program. Ive searched far and wide for something
17suitable to do that shoving, and finally hit upon the only program I
18trust to do that, handling errors and rejections correctly - exim
19itself.
20
21Nigel's solution for 'situation where a site I MX for has a known
22outage', combined with a bit of bash scriptery, seems to form a neat
23solution. (An intermittently connected host sort of falls under the
24'known outage' category ;)
25
26Without any further fluff, here are the details. Additional comments
27appear below..
28
29Either the real (intermittently connected) destination host needs to be
30listed as the lowest MX (with the exim server as a less preferred) , or
31the exim server needs to be the lowest MX, but have a router before the
32lookuphost router which uses route_list or something appropriate to
33normally deliver mail to the dialup host. The former is probably better
34for a host which is usually connected and is only occasionally
35disconnected (since other hosts would be able to delivery directly most
36of the time, skipping an extra relay), while the latter would probably
37work better for the converse ;) This paragraph actually applies anytime
38you are using ETRN..
39
40In either case, the routers below must precede whatever router handles
41the normal direct-to-dialup-destination..
42
43--
44
45smtp_etrn_command = /etc/exim/etrn_script $domain
46
47[- Content of /etc/exim/etrn_script: -]
48#!/bin/sh
49
50# Where exim lives
51EXIM=/usr/sbin/exim
52
53# Something appropriate to generate a temporary unique string
54UNIQ=`head -c100 /dev/urandom | md5sum | cut -f 1 -d" "`
55
56arg=$1
57domain=`echo $arg | sed 's/^\#//g'`
58
59if ( test -f /var/spool/etrn/${domain} ); then
60 exim_lock -q /var/spool/etrn/${domain} "mv /var/spool/etrn/${domain} /tmp/etrn-bsmtp-${UNIQ}"
61 ( cat /tmp/etrn-bsmtp-${UNIQ}
62 echo "QUIT" ) | $EXIM -bS -oMr etrn_requeue
63 rm -f /tmp/etrn-bsmtp-${UNIQ}
64fi
65
66$EXIM -R $domain
67
68[- end of etrn_script -]
69
70[- exim transport -]
71
72bsmtp_for_etrn:
73 driver=appendfile
74 file=/var/spool/etrn/$domain
75 user=exim
76 batch_max = 1000
77 use_bsmtp
78
79[- routers -]
80[- You probably would want to put the domains in a file or a dbm and
81[- adjused the 'domains' setting appropriately for both of these..
82
83# If any message has already been delivered to the bsmtp file,
84# this will detect the existence of the file and all messages will
85# go there, regardless of age.
86etrn_already:
87 driver = accept
88 transport = bsmtp_for_etrn
89 require_files = /var/spool/etrn/$domain
90 domains = etrntest.somedomain.com
91
92# If a message has been on the queue for over the specified amount of
93# time, this will catch it and drop it into the bsmtp file
94etrn_delay:
95 driver = accept
96 transport = bsmtp_for_etrn
97 condition = ${if >{$message_age}{1800} {yes}{no}}
98 domains = etrntest.somedomain.com
99
100[- -]
101
102Basically, this setup lets exim try to deliver to the real host for up
103to whatever time is specified in the \%etrn_delay%\ router. (1800 seconds =
10430 minutes), and then delivers all waiting messages, and any further
105messages, directly to a BSMTP file. This setup uses one big BSMTP
106file per domain, it probably wouldnt be too complex to have it use separate
107files.
108
109When the \^etrn_script^\ runs, it locks and renames the BSMTP file, and
110reinjects the messages to Exim, which (presumably) will now be able to
111deliver them. If it can't, then once they are too old they will again
112be sent off to the BSMTP file.. (If for som reason this occurs over and
113over without Exim being able to deliver them, eventually the messages
114will be returned with \*too many Received headers*\; this is a good
115thing, since their age will never get high enough for them to be
116returned by any retry rules).