Initial revision
authornigel <nigel>
Mon, 22 May 2000 19:54:39 +0000 (19:54 +0000)
committernigel <nigel>
Mon, 22 May 2000 19:54:39 +0000 (19:54 +0000)
82 files changed:
.cvsignore [new file with mode: 0644]
ChangeLog.html [new file with mode: 0644]
FAQ.html [new file with mode: 0644]
NewStuff.html [new file with mode: 0644]
branding/branding.html [new file with mode: 0644]
changelogs/ChangeLog-2.10.html [new file with mode: 0644]
changelogs/ChangeLog-2.11.html [new file with mode: 0644]
changelogs/ChangeLog-2.12.html [new file with mode: 0644]
changelogs/ChangeLog-3.00.html [new file with mode: 0644]
changelogs/ChangeLog-3.01.html [new file with mode: 0644]
changelogs/ChangeLog-3.10.html [new file with mode: 0644]
config.samples/C001 [new file with mode: 0644]
config.samples/C002 [new file with mode: 0644]
config.samples/C003 [new file with mode: 0644]
config.samples/C004 [new file with mode: 0644]
config.samples/C005 [new file with mode: 0644]
config.samples/C006 [new file with mode: 0644]
config.samples/C007 [new file with mode: 0644]
config.samples/C008 [new file with mode: 0644]
config.samples/C009 [new file with mode: 0644]
config.samples/C010 [new file with mode: 0644]
config.samples/C011 [new file with mode: 0644]
config.samples/C012 [new file with mode: 0644]
config.samples/C013 [new file with mode: 0644]
config.samples/C014 [new file with mode: 0644]
config.samples/C015 [new file with mode: 0644]
config.samples/C016 [new file with mode: 0644]
config.samples/C017 [new file with mode: 0644]
config.samples/C018 [new file with mode: 0644]
config.samples/C019 [new file with mode: 0644]
config.samples/C020 [new file with mode: 0644]
config.samples/C021 [new file with mode: 0644]
config.samples/C022 [new file with mode: 0644]
config.samples/C022.tar [new file with mode: 0644]
config.samples/C023 [new file with mode: 0644]
config.samples/C024 [new file with mode: 0644]
config.samples/C025 [new file with mode: 0644]
config.samples/C026 [new file with mode: 0644]
config.samples/C027 [new file with mode: 0644]
config.samples/C028 [new file with mode: 0644]
config.samples/C029 [new file with mode: 0644]
config.samples/C030 [new file with mode: 0644]
config.samples/C031 [new file with mode: 0644]
config.samples/C032 [new file with mode: 0644]
config.samples/C032.tar [new file with mode: 0644]
config.samples/C033 [new file with mode: 0644]
config.samples/C034 [new file with mode: 0644]
config.samples/F001 [new file with mode: 0644]
config.samples/F002 [new file with mode: 0644]
config.samples/F003 [new file with mode: 0644]
config.samples/F004 [new file with mode: 0644]
config.samples/README [new file with mode: 0644]
credits.html [new file with mode: 0644]
docs.html [new file with mode: 0644]
home.html [new file with mode: 0644]
howto/mailman.html [new file with mode: 0644]
howto/old_rbl.html [new file with mode: 0644]
howto/rbl.html [new file with mode: 0644]
howto/relay.html [new file with mode: 0644]
howto_mirror.html [new file with mode: 0644]
images/dragonlogo.jpg [new file with mode: 0644]
images/esatnet.png [new file with mode: 0644]
images/exim.png [new file with mode: 0644]
images/eximX.png [new file with mode: 0644]
images/eximXs.png [new file with mode: 0644]
images/invisible.xbm [new file with mode: 0644]
images/mailman-large.jpg [new file with mode: 0644]
images/mailman.jpg [new file with mode: 0644]
images/marker.png [new file with mode: 0644]
images/planico.png [new file with mode: 0644]
images/shore150.png [new file with mode: 0644]
index.html [new file with mode: 0644]
intro.html [new file with mode: 0644]
maillist.html [new file with mode: 0644]
mirrors.html [new file with mode: 0644]
overview.html [new file with mode: 0644]
robots.txt [new file with mode: 0644]
statconf.txt [new file with mode: 0644]
toc.html [new file with mode: 0644]
toc_frame.html [new file with mode: 0644]
version.html [new file with mode: 0644]
y2k.html [new file with mode: 0644]

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..ecae4b8
--- /dev/null
@@ -0,0 +1,3 @@
+.mirror
+ftp
+exim-html-*
diff --git a/ChangeLog.html b/ChangeLog.html
new file mode 100644 (file)
index 0000000..eaecd19
--- /dev/null
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim Web Pages ChangeLog</title>
+    <base target="body">
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+      <h1>exim Web Pages ChangeLog</h1>
+      <p>Changes to these pages are detailed in reverse chronological
+       order</p>
+
+      <hr size=3 width=400 align="center">
+      <h3>Sunday January 9th, 2000</h3>
+      <ul>
+      <li>Minor fixes...</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Sunday November 28th, 1999</h3>
+      <ul>
+      <li>New version of exim - other things modified to suit, new documentation etc.</li>
+      <li>Rewrote the <a href="howto/rbl.html">RBL information</a> to be current.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Sunday November 14th, 1999</h3>
+      <ul>
+      <li>Very minor updates.</li>
+      <li>Replaced all GIFs with PNGs to show willing (but a week late) for GIF burning day.</li>
+      </ul>
+
+      <h3>Sunday October 10th, 1999</h3>
+      <ul>
+      <li>Updated mirrors list - both web and ftp.</li>
+      <li>Various minor corrections - thanks to Tabor Wells for pointing them out</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Sunday July 11th, 1999</h3>
+      <ul>
+      <li>Updated info about mailing lists</li>
+      <li>Updated mirrors.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday June 24th, 1999</h3>
+      <ul>
+      <li>Added link for <a
+      href="http://www-tus.csx.cam.ac.uk/courses/exim/">exim course</a> in
+      September.</li>
+      <li>Fixed some really silly bugs - both I and any readers must
+      be really asleep to have missed these.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Wednesday June 2nd, 1999</h3>
+      <ul>
+      <li>Updated and linked FAQ.</li>
+      <li>Fixed a few bugs.  Didn't finish the changelogs!</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday May 25th, 1999</h3>
+      <ul>
+      <li>Added web mirrors and information on howto mirror.</li>
+      <li>Started work on putting exim changelogs online</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday May 24th, 1999</h3>
+      <ul>
+      <li>Finally completed reorder, for now....</li>
+      <li>Updated mirrors</li>
+      <li>Added a few bits - like Y2K</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Sunday May 16th, 1999</h3>
+      <ul>
+      <li>Started to put 3.0 upgrades in....</li>
+      <li>Moved content to new site</li>
+      <li>Reorganised things for new site</li>
+      <li>Added ftp access to exim.org</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday February 18th, 1999</h3>
+      <ul>
+      <li>Finally put 2.10 upgrades in....</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday November 3rd, 1998</h3>
+      <ul>
+      <li>Obviously something earlier was not logged - I've been
+      busy</li> <li>Various 2.0x updates.</li> <li>Added support for
+      <a href="http://www.us.exim.org/" target="_top">US
+      mirror</a></li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday July 13th, 1998</h3>
+      <ul>
+      <li>New version release... website partially updated.</li>
+      <li>New documentation set on-line</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday April 2nd, 1998</h3>
+      <ul>
+      <li>Regeneration of documentation with new paths and options</li>
+      <li>Fixed year on last changelog entry</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday March 31st, 1998</h3>
+      <ul>
+      <li>Minor updates - updated for version 1.90, new mirror added.</li>
+      <li>Major updates - documentation rehashed (hopefully for tar release)</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday December 8th, 1997</h3>
+      <ul>
+      <li>Minor updates - updated for version 1.80, new mirror added.</li>
+      <li>Major updates - documentation rehashed</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday October 27th, 1997</h3>
+      <ul>
+      <li>Minor updates - new mirror added, versions corrected.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Wednesday September 10th, 1997</h3>
+      <ul>
+      <li>New version released - version documentation updated.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday September 2nd, 1997</h3>
+      <ul>
+      <li>Mailing list address has changed.</li>
+      <li>Minor changes for lynx users</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday August 28th, 1997</h3>
+      <ul>
+      <li>Modifications for non frame browsers</li>
+      <li>Documentation regenerated with new look.</li>
+      <li>Documentation is now framed too!</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Tuesday August 26th, 1997</h3>
+      <ul>
+      <li>Changes for exim 1.70 release</li>
+      <li>Removed mailing list address from text to help prevent
+       pickup by spam-ming web crawlers.</li>
+      <li>Documentation regenerated for 1.70, links changed.</li>
+      <li>FTP site forced update for 1.70.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday August 25th, 1997</h3>
+      <ul>
+      <li>Finally motivated to rehash web site dramatically, in
+      preparation for new version of exim hopefully tomorrow.</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Friday April 18th, 1997</h3>
+      <ul>
+      <li>FTP archives now update automatically every day</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday April 17th, 1997</h3>
+      <ul>
+      <li>FTP archives updates</li>
+      <li>Mirror archive updates</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Wednesday Feb 16th, 1997</h3>
+      <ul>
+       <li>FTP archives updates</li>
+       <li>Documentation regenerated in new version (1.60)</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Thursday Feb 13th, 1997</h3>
+      <ul>
+       <li>Spelling corrections</li>
+       <li>FTP archives updates</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday Jan 20th, 1997</h3>
+      <ul>
+       <li>Documentation regenerated from new texinfo source</li>
+       <li>New mirror sites added</li>
+       <li>Mailing list information added</li>
+       <li>Logo added - its horrible, but if you hate it please
+         submit a better one!</li>
+       <li>Various minor updates</li>
+      </ul>
+
+      <hr size=3 width=400 align="center">
+      <h3>Monday Jan 13th, 1997</h3>
+      <ul>
+       <li>First set of online information</li> 
+      </ul>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 13:21:52 BST 1997 -->
+    <h4>$Id: ChangeLog.html,v 1.13 2000/04/09 22:02:32 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/FAQ.html b/FAQ.html
new file mode 100644 (file)
index 0000000..d107171
--- /dev/null
+++ b/FAQ.html
@@ -0,0 +1,7490 @@
+<HTML>
+<HEAD>
+<TITLE>Exim FAQ</TITLE>
+</HEAD>
+<body bgcolor="#FFFFFF" text="#00005A">
+<H1>Exim FAQ</H1>
+<P>
+This is the FAQ for the Exim Mail Transfer Agent. Thanks to the many
+people who provided the original information. This file would be amazingly
+cluttered if I tried to list them all. Suggestions for corrections,
+improvements, and additions are welcome.
+
+</P>
+<P>
+This version of the FAQ applies to Exim 3.10 and later releases. The syntax of
+some of the options was altered and tidied up at release 3.00. Some of the
+examples quoted here will not work with earlier releases.
+
+</P>
+<P>
+References of the form Cnnn and Fnnn are to the sample configuration and filter
+files that can be found in the separately distributed directory called
+<B>config.samples.</B> The primary location is
+
+</P>
+<PRE>
+   <A HREF="ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/config.samples.tar.gz">ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/config.samples.tar.gz</A></PRE>
+<P>
+There are brief descriptions of these files at the end of this document.
+
+</P>
+The FAQ is divided into the following sections:
+<A HREF="FAQ.html#TOC1">Debugging</A>,
+<A HREF="FAQ.html#TOC37">Building exim</A>,
+<A HREF="FAQ.html#TOC48">Mailbox locking</A>,
+<A HREF="FAQ.html#TOC51">Routing</A>,
+<A HREF="FAQ.html#TOC77">Directing</A>,
+<A HREF="FAQ.html#TOC115">Delivery</A>,
+<A HREF="FAQ.html#TOC151">UUCP</A>,
+<A HREF="FAQ.html#TOC155">Performance</A>,
+<A HREF="FAQ.html#TOC159">Policy controls</A>,
+<A HREF="FAQ.html#TOC193">Majordomo</A>,
+<A HREF="FAQ.html#TOC198">Rewriting</A>,
+<A HREF="FAQ.html#TOC206">Headers</A>,
+<A HREF="FAQ.html#TOC211">Fetchmail</A>,
+<A HREF="FAQ.html#TOC215">Perl</A>,
+<A HREF="FAQ.html#TOC218">Dial-up</A>,
+<A HREF="FAQ.html#TOC223">Millennium</A>,
+<A HREF="FAQ.html#TOC225">Miscellaneous</A>,
+<A HREF="FAQ.html#TOC267">HP-UX</A>,
+<A HREF="FAQ.html#TOC269">BSDI</A>,
+<A HREF="FAQ.html#TOC271">IRIX</A>,
+<A HREF="FAQ.html#TOC274">Linux</A>,
+<A HREF="FAQ.html#TOC281">Sun systems</A>,
+<A HREF="FAQ.html#TOC291">Cookbook</A>, and
+<A HREF="FAQ.html#TOC315">List of sample configurations</A>.
+<P>
+Philip Hazel <B><B>&#60;ph10@cus.cam.ac.uk</B>&#62;</B><BR>
+Last updated: 15-December-1999
+
+</P>
+<HR><BR>
+<A NAME="TOC1" HREF="FAQ.html#SEC1">0. DEBUGGING</A>
+<UL>
+<LI><A NAME="TOC2" HREF="FAQ.html#SEC2">Q0001</A>: Exim is crashing. What is wrong?
+<LI><A NAME="TOC3" HREF="FAQ.html#SEC3">Q0002</A>: Exim is not working. What is wrong?
+<LI><A NAME="TOC4" HREF="FAQ.html#SEC4">Q0003</A>: What does the error "Child process of <TT>address_pipe</TT> transport returned
+       69 from command <I>xxx</I>" mean?
+<LI><A NAME="TOC5" HREF="FAQ.html#SEC5">Q0004</A>: My virtual domain setup isn't working. How can I debug it?
+<LI><A NAME="TOC6" HREF="FAQ.html#SEC6">Q0005</A>: Why is Exim giving "421 Unexpected log failure, please try later" when
+       receiving an SMTP message with a large number of recipients?
+<LI><A NAME="TOC7" HREF="FAQ.html#SEC7">Q0006</A>: Why is Exim not rejecting incoming messages addressed to non-existent
+       users at SMTP time?
+<LI><A NAME="TOC8" HREF="FAQ.html#SEC8">Q0007</A>: I've put an entry for <B>*.my.domain</B> in a DBM lookup file, but it isn't
+       getting recognized.
+<LI><A NAME="TOC9" HREF="FAQ.html#SEC9">Q0008</A>: I've put the entry <B><B>*@domain.com</B></B> in a lookup database, but it isn't
+       working. The expansion I'm using is:
+<LI><A NAME="TOC10" HREF="FAQ.html#SEC10">Q0009</A>: Is there a way to print recognized local domains?
+<LI><A NAME="TOC11" HREF="FAQ.html#SEC11">Q0010</A>: If I run <B>"./exim</B> <B>-d9</B> <B>-bt</B> <B>user@domain</B>" all seems well, but when I send a
+       message from my User Agent, it does not arrive at its destination.
+<LI><A NAME="TOC12" HREF="FAQ.html#SEC12">Q0011</A>: I am getting this message in mainlog every so often: "no immediate
+       delivery: too many connections (19, max 0)". What am I missing?
+<LI><A NAME="TOC13" HREF="FAQ.html#SEC13">Q0012</A>: What does "no immediate delivery: too many messages received in one SMTP
+       connection" mean?
+<LI><A NAME="TOC14" HREF="FAQ.html#SEC14">Q0013</A>: Exim puts "for &#60;address&#62;" in the Received: headers of some, but not all,
+       messages. Is this a bug?
+<LI><A NAME="TOC15" HREF="FAQ.html#SEC15">Q0014</A>: Instead of <TT>exim_dbmbuild</TT>, I'm using a homegrown program to build DBM
+       (or cdb) files, but Exim doesn't seem to be able to use them.
+<LI><A NAME="TOC16" HREF="FAQ.html#SEC16">Q0015</A>: Exim is unable to route to any remote domains. It doesn't seen to be
+       able to access the DNS.
+<LI><A NAME="TOC17" HREF="FAQ.html#SEC17">Q0016</A>: I'm using ETRN to run a script that checks things and doesn't always
+       end up running "exim <B><B>-R".</B></B> However, after it has run once, subsequent
+       attempts fail with "458 Already processing".
+<LI><A NAME="TOC18" HREF="FAQ.html#SEC18">Q0017</A>: What does the error message "transport <TT>system_aliases</TT>: cannot find
+       transport driver "<B>aliasfile</B>" in line 92" mean?
+<LI><A NAME="TOC19" HREF="FAQ.html#SEC19">Q0018</A>: Exim is timing out after receiving and responding to the DATA command
+       from one particular host, and yet the client host also claims to be
+       timing out. This seems to affect only certain messages.
+<LI><A NAME="TOC20" HREF="FAQ.html#SEC20">Q0019</A>: What does the message "Socket bind() to port 25 for address (any)
+       failed: address already in use" mean?
+<LI><A NAME="TOC21" HREF="FAQ.html#SEC21">Q0020</A>: I've set <TT>headers_check_syntax</TT>, but this causes Exim to complain about
+       headers like "To: Work: Jim <B>&#60;jims@email</B>&#62;, Home: Bob <B>&#60;bobs@email</B>&#62;" which
+       look all right to me. Is this a bug?
+<LI><A NAME="TOC22" HREF="FAQ.html#SEC22">Q0021</A>: Whenever Exim tries to deliver a specific message to a particular
+       server, it fails, giving the error "Remote end closed connection after
+       data" or "Broken pipe" or a timeout. What's going on?
+<LI><A NAME="TOC23" HREF="FAQ.html#SEC23">Q0022</A>: Why do messages not get delivered down the same connection when I do
+       something like: exim <B>-v</B> <B>-R</B> <B>@aol.com</B> ? For other domains, I do this and
+       I see the appropriate "waiting for passed connections to get used"
+       messages.
+<LI><A NAME="TOC24" HREF="FAQ.html#SEC24">Q0023</A>: What does the error "SEGV while reading ... from dbm file: record
+       assumed not to exist" mean?
+<LI><A NAME="TOC25" HREF="FAQ.html#SEC25">Q0024</A>: There seems to be a problem in the string expansion code: it doesn't
+       recognize references to headers such as <B><B>${h_to}.</B></B>
+<LI><A NAME="TOC26" HREF="FAQ.html#SEC26">Q0025</A>: Exim is timing out after sending the a message's data to one particular
+       host, and yet the remote host also claims to be timing out. This seems
+       to affect only certain messages.
+<LI><A NAME="TOC27" HREF="FAQ.html#SEC27">Q0026</A>: When the Exim daemon forks a copy of itself to handle an incoming SMTP
+       request, the forked copy seems to go around in circles  for a
+       significant (up to 5 minutes, so far) amount of time before deciding to
+       accept the message.
+<LI><A NAME="TOC28" HREF="FAQ.html#SEC28">Q0027</A>: What does "failed to create child process to send failure message" mean?
+       This is a busy mail server with <TT>smtp_accept_max</TT> set to 500, but this
+       problem started to occur at about 300 incoming connections.
+<LI><A NAME="TOC29" HREF="FAQ.html#SEC29">Q0028</A>: What does "&#60;message filter&#62; transporting defer (-1): No transport set
+       by director" in a log line mean?
+<LI><A NAME="TOC30" HREF="FAQ.html#SEC30">Q0029</A>: Why is Exim refusing to relay, saying "failed to find host name from IP
+       address" when I have the sender's IP address in <TT>host_accept_relay</TT>? My
+       configuration contains this:
+<LI><A NAME="TOC31" HREF="FAQ.html#SEC31">Q0030</A>: When I run "exim <B>-bd</B> <B>-q10m"</B> I get "PANIC LOG: exec of exim <B>-q</B> failed".
+<LI><A NAME="TOC32" HREF="FAQ.html#SEC32">Q0031</A>: Why do connections to my machine's SMTP port take a long time to respond
+       with the banner, when connections to other ports respond instantly?
+<LI><A NAME="TOC33" HREF="FAQ.html#SEC33">Q0032</A>: I can't seem to get a pipe command to run when I include a <B>${if</B>
+       expansion in it. This fails:
+<LI><A NAME="TOC34" HREF="FAQ.html#SEC34">Q0033</A>: I'm trying to get Exim to connect an alias to a pipe, but it always
+       gives error code 69, with the comment "(could mean service or program
+       unavailable)".
+<LI><A NAME="TOC35" HREF="FAQ.html#SEC35">Q0034</A>: I'm having a problem with an Exim RPM.
+<LI><A NAME="TOC36" HREF="FAQ.html#SEC36">Q0035</A>: What does the error "Spool file is locked" mean?
+</UL>
+
+<A NAME="TOC37" HREF="FAQ.html#SEC37">1. BUILDING EXIM</A>
+<UL>
+<LI><A NAME="TOC38" HREF="FAQ.html#SEC38">Q0101</A>: I get the error "conflicting types" when Exim is building the libident
+       library.
+<LI><A NAME="TOC39" HREF="FAQ.html#SEC39">Q0102</A>: When I ran <B>make</B> I got the error "undefined reference to <TT>dbopen</TT>".
+<LI><A NAME="TOC40" HREF="FAQ.html#SEC40">Q0103</A>: I can't get Exim to compile with Berkeley DB version 2.x.
+<LI><A NAME="TOC41" HREF="FAQ.html#SEC41">Q0104</A>: I'm getting an "undefined symbol" error for <TT>hosts_ctl</TT> when I try to
+       build Exim. (On some systems this error is "undefined reference to
+       'hosts_ctl'".)
+<LI><A NAME="TOC42" HREF="FAQ.html#SEC42">Q0105</A>: I'm about to upgrade to a new Exim release. Do I need to ensure the
+       spool is empty, or take any other special action?
+<LI><A NAME="TOC43" HREF="FAQ.html#SEC43">Q0106</A>: What does the error "<B>install-info</B>: command not found" mean?
+<LI><A NAME="TOC44" HREF="FAQ.html#SEC44">Q0107</A>: Exim doesn't seem to be recognizing my operating system type correctly,
+       and so is failing to build.
+<LI><A NAME="TOC45" HREF="FAQ.html#SEC45">Q0108</A>: I am getting an error "`exim' undeclared here" when I compile, in the
+       <B>globals.c</B> module.
+<LI><A NAME="TOC46" HREF="FAQ.html#SEC46">Q0109</A>: Exim fails to build, complaining about the absence of the "killpg"
+       function.
+<LI><A NAME="TOC47" HREF="FAQ.html#SEC47">Q0110</A>: I'm getting an unresolved symbol <TT>ldap_is_ldap_url</TT> when trying to build
+       Exim.
+</UL>
+
+<A NAME="TOC48" HREF="FAQ.html#SEC48">2. MAILBOX LOCKING</A>
+<UL>
+<LI><A NAME="TOC49" HREF="FAQ.html#SEC49">Q0201</A>: Why do I get the error "Permission denied: creating lock file hitching
+       post" when Exim tries to do a local delivery?
+<LI><A NAME="TOC50" HREF="FAQ.html#SEC50">Q0202</A>: I am experiencing mailbox locking problems with Sun's <B>mailtool</B> used
+       over a network.
+</UL>
+
+<A NAME="TOC51" HREF="FAQ.html#SEC51">3. ROUTING</A>
+<UL>
+<LI><A NAME="TOC52" HREF="FAQ.html#SEC52">Q0301</A>: What does "lowest numbered MX record points to local host" mean?
+<LI><A NAME="TOC53" HREF="FAQ.html#SEC53">Q0302</A>: How do I configure Exim to send all non-local mail to a gateway host?
+<LI><A NAME="TOC54" HREF="FAQ.html#SEC54">Q0303</A>: How do I configure Exim to send all non-local mail to a central server
+       if it cannot be immediately delivered by my host? I don't want to have
+       queued mail waiting on my host.
+<LI><A NAME="TOC55" HREF="FAQ.html#SEC55">Q0304</A>: How can I arrange for messages submitted by (for example) Majordomo to
+       be routed specially?
+<LI><A NAME="TOC56" HREF="FAQ.html#SEC56">Q0305</A>: How do I arrange for all incoming email for <B><B>*@some.domain</B></B> to go into one
+       pop3 mail account? The customer doesn't want to add a list of specific
+       local parts to the system.
+<LI><A NAME="TOC57" HREF="FAQ.html#SEC57">Q0306</A>: The <TT>route_list</TT> setting 
+         <TT>^foo$:^bar$  $domain  byname</TT> in a <B>domainlist</B>
+       router does not work.
+<LI><A NAME="TOC58" HREF="FAQ.html#SEC58">Q0307</A>: I'm getting "permission denied" when Exim attempts to check a
+       <TT>require_files</TT> option.
+<LI><A NAME="TOC59" HREF="FAQ.html#SEC59">Q0308</A>: I have a domain for which some local parts must be delivered locally,
+       but the remainder are to be treated like any other remote addresses.
+<LI><A NAME="TOC60" HREF="FAQ.html#SEC60">Q0309</A>: For certain domains, I don't want Exim to use MX records. Instead, I
+       want it just to look up the hosts' A records. I tried using a negative
+       entry in <TT>mx_domains</TT> in the smtp router, but it didn't work.
+<LI><A NAME="TOC61" HREF="FAQ.html#SEC61">Q0310</A>: How can I configure Exim on a firewall machine so that if mail arrives
+       addressed to a domain whose MX points to the firewall, it is forwarded
+       to the internal mail server, without having to have a list of all the
+       domains involved?
+<LI><A NAME="TOC62" HREF="FAQ.html#SEC62">Q0311</A>: How can I arrange that messages larger than some limit are handled by
+       a special router?
+<LI><A NAME="TOC63" HREF="FAQ.html#SEC63">Q0312</A>: If a DNS lookup returns no MX records why doesn't Exim just bin the
+       message?
+<LI><A NAME="TOC64" HREF="FAQ.html#SEC64">Q0313</A>: When a DNS lookup for MX records fails to complete, why doesn't Exim
+       send the messsage to the host defined by the A record?
+<LI><A NAME="TOC65" HREF="FAQ.html#SEC65">Q0314</A>: Can you specify a list of domains to explicitly reject?
+<LI><A NAME="TOC66" HREF="FAQ.html#SEC66">Q0315</A>: Is it possible to use a conditional expression for the host item in a
+       <TT>route_list</TT> for the <B>domainlist</B> router? I tried the following, but it
+       doesn't work:
+<LI><A NAME="TOC67" HREF="FAQ.html#SEC67">Q0316</A>: I send all external mail to a smart host, but this means that bad
+       addresses also get passed to the smart host. Can I avoid this?
+<LI><A NAME="TOC68" HREF="FAQ.html#SEC68">Q0317</A>: I have a dial-up machine, and I use the <TT>queue_smtp</TT> option so that remote
+       mail only goes out when I do a queue run. However, any email I send with
+       an address <B><B>&#60;anything&#62;@aol.com</B></B> is returned within about 15 mins saying
+       'retry time exceeded', and all addresses are affected.
+<LI><A NAME="TOC69" HREF="FAQ.html#SEC69">Q0318</A>: How can I route mail for user <B>X@local</B> to a smarthost if X doesn't exist
+       on the local host?
+<LI><A NAME="TOC70" HREF="FAQ.html#SEC70">Q0319</A>: How can I arrange to do my own qualification of non-fully-qualified
+       domains, and then pass them on to the next router?
+<LI><A NAME="TOC71" HREF="FAQ.html#SEC71">Q0320</A>: Every system has a "nobody" account under which httpd etc run. I would
+       like to know how to restrict mail which comes from that account to users
+       on that host only.
+<LI><A NAME="TOC72" HREF="FAQ.html#SEC72">Q0321</A>: I have a really annoying intermittent problem where attempts to mail to
+       valid sites are rejected with "unknown mail domain". This only happens a
+       few times a day and there is no particular pattern to the sites it
+       rejects.  If I try to lookup the same domain a few minutes later then it
+       is OK.
+<LI><A NAME="TOC73" HREF="FAQ.html#SEC73">Q0322</A>: I'd like route all mail with unresolved addresses to a relay machine.
+<LI><A NAME="TOC74" HREF="FAQ.html#SEC74">Q0323</A>: I would like to forward all incoming email for a particular domain to
+       another machine via SMTP. Whereabouts would I configure that?
+<LI><A NAME="TOC75" HREF="FAQ.html#SEC75">Q0324</A>: Why does Exim say "all relevant MX records point to non-existent hosts"
+       when MX records point to IP addresses?
+<LI><A NAME="TOC76" HREF="FAQ.html#SEC76">Q0325</A>: How can I arrange for mail on my local network to be delivered directly
+       to the relevant hosts, but all other mail to be sent to my ISP's mail
+       server? The local hosts are all DNS-registered and behave like normal
+       Internet hosts.
+</UL>
+
+<A NAME="TOC77" HREF="FAQ.html#SEC77">4. DIRECTING</A>
+<UL>
+<LI><A NAME="TOC78" HREF="FAQ.html#SEC78">Q0401</A>: I need to have any mail for <B>virt.dom.ain</B> that <EM>doesn't</EM> match one of the
+       aliases in <B><B>/usr/lib/aliases.virt</B></B> delivered to a particular address, for
+       example, <B><B>postmaster@virt.dom.ain.</B></B>
+<LI><A NAME="TOC79" HREF="FAQ.html#SEC79">Q0402</A>: How do I configure Exim to send all messages to a central server?
+<LI><A NAME="TOC80" HREF="FAQ.html#SEC80">Q0403</A>: How do I configure Exim to send messages for unknown local users to a
+       central server?
+<LI><A NAME="TOC81" HREF="FAQ.html#SEC81">Q0404</A>: How can I arrange for messages submitted by (for example) Majordomo to
+       be handled specially?
+<LI><A NAME="TOC82" HREF="FAQ.html#SEC82">Q0405</A>: On a host that accepts mail for several domains, do I have to use fully
+       qualified names in <B>/etc/aliases</B> or do I have to set up an alias file for
+       each domain?
+<LI><A NAME="TOC83" HREF="FAQ.html#SEC83">Q0406</A>: Some of my users are using the <B>.forward</B> to pipe to a shell command which
+       appends to the user's INBOX. How can I forbid this?
+<LI><A NAME="TOC84" HREF="FAQ.html#SEC84">Q0407</A>: How can I arrange for a default value when using a query-style lookup
+       such as LDAP or NIS+ to handle aliases?
+<LI><A NAME="TOC85" HREF="FAQ.html#SEC85">Q0408</A>: If I don't fully qualify the addresses in a virtual domain's alias file
+       then mail to aliases which also match the local domain get delivered to
+       the local domain.
+<LI><A NAME="TOC86" HREF="FAQ.html#SEC86">Q0409</A>: We've got users who chmod their home to 750, and home is NFS-mounted
+       without root privilege, so Exim cannot access <B>~user/.forward.</B>
+<LI><A NAME="TOC87" HREF="FAQ.html#SEC87">Q0410</A>: I'm getting "permission denied" when Exim tries to check a for the
+       existence of a user's <B>.procmailrc</B> file using <TT>require_files</TT>.
+<LI><A NAME="TOC88" HREF="FAQ.html#SEC88">Q0411</A>: How can I deliver mail into different directories for each virtual
+       domain, doing user lookups not against <B>/etc/passwd</B> but against
+       <B><B>/etc/passwd.domain</B>?</B>
+<LI><A NAME="TOC89" HREF="FAQ.html#SEC89">Q0412</A>: I want mail for <EM>any</EM> local part at certain virtual domains to go
+       to a single address for each domain.
+<LI><A NAME="TOC90" HREF="FAQ.html#SEC90">Q0413</A>: How can I make Exim look in the alias NIS map instead of <B>/etc/aliases</B>?
+<LI><A NAME="TOC91" HREF="FAQ.html#SEC91">Q0414</A>: What does the error message "error in forward file (filtering not
+       enabled): missing or malformed local part ..." mean?
+<LI><A NAME="TOC92" HREF="FAQ.html#SEC92">Q0415</A>: Exim isn't recognizing certain forms of local address.
+<LI><A NAME="TOC93" HREF="FAQ.html#SEC93">Q0416</A>: I have a domain for which some local parts must be delivered locally,
+       but the remainder are to be treated like any other remote addresses.
+<LI><A NAME="TOC94" HREF="FAQ.html#SEC94">Q0417</A>: What I really need is the ability to obtain the result of a pipe
+       command so that I can filter externally and redirect internally. Is
+       this possible?
+<LI><A NAME="TOC95" HREF="FAQ.html#SEC95">Q0418</A>: When I set a suffix on one of my directors, it doesn't get stripped when
+       checking the <TT>local_parts</TT> option. Why is this?
+<LI><A NAME="TOC96" HREF="FAQ.html#SEC96">Q0419</A>: Why will Exim deliver a message locally to any username that is longer
+       than 8 characters as long as the first 8 characters match one of the
+       local usernames?
+<LI><A NAME="TOC97" HREF="FAQ.html#SEC97">Q0420</A>: Why am I seeing the error "bad mode (100664) for <B><B>/home/test/.forward</B></B>
+       (userforward director)"? I've looked through the documentation but can't
+       see anything to suggest that exim has to do anything other than read the
+       <B>.forward</B> file.
+<LI><A NAME="TOC98" HREF="FAQ.html#SEC98">Q0421</A>: How can I arrange that messages larger than some limit are handled by
+       a special director?
+<LI><A NAME="TOC99" HREF="FAQ.html#SEC99">Q0422</A>: When a user's <B>.forward</B> file is syntactially invalid, Exim defers
+       delivery of all messages to that user, which sometimes include the
+       user's own test messages. Can it be told to ignore the <B>.forward</B> file
+       and/or inform the user of the error?
+<LI><A NAME="TOC100" HREF="FAQ.html#SEC100">Q0423</A>: I have some users on my system with upper case letters in their login
+       names, but these are not recognized.
+<LI><A NAME="TOC101" HREF="FAQ.html#SEC101">Q0424</A>: I have unset <TT>locally_caseless</TT> because my users have upper case letters
+       in their login names, but incoming mail now has to use the correct case.
+       Can I relax this somehow?
+<LI><A NAME="TOC102" HREF="FAQ.html#SEC102">Q0425</A>: I want to look up local users in an SQL database instead of looking in
+       the passwd file.
+<LI><A NAME="TOC103" HREF="FAQ.html#SEC103">Q0426</A>: Is it possible for Exim to use a SQL database like MySQL for its lists
+       of virtual domains and explicit aliases?
+<LI><A NAME="TOC104" HREF="FAQ.html#SEC104">Q0427</A>: Can I use my existing alias files and forward files as well as procmail
+       and effectively drop in exim in place of Sendmail ?
+<LI><A NAME="TOC105" HREF="FAQ.html#SEC105">Q0428</A>: How can I route mail for user <B>X@local</B> to a smarthost if X doesn't exist
+       on the local host?
+<LI><A NAME="TOC106" HREF="FAQ.html#SEC106">Q0429</A>: What is quickest way to set up Exim so any message sent to a non-
+       existing user would bounce back with a different message, based
+       on the name of non-existing user?
+<LI><A NAME="TOC107" HREF="FAQ.html#SEC107">Q0430</A>: I am building some largish mailing lists with Majordomo, and was
+       wondering if it worth leaving the actually list expansion to the
+       <B>aliasfile</B> :include: mechanism or should I consider using the <B>forwardfile</B>
+       transport? Is there any real difference in terms of facilities and/or
+       performance, and are the expansions basically the same code anyway?
+<LI><A NAME="TOC108" HREF="FAQ.html#SEC108">Q0431</A>: What do I need to do to make Exim handle <B>/usr/ucb/vacation</B> processing
+       automatically, so that people could just create a .<B>vacation.msg</B> file in
+       their home directory and not have to edit their <B>.forward</B> file?
+<LI><A NAME="TOC109" HREF="FAQ.html#SEC109">Q0432</A>: I want to use a default entry in my alias file, but it picks up the
+       local parts that the aliases generate. For example, if the alias file
+       is
+<LI><A NAME="TOC110" HREF="FAQ.html#SEC110">Q0433</A>: I have some obsolete domains which people have been warned not to use
+       any more. How can I arrange to delete any mail that is sent to them?
+<LI><A NAME="TOC111" HREF="FAQ.html#SEC111">Q0434</A>: How can I arrange that mail addressed to <B><B>anything@something.mydomain.com</B></B>
+       gets delivered to <B><B>something@mydomain.com</B>?</B>
+<LI><A NAME="TOC112" HREF="FAQ.html#SEC112">Q0435</A>: I can't get a regular expression to work in this <TT>local_parts</TT> option on
+       one of my directors:
+<LI><A NAME="TOC113" HREF="FAQ.html#SEC113">Q0436</A>: How can I arrange for all addresses in a group of domains <B>*.example.com</B>
+       to share the same alias file? I have a number of such groups.
+<LI><A NAME="TOC114" HREF="FAQ.html#SEC114">Q0437</A>: When Exim tries to read <B><B>/usr/lib/majordomo/lists/lists.aliases</B></B> it is
+       giving "Permission denied", but that file is world-readable!
+</UL>
+
+<A NAME="TOC115" HREF="FAQ.html#SEC115">5. DELIVERY</A>
+<UL>
+<LI><A NAME="TOC116" HREF="FAQ.html#SEC116">Q0501</A>: What does the error "Neither the <I>xxx</I> director nor the <I>yyy</I> transport set
+       a uid for local delivery of..." mean?
+<LI><A NAME="TOC117" HREF="FAQ.html#SEC117">Q0502</A>: Exim won't deliver to a host with no MX record.
+<LI><A NAME="TOC118" HREF="FAQ.html#SEC118">Q0503</A>: How should Exim be configured when it is acting as a temporary storage
+       system for a domain on a dial-up host?
+<LI><A NAME="TOC119" HREF="FAQ.html#SEC119">Q0504</A>: I would like to deliver mail addressed to a given domain normally, but
+       also to generate a message to the envelope sender.
+<LI><A NAME="TOC120" HREF="FAQ.html#SEC120">Q0505</A>: Exim keeps crashing with segmentation errors (signal 11 or 139) during
+       delivery. This seems to happen when it is about to contact a remote
+       host or when a delivery is deferred.
+<LI><A NAME="TOC121" HREF="FAQ.html#SEC121">Q0506</A>: Whenever Exim tries to do a local delivery, it gives a permission denied
+       error for the <B>.forward</B> file, like this:
+<LI><A NAME="TOC122" HREF="FAQ.html#SEC122">Q0507</A>: I have installed Exim, but now I can't mail to root any more. Why is
+       this?
+<LI><A NAME="TOC123" HREF="FAQ.html#SEC123">Q0508</A>: How can I stop undeliverable bounce messages (e.g. to routeable, but
+       undeliverable, spammer senders) from clogging up the queue for days?
+<LI><A NAME="TOC124" HREF="FAQ.html#SEC124">Q0509</A>: How can mails that are being routed through directors other than
+       localuser be delivered under the uid of the recipient?
+<LI><A NAME="TOC125" HREF="FAQ.html#SEC125">Q0510</A>: I want to use MMDF-style mailboxes. How can I get Exim to append the
+       ctrl-A characters that separate indvidual emails?
+<LI><A NAME="TOC126" HREF="FAQ.html#SEC126">Q0511</A>: I have an ISDN connection and would like a way of running the queue
+       automatically when it is up.
+<LI><A NAME="TOC127" HREF="FAQ.html#SEC127">Q0512</A>: If a user's mailbox is over quota, is there a way for me to set it up so
+       that the mail bounces to the sender and is NOT stored in the mail queue?
+<LI><A NAME="TOC128" HREF="FAQ.html#SEC128">Q0513</A>: I'm using tmail to do local deliveries, but when I turned on the
+       <TT>use_crlf</TT> option on the pipe transport (tmail prefers \r\n terminations)
+       message bodies started to vanish.
+<LI><A NAME="TOC129" HREF="FAQ.html#SEC129">Q0514</A>: What does the message "Unable to get root to set uid and gid
+       for local delivery to <I>xxx</I>: uid=<I>yyy</I> euid=<I>zzz</I>" mean?
+<LI><A NAME="TOC130" HREF="FAQ.html#SEC130">Q0515</A>: I upgraded to 2.04 and now my Envelope-To: header for my virtual domains
+       is gone. Any idea how to get it back?
+<LI><A NAME="TOC131" HREF="FAQ.html#SEC131">Q0516</A>: The Exim log records the arrival of a message, and then "Completed",
+       without logging any deliveries. What's going on?
+<LI><A NAME="TOC132" HREF="FAQ.html#SEC132">Q0517</A>: When I activate "return receipt" for example in Netscape Mailbox
+       sending options, then I get an error message from Exim... something
+       like "not supported". Can I activate delivery confirmations?
+<LI><A NAME="TOC133" HREF="FAQ.html#SEC133">Q0518</A>: When I dial up to collect mail from my ISP, only the first 10 messages
+       get delivered immediately; the remainder just sit on the queue until a
+       queue runner process finds them.
+<LI><A NAME="TOC134" HREF="FAQ.html#SEC134">Q0519</A>: My ISP's mail server is rejecting bounce messages from Exim, complaining
+       that they have no sender. The SMTP trace does indeed show that the
+       sender address is "&#60;&#62;". Why is the Sender on the bounce message empty?
+<LI><A NAME="TOC135" HREF="FAQ.html#SEC135">Q0520</A>: What does the message "retry time not reached [for any host]" on the log
+       mean? Why won't Exim try to deliver the message?
+<LI><A NAME="TOC136" HREF="FAQ.html#SEC136">Q0521</A>: RFC 1985 specifies that the SMTP command "ETRN <B>host.domain"</B> causes all
+       mail queued for that host, no matter what domain it's for, to be
+       dequeued. Why doesn't Exim support this?
+<LI><A NAME="TOC137" HREF="FAQ.html#SEC137">Q0522</A>: If email has been deferred to a member on a local mailing list
+       (implemented through forward files), and one of our ETRN clients is on
+       this mailing list, the <B>-R</B> won't "flush" the mailing list message for
+       that client.
+<LI><A NAME="TOC138" HREF="FAQ.html#SEC138">Q0523</A>: Exim seems to be sending the same message twice, according to the log,
+       although there is a difference in capitalization of the local part of
+       the address.
+<LI><A NAME="TOC139" HREF="FAQ.html#SEC139">Q0524</A>: How can I force the next retry time for a host to be now?
+<LI><A NAME="TOC140" HREF="FAQ.html#SEC140">Q0525</A>: I set up "|/bin/grep Subject|/usr/bin/smbclient <B>-M</B> &#60;netbiosname&#62;" as an
+       alias but it doesn't work.
+<LI><A NAME="TOC141" HREF="FAQ.html#SEC141">Q0526</A>: Why does the pipe transport add a line starting with "&#62;From" to
+       messages?
+<LI><A NAME="TOC142" HREF="FAQ.html#SEC142">Q0527</A>: I have set <TT>fallback_hosts</TT> on my smtp transport, but after the error
+       <B>"sem@chat.ru</B> cannot be resolved at this time" Exim isn't using them.
+<LI><A NAME="TOC143" HREF="FAQ.html#SEC143">Q0528</A>: After the holidays my ISP has always hundreds of e-mails waiting for me.
+       These are forced down Exim's throat in one go. Exim spawns a lot of
+       kids, but is there some limit to the number of processes it creates?
+<LI><A NAME="TOC144" HREF="FAQ.html#SEC144">Q0529</A>: When a message in the queue got to 12h old, Exim wrote 'retry timeout
+       exceeded' and removed <EM>all</EM> messages in the queue to this host - even
+       recent messages. How I can avoid this behaviour? I only want to remove
+       messages that have exceeded the maximum retry time.
+<LI><A NAME="TOC145" HREF="FAQ.html#SEC145">Q0530</A>: Can Exim add a Content-Length: header to messages it delivers?
+<LI><A NAME="TOC146" HREF="FAQ.html#SEC146">Q0531</A>: Exim seems to be trying to deliver a message every 10 minutes, though
+       the retry rules specify longer times after a while, because it is
+       writing a log entry every time, like this:
+<LI><A NAME="TOC147" HREF="FAQ.html#SEC147">Q0532</A>: I am trying to set exim up to have a automatic failover if it sees that
+       the system that it is sending all mail to is down.
+<LI><A NAME="TOC148" HREF="FAQ.html#SEC148">Q0533</A>: I can't get Exim to deliver over NFS. I get the error "fcntl() failed:
+       No locks available", though the lock daemon is running on the NFS server
+       and other hosts are able to access it.
+<LI><A NAME="TOC149" HREF="FAQ.html#SEC149">Q0534</A>: Why does Exim bounce messages without even attempting delivery, giving
+       the error "retry time not reached for any host after a long failure
+       period"?
+<LI><A NAME="TOC150" HREF="FAQ.html#SEC150">Q0535</A>: My <B>.forward</B> file is "|/usr/bin/procmail <B>-f-"</B> and mail gets delivered,
+       but there was a bounce to the sender, sending him the output of procmail.
+       How can I prevent this?
+</UL>
+
+<A NAME="TOC151" HREF="FAQ.html#SEC151">6. UUCP</A>
+<UL>
+<LI><A NAME="TOC152" HREF="FAQ.html#SEC152">Q0601</A>: The MX records for some UUCP domains point to my local host. How do I
+       get it to pass the messages on to UUCP?
+<LI><A NAME="TOC153" HREF="FAQ.html#SEC153">Q0602</A>: How can I get Exim to handle "bang path" addresses?
+<LI><A NAME="TOC154" HREF="FAQ.html#SEC154">Q0603</A>: We see something strange on our system in regards to mail comming in via
+       rmail from a UUCP link. The sender is being set to mailmaster instead of
+       the real sender, and a Sender: header is being added to the message.
+</UL>
+
+<A NAME="TOC155" HREF="FAQ.html#SEC155">7. PERFORMANCE</A>
+<UL>
+<LI><A NAME="TOC156" HREF="FAQ.html#SEC156">Q0701</A>: I'm running a large mail server. Should I set <TT>split_spool_directory</TT> to
+       improve performance?
+<LI><A NAME="TOC157" HREF="FAQ.html#SEC157">Q0702</A>: How well does Exim scale?
+<LI><A NAME="TOC158" HREF="FAQ.html#SEC158">Q0703</A>: We have a large password file. Can Exim use alternative lookups during
+       delivery to speed things up?
+</UL>
+
+<A NAME="TOC159" HREF="FAQ.html#SEC159">8. POLICY CONTROLS</A>
+<UL>
+<LI><A NAME="TOC160" HREF="FAQ.html#SEC160">Q0801</A>: How do I block unwanted messages from outside my host?
+<LI><A NAME="TOC161" HREF="FAQ.html#SEC161">Q0802</A>: I don't want to block spam entirely; how can I inspect each message
+       before deciding whether to deliver it or not?
+<LI><A NAME="TOC162" HREF="FAQ.html#SEC162">Q0803</A>: How can I test that my spam blocks are working?
+<LI><A NAME="TOC163" HREF="FAQ.html#SEC163">Q0804</A>: How can I test that Exim is correctly configured to use the Realtime
+       Blocking List (RBL)?
+<LI><A NAME="TOC164" HREF="FAQ.html#SEC164">Q0805</A>: How can I use <B>tcpwrappers</B> in conjunction with Exim?
+<LI><A NAME="TOC165" HREF="FAQ.html#SEC165">Q0806</A>: How can I get POP-auth-before-relay support in Exim?
+<LI><A NAME="TOC166" HREF="FAQ.html#SEC166">Q0807</A>: I have one or two cases where my machine correctly rejects messages, but
+       the remote machine is quite persistent, and keeps trying over and over.
+<LI><A NAME="TOC167" HREF="FAQ.html#SEC167">Q0808</A>: I am seeing the error "no valid sender in message headers: return path
+       is &#60;&#62;" in the reject log. Isn't &#60;&#62; a valid return path for error
+       messages?
+<LI><A NAME="TOC168" HREF="FAQ.html#SEC168">Q0809</A>: Let's say that we want to run a mail server that does not care if you
+       have proper reverse DNS. If you include <TT>host_reject</TT> lines in your
+       config file, Exim will always reject connections from such hosts. How
+       can this be avoided?
+<LI><A NAME="TOC169" HREF="FAQ.html#SEC169">Q0810</A>: Is there a way to prevent lookups in the RBL for local hosts?
+<LI><A NAME="TOC170" HREF="FAQ.html#SEC170">Q0811</A>: How can I set up the <TT>sender_reject</TT> option in my config file so I can
+       reject mail by matching regular expressions?
+<LI><A NAME="TOC171" HREF="FAQ.html#SEC171">Q0812</A>: Normally <TT>sender_reject_recipients</TT> works fine, but addresses that have
+       some uppercase letters in them seem to come through.
+<LI><A NAME="TOC172" HREF="FAQ.html#SEC172">Q0813</A>: I want to accept some sender addresses, even though they do not verify.
+       There doesn't seem to be an option for verification exceptions, so how
+       can I do this?
+<LI><A NAME="TOC173" HREF="FAQ.html#SEC173">Q0814</A>: We are being plagued by forged mail coming from a number of different
+       hosts and sender addresses. The guy however leaves a fingerprint. The
+       first received line always contains 'Received: from baby'. What is the
+       best suggested way for eliminiating him from our systems?
+<LI><A NAME="TOC174" HREF="FAQ.html#SEC174">Q0815</A>: I have set <TT>host_accept_relay</TT>, but my host still refuses to relay from
+       matching hosts.
+<LI><A NAME="TOC175" HREF="FAQ.html#SEC175">Q0816</A>: How can I run customized verification checks on incoming addresses?
+<LI><A NAME="TOC176" HREF="FAQ.html#SEC176">Q0817</A>: Does Exim apply RBL checks to error messages, those with an envelope
+       sender of "&#60;&#62;" ?
+<LI><A NAME="TOC177" HREF="FAQ.html#SEC177">Q0818</A>: I want to be able to set up a list, similar to <TT>sender_reject_recipients</TT>,
+       but with a user-defined message. I believe I have to use a director for
+       this.
+<LI><A NAME="TOC178" HREF="FAQ.html#SEC178">Q0819</A>: I want to reject certain sender-recipient combinations, with a specific
+       message for each such combination.
+<LI><A NAME="TOC179" HREF="FAQ.html#SEC179">Q0820</A>: Will Exim allow me to create a file of regexs and match incoming
+       external email to the list - and if a match is found file the offending
+       message into a special location? Also is it possible to make exim only
+       filter parts of an incoming email - e.g. ignore large MIME attachments
+       for example and only process text/plain?
+<LI><A NAME="TOC180" HREF="FAQ.html#SEC180">Q0821</A>: I've hacked sendmail to make an ioctl call at the time of the SMTP RCPT
+       command, to check if a user has exceeded their email quota. If they have
+       I issue a temporary failure and a message - can I do this with Exim?
+<LI><A NAME="TOC181" HREF="FAQ.html#SEC181">Q0822</A>: I'm looking for a rule to reject special unknown recipients.
+<LI><A NAME="TOC182" HREF="FAQ.html#SEC182">Q0823</A>: I'd like to pass all messages through a virus-scanning system before
+       delivery. Can Exim do this?
+<LI><A NAME="TOC183" HREF="FAQ.html#SEC183">Q0824</A>: How can I accomplish this: a message sent from any host must either be
+       sending to a domain in a list (a dbm file) or the sender's address
+       domain must be in the list.
+<LI><A NAME="TOC184" HREF="FAQ.html#SEC184">Q0825</A>: I've set <TT>relay_domains</TT> and <TT>sender_address_relay</TT>, but if <B>user@mydomain</B>
+       tries sending to an arbitrary domain, Exim rejects it.
+<LI><A NAME="TOC185" HREF="FAQ.html#SEC185">Q0826</A>: I set <TT>sender_reject_recipients</TT>, but Exim is not rejecting those
+       recipients.
+<LI><A NAME="TOC186" HREF="FAQ.html#SEC186">Q0827</A>: I can't find an option to deny "RCPT TO:" addresses.
+<LI><A NAME="TOC187" HREF="FAQ.html#SEC187">Q0828</A>: My problem is that Exim replaces <B>$local_part</B> with an empty string in the
+       system filtering. What's wrong or what did I miss?
+<LI><A NAME="TOC188" HREF="FAQ.html#SEC188">Q0829</A>: Using <B>$recipients</B> in a system filter gives me another problem: how can
+       I do a string lookup if <B>$recipients</B> is a list of addresses?
+<LI><A NAME="TOC189" HREF="FAQ.html#SEC189">Q0830</A>: Is there a way to configure Exim to reject mail to a certain local host?
+<LI><A NAME="TOC190" HREF="FAQ.html#SEC190">Q0831</A>: Exim sometimes rejects messages with bad senders after the DATA and
+       sometimes after the MAIL command. What is the difference?
+<LI><A NAME="TOC191" HREF="FAQ.html#SEC191">Q0832</A>: How can I get Exim to remove attachments from messages?
+<LI><A NAME="TOC192" HREF="FAQ.html#SEC192">Q0833</A>: I ran a relay test against my host and it failed with an address
+       containing a %, though I don't have <TT>percent_hack_domains</TT> set. Is Exim
+       broken? This is what the tester said:
+</UL>
+
+<A NAME="TOC193" HREF="FAQ.html#SEC193">9. MAJORDOMO</A>
+<UL>
+<LI><A NAME="TOC194" HREF="FAQ.html#SEC194">Q0901</A>: How do I set up Majordomo to work with Exim?
+<LI><A NAME="TOC195" HREF="FAQ.html#SEC195">Q0902</A>: I have set <B>$mailer</B> in <B>majordomo.cf,</B> but it still isn't setting the
+       sender correctly in the messages it sends.
+<LI><A NAME="TOC196" HREF="FAQ.html#SEC196">Q0903</A>: I'm trying to set up majordomo, but I'm getting a "wrong mode" error
+       when I try to send it mail. The panic log entry reads:
+<LI><A NAME="TOC197" HREF="FAQ.html#SEC197">Q0904</A>: I'm getting return code 9 from <B><B>/home/majordomo/majordomo-1.94.4/wrapper</B></B>
+       when it is passed a message from Exim.
+</UL>
+
+<A NAME="TOC198" HREF="FAQ.html#SEC198">10. REWRITING</A>
+<UL>
+<LI><A NAME="TOC199" HREF="FAQ.html#SEC199">Q1001</A>: How can I get Exim to strip the hostname from the sender's address?
+<LI><A NAME="TOC200" HREF="FAQ.html#SEC200">Q1002</A>: I have Exim configured to remove the hostname portion of the domain on
+       outgoing mail, and yet the hostname is present when the mail gets
+       delivered.
+<LI><A NAME="TOC201" HREF="FAQ.html#SEC201">Q1003</A>: I want to rewrite local addresses in mail that goes to the outside
+       world, but not for messages that remain within the local intranet.
+<LI><A NAME="TOC202" HREF="FAQ.html#SEC202">Q1004</A>: I'm using this rewriting rule to change login names into "friendly"
+       names, but if mail comes in for an upper case login name, it doesn't
+       get rewritten.
+<LI><A NAME="TOC203" HREF="FAQ.html#SEC203">Q1005</A>: Is it possible to completely fail a message if the rewrite rules fail?
+<LI><A NAME="TOC204" HREF="FAQ.html#SEC204">Q1006</A>: I'm using <B>$domain</B> as the key for a lookup in a rewriting rule, but its
+       contents are not being lowercased. Aren't domains supposed to be handled
+       caselessly?
+<LI><A NAME="TOC205" HREF="FAQ.html#SEC205">Q1007</A>: I want to rewrite local sender addresses depending on the domain of the
+       recipient.
+</UL>
+
+<A NAME="TOC206" HREF="FAQ.html#SEC206">11. HEADERS</A>
+<UL>
+<LI><A NAME="TOC207" HREF="FAQ.html#SEC207">Q1101</A>: I would like add some custom headers to selected outgoing mail based on
+       a specific domain and the subject line.
+<LI><A NAME="TOC208" HREF="FAQ.html#SEC208">Q1102</A>: Is it possible to have Exim add a header to only certain <TT>local_parts</TT> of
+       outgoing mail?
+<LI><A NAME="TOC209" HREF="FAQ.html#SEC209">Q1103</A>: How can I remove some part of the Received: header?
+<LI><A NAME="TOC210" HREF="FAQ.html#SEC210">Q1104</A>: How I can insert the PGP header line using exim filters?
+</UL>
+
+<A NAME="TOC211" HREF="FAQ.html#SEC211">12. FETCHMAIL</A>
+<UL>
+<LI><A NAME="TOC212" HREF="FAQ.html#SEC212">Q1201</A>: When I run fetchmail, I get the error "SMTP listener doesn't like
+       recipient address <B><I>xxx</I>@localhost</B>".
+<LI><A NAME="TOC213" HREF="FAQ.html#SEC213">Q1202</A>: Fetchmail is passing on bounce messages to Exim with the sender address
+       set to <B><B>&#60;@some.domain</B>&#62;</B> which causes Exim to complain, because there is no
+       local part.
+<LI><A NAME="TOC214" HREF="FAQ.html#SEC214">Q1203</A>: I'm currently using Exim with fetchmail and I'd like to use the RBL on
+       Exim, but will it work? Do I need to configure fetchmail any particular
+       way? As far as Exim knows, all mail is coming from 127.0.01. Will it
+       check the source address against RBL? Or will it check the From: header?
+</UL>
+
+<A NAME="TOC215" HREF="FAQ.html#SEC215">13. PERL</A>
+<UL>
+<LI><A NAME="TOC216" HREF="FAQ.html#SEC216">Q1301</A>: Exim built with Perl support exits with the error message <B>"./exim:</B> can't
+       load library <B>'libperl.so'".</B>
+<LI><A NAME="TOC217" HREF="FAQ.html#SEC217">Q1302</A>: Exim built with Perl support exits with several error messages of the
+       form "undefined reference to `PL_stack_sp'".
+</UL>
+
+<A NAME="TOC218" HREF="FAQ.html#SEC218">14. DIAL-UP</A>
+<UL>
+<LI><A NAME="TOC219" HREF="FAQ.html#SEC219">Q1401</A>: How can I arrange for mail to other hosts on my local network to be
+       delivered when I'm not connected to the Internet?
+<LI><A NAME="TOC220" HREF="FAQ.html#SEC220">Q1402</A>: I have a dial-up machine, and I use the <TT>queue_smtp_domains</TT> option so
+       that remote mail only goes out when I do a queue run. However, any email
+       I send with an address <B><B>&#60;anything&#62;@aol.com</B></B> is returned within about 15
+       minutes saying 'retry time exceeded', and all addresses are affected.
+<LI><A NAME="TOC221" HREF="FAQ.html#SEC221">Q1403</A>: How should Exim be configured when it is acting as a temporary storage
+       system for a domain on a dial-up host?
+<LI><A NAME="TOC222" HREF="FAQ.html#SEC222">Q1404</A>: I have <TT>queue_remote_domains</TT> or <TT>queue_smtp_domains</TT> set, and use <B>-qf</B> to
+       force delivery of waiting mail when I dial in. How can I arrange for any
+       new messages that arrive while I'm connected to be delivered immediately?
+</UL>
+
+<A NAME="TOC223" HREF="FAQ.html#SEC223">20. MILLENNIUM</A>
+<UL>
+<LI><A NAME="TOC224" HREF="FAQ.html#SEC224">Q2000</A>: Are there any Y2K issues with Exim?
+</UL>
+
+<A NAME="TOC225" HREF="FAQ.html#SEC225">50. MISCELLANEOUS</A>
+<UL>
+<LI><A NAME="TOC226" HREF="FAQ.html#SEC226">Q5001</A>: What does the error "Unable to get interface configuration: 22 Invalid
+       argument" mean?
+<LI><A NAME="TOC227" HREF="FAQ.html#SEC227">Q5002</A>: How can I arrange to allow a limited set of users to perform a limited
+       set of Exim administration functions? I don't want to put them all in
+       the exim group.
+<LI><A NAME="TOC228" HREF="FAQ.html#SEC228">Q5003</A>: How can I test for a message's size being greater or less than a given
+       value in an expansion string?
+<LI><A NAME="TOC229" HREF="FAQ.html#SEC229">Q5004</A>: I want to "tail" the Exim log, but I have a number of other logs I also
+       want to "tail", and the number of tailing windows is getting to be a
+       nuisance.
+<LI><A NAME="TOC230" HREF="FAQ.html#SEC230">Q5005</A>: I would like to have Exim log information written to syslog.
+<LI><A NAME="TOC231" HREF="FAQ.html#SEC231">Q5006</A>: What does the error "Failed to create spool file" mean?
+<LI><A NAME="TOC232" HREF="FAQ.html#SEC232">Q5007</A>: Exim keeps crashing with segmentation errors (signal 11 or 139).
+<LI><A NAME="TOC233" HREF="FAQ.html#SEC233">Q5008</A>: Exim's databases keep getting corrupted.
+<LI><A NAME="TOC234" HREF="FAQ.html#SEC234">Q5009</A>: I've been using an autoreply director to try and mimic a bounce message,
+       but I can't get it to have an envelope from of &#60;&#62;.
+<LI><A NAME="TOC235" HREF="FAQ.html#SEC235">Q5010</A>: I see entries in the log that mention two different IP addresses for the
+       same connection. Why is this? For example:
+<LI><A NAME="TOC236" HREF="FAQ.html#SEC236">Q5011</A>: How can I persuade Exim to accept ETRN commands without the leading
+       # character?
+<LI><A NAME="TOC237" HREF="FAQ.html#SEC237">Q5012</A>: I've recently noticed that emails I send with a Bcc: line are being
+       delivered to their final destination with the Bcc: line still present.
+<LI><A NAME="TOC238" HREF="FAQ.html#SEC238">Q5013</A>: I used gv <B>v3.5.8</B> (ghostview) to try printing <B>spec.ps.</B> After every
+       printed page, the printer ejects a blank sheet. Is this something to do
+       with using "letter" rather than A4 paper?
+<LI><A NAME="TOC239" HREF="FAQ.html#SEC239">Q5014</A>: I would like to have a separate queue per domain for hosts which dial
+       in to collect their mail.
+<LI><A NAME="TOC240" HREF="FAQ.html#SEC240">Q5015</A>: A short time after I start Exim I see a &#60;defunct&#62; process. What is
+       causing this?
+<LI><A NAME="TOC241" HREF="FAQ.html#SEC241">Q5016</A>: On a reboot, or a restart of the mail system, I see the message "Mailer
+       daemons: exim abandoned: unknown, malformed, or incomplete option
+       <B>-bz</B> sendmail". What does this mean?
+<LI><A NAME="TOC242" HREF="FAQ.html#SEC242">Q5017</A>: I would like to restrict e-mail usage for some users to the local
+       machine, ideally on a group basis.
+<LI><A NAME="TOC243" HREF="FAQ.html#SEC243">Q5018</A>: Whenever exim restarts it takes up to 3-5 minutes to start responding on
+       the SMTP port. Why is this?
+<LI><A NAME="TOC244" HREF="FAQ.html#SEC244">Q5019</A>: Why aren't there any man pages for Exim? I don't always carry my printed
+       documentation.
+<LI><A NAME="TOC245" HREF="FAQ.html#SEC245">Q5020</A>: When I send a message using the <B>-t</B> command line option, Exim sends only
+       to the addresses within the message, not to those on the command line.
+<LI><A NAME="TOC246" HREF="FAQ.html#SEC246">Q5021</A>: If I set up, for example, 
+          <TT>local_domains = *customer.com</TT>, then it matches
+       <B>"customer.com"</B> and <B>"abc.customer.com"</B> as required, but it also matches
+       <B>"noncustomer.com",</B> which is wrong. How can I get round this?
+<LI><A NAME="TOC247" HREF="FAQ.html#SEC247">Q5022</A>: I want to match all local domains of the form <B>*.oyoy.org</B> but want a few
+       exceptions. For instance I don't want <B>foo.oyoy.org</B> or <B>bar.oyoy.org</B> to be
+       treated as local. What is the best way to do this?
+<LI><A NAME="TOC248" HREF="FAQ.html#SEC248">Q5023</A>: I can't seem to find a pre-built version of Exim anywhere. The machine
+       is a Sparc 5 running Solaris 2.6.
+<LI><A NAME="TOC249" HREF="FAQ.html#SEC249">Q5024</A>: Is there a Windows NT version of Exim available?
+<LI><A NAME="TOC250" HREF="FAQ.html#SEC250">Q5025</A>: Does Exim support Delivery Status Notificaion (DSN), Message Status
+       Notification (MSN), or any other form of delivery acknowledgement?
+<LI><A NAME="TOC251" HREF="FAQ.html#SEC251">Q5026</A>: What does "Exim" stand for?
+<LI><A NAME="TOC252" HREF="FAQ.html#SEC252">Q5027</A>: What does the log message "no immediate delivery: more than 10 messages
+       received in one connection" mean?
+<LI><A NAME="TOC253" HREF="FAQ.html#SEC253">Q5028</A>: Although I haven't set <TT>check_spool_space</TT>, Exim is still checking the
+       amount of space on the spool for incoming SMTP messages that use the
+       SIZE option. Can I suppress this?
+<LI><A NAME="TOC254" HREF="FAQ.html#SEC254">Q5029</A>: I just noticed log entries that start off "&#60;= &#60;&#62;". Am I correct in
+       assuming that the "&#60;&#62;" indicates that the envelope did not contain any
+       "From" data?
+<LI><A NAME="TOC255" HREF="FAQ.html#SEC255">Q5030</A>: I've received a message which does not have my address in the To:
+       line. It is a spam message with the same address in both the From: and
+       the To: headers. How can this happen, and why doesn't Exim reject it?
+<LI><A NAME="TOC256" HREF="FAQ.html#SEC256">Q5031</A>: Can (or will) Exim ever handle a message delivery purely in memory,
+       that is, it is handled without it ever hitting the disc?
+<LI><A NAME="TOC257" HREF="FAQ.html#SEC257">Q5032</A>: If I am using dbm files for data that Exim reads, can I rebuild them
+       on the fly, or do I need to restart Exim every time I make a change?
+<LI><A NAME="TOC258" HREF="FAQ.html#SEC258">Q5033</A>: What are the main differences between using an Exim filter and using
+       procmail?
+<LI><A NAME="TOC259" HREF="FAQ.html#SEC259">Q5034</A>: I need an option that is the opposite of <B>-bpa,</B> that is, a listing of
+       those addresses generated from a top-level address that have not yet
+       been delivered.
+<LI><A NAME="TOC260" HREF="FAQ.html#SEC260">Q5035</A>: I am getting complaints from a customer who uses my EXIM server for
+       relaying that they are being blocked with a "Too many connections"
+       error.
+<LI><A NAME="TOC261" HREF="FAQ.html#SEC261">Q5036</A>: When I try "exim <B>-bf"</B> to test a system filter, I received the following
+       error message: "Filter error: unavailable filtering command "fail" near
+       line 8 of filter file".
+<LI><A NAME="TOC262" HREF="FAQ.html#SEC262">Q5037</A>: How can I make Exim receive incoming mail, queue it, but NOT attempt to
+       deliver it? I want to be in this state while moving some mailboxes.
+<LI><A NAME="TOC263" HREF="FAQ.html#SEC263">Q5038</A>: What does the rejection message "reject all recipients: 3 times bad
+       sender" mean?
+<LI><A NAME="TOC264" HREF="FAQ.html#SEC264">Q5039</A>: The menu in Eximon isn't working. It displays, but I can't select
+       anything from it.
+<LI><A NAME="TOC265" HREF="FAQ.html#SEC265">Q5040</A>: What does "ridiculously long message header" in an error report mean?
+<LI><A NAME="TOC266" HREF="FAQ.html#SEC266">Q5041</A>: What does Exim use for POP as a default?  Do I have to install anything
+       else?
+</UL>
+
+<A NAME="TOC267" HREF="FAQ.html#SEC267">93. HP-UX</A>
+<UL>
+<LI><A NAME="TOC268" HREF="FAQ.html#SEC268">Q9301</A>: I'm trying to compile on an HP machine and I don't have gcc there. So I
+       put <TT>CC=cc</TT> in the <B>Local/Makefile</B>, but I got this error:
+</UL>
+
+<A NAME="TOC269" HREF="FAQ.html#SEC269">94. BSDI</A>
+<UL>
+<LI><A NAME="TOC270" HREF="FAQ.html#SEC270">Q9401</A>: On BSDI 4.0, Exim built with Perl support exits with the error message
+       <B>"./exim:</B> can't load library <B>'libperl.so'".</B>
+</UL>
+
+<A NAME="TOC271" HREF="FAQ.html#SEC271">95. IRIX</A>
+<UL>
+<LI><A NAME="TOC272" HREF="FAQ.html#SEC272">Q9501</A>: I'm running IRIX 6.2 with a number of alias IP addresses set up, but
+       Exim doesn't seem to recognize them as local addresses.
+<LI><A NAME="TOC273" HREF="FAQ.html#SEC273">Q9502</A>: The IP addresses for incoming calls are all being given as
+       255.255.255.255.
+</UL>
+
+<A NAME="TOC274" HREF="FAQ.html#SEC274">96. LINUX</A>
+<UL>
+<LI><A NAME="TOC275" HREF="FAQ.html#SEC275">Q9601</A>: Exim is mysteriously crashing, usually when forking to send a delivery
+       error message.
+<LI><A NAME="TOC276" HREF="FAQ.html#SEC276">Q9602</A>: Exim has created a directory called <B>build-Linux-libc5-i386</B> but is
+       trying to reference <B>build-Linux-libc5-i386-linux</B> while building.
+<LI><A NAME="TOC277" HREF="FAQ.html#SEC277">Q9603</A>: I want to use logrotate which is standard with <B>RH5.2</B> Linux to rotate
+       my mail logs. Anyone worked out the logrotate config file that will
+       do this?
+<LI><A NAME="TOC278" HREF="FAQ.html#SEC278">Q9604</A>: I'm seeing the message "<B>inetd</B>[334]: imap/tcp server failing (looping),
+       service terminated" on a RedHat 5.2 system, causing imap connections to
+       be refused. The imapd in use is Washington Uni vers 12.250. Could this
+       be anything to do with Exim?
+<LI><A NAME="TOC279" HREF="FAQ.html#SEC279">Q9605</A>: I get the "too many open files" error especially when a lot of messages
+       land for majordomo at the same time.
+<LI><A NAME="TOC280" HREF="FAQ.html#SEC280">Q9606</A>: I'm having a problem with an Exim RPM.
+</UL>
+
+<A NAME="TOC281" HREF="FAQ.html#SEC281">97. SUN SYSTEMS</A>
+<UL>
+<LI><A NAME="TOC282" HREF="FAQ.html#SEC282">Q9701</A>: Exim builds fine with gcc on SunOS 4 but crashes inside <B>sscanf()</B>.
+<LI><A NAME="TOC283" HREF="FAQ.html#SEC283">Q9702</A>: How can I get rid of spurious ^M characters in messages sent from
+       CDE <B>dtmail</B>?
+<LI><A NAME="TOC284" HREF="FAQ.html#SEC284">Q9703</A>: On SunOS 4 Exim crashes when looking up domains in the DNS that have
+       more than 10 A records.
+<LI><A NAME="TOC285" HREF="FAQ.html#SEC285">Q9704</A>: The menu in Eximon isn't working on my Sun system.
+<LI><A NAME="TOC286" HREF="FAQ.html#SEC286">Q9705</A>: I am experiencing mailbox locking problems with Sun's <B>mailtool</B> used
+       over a network.
+<LI><A NAME="TOC287" HREF="FAQ.html#SEC287">Q9706</A>: Exim has been crashing on my Solaris x86 system, apparently while
+       running DBM functions.
+<LI><A NAME="TOC288" HREF="FAQ.html#SEC288">Q9707</A>: The exiwhat utility isn't working for me on a Solaris 2 system.
+<LI><A NAME="TOC289" HREF="FAQ.html#SEC289">Q9708</A>: How do I stop Sun's <B>dtcm</B> from hanging?
+<LI><A NAME="TOC290" HREF="FAQ.html#SEC290">Q9709</A>: I want Exim to use only the resolver (i.e. ignore <B>/etc/hosts</B>), but don't
+       want to alter the <B>nsswitch.conf</B> file in Solaris 2.
+</UL>
+
+<A NAME="TOC291" HREF="FAQ.html#SEC291">98. COOKBOOK</A>
+<UL>
+<LI><A NAME="TOC292" HREF="FAQ.html#SEC292">Q9801</A>: How do I configure Exim as part of TPC <B>(<A HREF="http://www.tpc.int">http://www.tpc.int</A>)?</B>
+<LI><A NAME="TOC293" HREF="FAQ.html#SEC293">Q9802</A>: How do I configure Exim so that it sends mail to the outside world only
+       from a restricted list of our local users?
+<LI><A NAME="TOC294" HREF="FAQ.html#SEC294">Q9803</A>: How do I configure Exim to run with SmartList?
+<LI><A NAME="TOC295" HREF="FAQ.html#SEC295">Q9804</A>: How do I configure Exim to minic PP's "tripnote" facility?
+<LI><A NAME="TOC296" HREF="FAQ.html#SEC296">Q9805</A>: How do I configure Exim to handle local parts with extensions?
+<LI><A NAME="TOC297" HREF="FAQ.html#SEC297">Q9806</A>: How do I configure Exim so that only a restricted list of users can
+       receive mail from external domains?
+<LI><A NAME="TOC298" HREF="FAQ.html#SEC298">Q9807</A>: I have <B><B>someuser@mydomain.com</B></B> that I only want certain users to be able
+       to mail to. How do I accomplish this?
+<LI><A NAME="TOC299" HREF="FAQ.html#SEC299">Q9808</A>: A site for which I provide secondary MX is down for some time. Is there
+       a way to run the queue for that destination separately from the main
+       queue?
+<LI><A NAME="TOC300" HREF="FAQ.html#SEC300">Q9809</A>: How do I implement VERP (Variable Envelope Return Paths) in Exim?
+<LI><A NAME="TOC301" HREF="FAQ.html#SEC301">Q9810</A>: I'd like to make a copy of all outgoing messages to a local mailbox. Is
+       there a solution for this using an Exim filter?
+<LI><A NAME="TOC302" HREF="FAQ.html#SEC302">Q9811</A>: I want to make a copy of outgoing messages to a specific file for each
+       user in a specific directory, using a "save" command in a system filter.
+       How can I arrange for Exim to write to these files under the correct
+       UID/GID?
+<LI><A NAME="TOC303" HREF="FAQ.html#SEC303">Q9812</A>: How can I keep an archive of all mail for some specific local email
+       addresses?
+<LI><A NAME="TOC304" HREF="FAQ.html#SEC304">Q9813</A>: How can I configure Exim to provide a vacation message when there are
+       no local users on my mail hub?
+<LI><A NAME="TOC305" HREF="FAQ.html#SEC305">Q9814</A>: We want to be able to temporarily lock out a user by disabling the
+       password and moving the home directory to another place. How can we
+       arrange to reject mail for users in this state?
+<LI><A NAME="TOC306" HREF="FAQ.html#SEC306">Q9815</A>: I need an alias, say "fakeaddress" that should receive a message,
+       strip all reply-to: headers present, substitute another one pointing to
+       "otheraddress" and forward a message to "realaddress".
+<LI><A NAME="TOC307" HREF="FAQ.html#SEC307">Q9816</A>: How can I set up Exim to work with Listar?
+<LI><A NAME="TOC308" HREF="FAQ.html#SEC308">Q9817</A>: I need to take copies of all incoming and outgoing mail for certain
+       users. For each user there may be a different monitoring address.
+<LI><A NAME="TOC309" HREF="FAQ.html#SEC309">Q9818</A>: How can I add a disclaimer to the end of every message?
+<LI><A NAME="TOC310" HREF="FAQ.html#SEC310">Q9819</A>: I would like to append a simple advertisement text to all outgoing
+       and local mails.
+<LI><A NAME="TOC311" HREF="FAQ.html#SEC311">Q9820</A>: How can I configure Exim so that all mails adressed to
+       <B><B>something@username.domain.net</B></B> get delivered to <B>/var/spool/mail/username</B>?
+<LI><A NAME="TOC312" HREF="FAQ.html#SEC312">Q9821</A>: How do I get exim not to add a Sender: header to locally originated
+       mail?
+<LI><A NAME="TOC313" HREF="FAQ.html#SEC313">Q9822</A>: How can I get Exim to work with mailman?
+<LI><A NAME="TOC314" HREF="FAQ.html#SEC314">Q9823</A>: Is there any way to have messages sent to a specific local address
+       delayed by - say - 24 hours?
+</UL>
+
+<A NAME="TOC315" HREF="FAQ.html#SEC315">99. LIST OF SAMPLE CONFIGURATIONS</A>
+<UL>
+</UL>
+<BR><H2><A NAME="SEC1" HREF="FAQ.html#TOC1">0. DEBUGGING
+
+</A></H2>
+<A NAME="SEC2" HREF="FAQ.html#TOC2">Q0001</A>: Exim is crashing. What is wrong?
+
+
+<P>
+A0001: Exim should never crash. The author is always keen to know about
+       crashes, so that they can be diagnosed and fixed. However, before you
+       start sending email, please check that you are running the latest
+       release of Exim, in case the problem has already been fixed. The
+       techniques described below can also be useful in trying to pin down
+       exactly which circumstances caused the crash and what Exim was trying to
+       do at the time. If the crash is reproducable (by a particular message,
+       say) keep a copy of that message. If there is a core file (in Exim's
+       spool directory), see if you can get any information from it.
+
+</P>
+<P>
+       One thing that has caused crashes in the past has been incorrectly
+       installed DB libraries. In particular, if you are running any version of
+       Berkeley db, it is best to set <TT>USE_DB=yes</TT> in <B>Local/Makefile</B> before
+       building Exim. This then avoids the use of the "ndbm compatibility
+       interface" via the <B>ndbm.h</B> include file, which has been found to be
+       incorrect on some systems. If you have already built Exim, you can just
+       edit <B>Local/Makefile</B> and run <B>make</B> again to rebuild. Before restarting
+       Exim, delete any existing database files in the <B>spool/db</B> directory.
+
+</P>
+<A NAME="SEC3" HREF="FAQ.html#TOC3">Q0002</A>: Exim is not working. What is wrong?
+
+
+<P>
+A0002: Exactly how is it not working? Check the more specific questions in the
+       other sections of this FAQ. Some general techniques for debugging are:
+
+</P>
+<P>
+       1. Look for information in Exim's log files. These are in the "log"
+          directory in Exim's spool directory, unless you have configured a
+          different path for them. Serious operational problems are reported
+          in paniclog.
+
+</P>
+<P>
+       2. If the problem involves the delivery of one or more messages, try
+          forcing a delivery with the <B>-d</B> option, to cause Exim to output
+          debugging information. For example:
+
+</P>
+<PRE>
+            exim -d -M 0z6CXU-0005RR-00</PRE>
+<P>
+          On its own, <B>-d</B> produces a small amount of information. Following it
+          with a number increases the amount given: <B>-d9</B> gives the maximum
+          amount of general information; <B>-d10</B> gives in addition details of the
+          interpretation of filter files, and <B>-d11</B> or higher also turns on the
+          debugging option for DNS lookups. The output is written to the
+          standard error stream.
+
+</P>
+<P>
+       3. If the problem involves incoming SMTP mail, try using the <B>-bh</B> option
+          to simulate an incoming connection from a specific host, for example:
+
+</P>
+<PRE>
+            exim -bh 10.9.8.7</PRE>
+<P>
+          This goes through the motions of an SMTP session, without actually
+          accepting a message. Information about various policy checks is
+          output. You will need to know how to pretend to be an SMTP client.
+
+</P>
+<P>
+       4. If the problem involves lack of recognition or incorrect handling
+          of local addresses, try using the <B>-bt</B> option with debugging turned
+          on, to see how Exim is handling the address. For example,
+
+</P>
+<PRE>
+            exim -d2 -bt z6abc</PRE>
+<P>
+          will show you how it would handle the local part "z6abc". Increase
+          the debug level to <B>-d9</B> for more information.
+
+</P>
+<A NAME="SEC4" HREF="FAQ.html#TOC4">Q0003</A>: What does the error "Child process of <TT>address_pipe</TT> transport returned
+       69 from command <I>xxx</I>" mean?
+
+
+<P>
+A0003: The most common meaning of exit code 69 is "unavailable", and this often
+       means that when Exim tried to exec the command <I>xxx</I>, it failed. One
+       cause of this might be incorrect permissions on the file containing the
+       command.
+
+</P>
+<A NAME="SEC5" HREF="FAQ.html#TOC5">Q0004</A>: My virtual domain setup isn't working. How can I debug it?
+
+
+<P>
+A0004: You can use an exim command with <B>-d</B> (or <B>-d2,</B> <B>-d3</B> ... <B>-d9)</B> to get it to
+       show you how it is processing addresses. You don't actually need to send
+       a message; use the <B>-bt</B> option like this:
+
+</P>
+<PRE>
+         exim -d2 -bt localpart@virtualhost</PRE>
+<P>
+       This will show you which directors it is using. If the problem appears
+       to be with the expansion of an option setting, you can use the
+       <TT>debug_print</TT> option on a director (or router) to get Exim to output the
+       expanded string values as it goes along.
+
+</P>
+<A NAME="SEC6" HREF="FAQ.html#TOC6">Q0005</A>: Why is Exim giving "421 Unexpected log failure, please try later" when
+       receiving an SMTP message with a large number of recipients?
+
+
+<P>
+A0005: You are verifying recipients, and your configuration is one that does a
+       different lookup of some sort for each recipient. Exim keeps lookup
+       files open, in case there are several lookups in the same file. Versions
+       of Exim prior to 2.10 did not limit the number of open files used for
+       this purpose, and your operating system's maximum per process has been
+       reached. Exim is trying to log the failure to open a file, but cannot
+       open the log file, for the same reason. If upgrading Exim is not
+       immediately possible, you might be able to increase your operating
+       system's maximum number of open files per process.
+
+</P>
+<A NAME="SEC7" HREF="FAQ.html#TOC7">Q0006</A>: Why is Exim not rejecting incoming messages addressed to non-existent
+       users at SMTP time?
+
+
+<P>
+A0006: Have you remembered to set <TT>receiver_verify</TT>? It is not the default.
+
+</P>
+<A NAME="SEC8" HREF="FAQ.html#TOC8">Q0007</A>: I've put an entry for <B>*.my.domain</B> in a DBM lookup file, but it isn't
+       getting recognized.
+
+
+<P>
+A0007: You need to request "partial matching" by setting the search type to
+       "partial-dbm" in order for this to work.
+
+</P>
+<A NAME="SEC9" HREF="FAQ.html#TOC9">Q0008</A>: I've put the entry <B><B>*@domain.com</B></B> in a lookup database, but it isn't
+       working. The expansion I'm using is:
+
+
+<PRE>
+         ${lookup{${lc:$sender_address}}dbm{/the/file} ...</PRE>
+<P>
+A0008: As no sender address will ever be <B><B>*@domain.com</B></B> this will indeed have
+       no effect as it stands. You need to tell Exim if you want it to look for
+       defaults after the normal lookup has failed. In this case, change the
+       search type from "dbm" to "dbm*@". See the section on "Default values in
+       single-key lookups" in the chapter entitled "File and database lookups".
+
+</P>
+<A NAME="SEC10" HREF="FAQ.html#TOC10">Q0009</A>: Is there a way to print recognized local domains?
+
+
+<P>
+A0009: If you run "exim <B>-bP</B> <TT>local_domains</TT>" it will output the string that is
+       set, but it won't print the contents of any files that are referenced.
+
+</P>
+<A NAME="SEC11" HREF="FAQ.html#TOC11">Q0010</A>: If I run <B>"./exim</B> <B>-d9</B> <B>-bt</B> <B>user@domain</B>" all seems well, but when I send a
+       message from my User Agent, it does not arrive at its destination.
+
+
+<P>
+A0010: Try sending a message directly to Exim by typing this:
+
+</P>
+<PRE>
+         exim -d9 user@domain
+         &#60;some message, could be empty&#62;
+         .</PRE>
+<P>
+       If the message gets delivered to a remote host, but never arrives at its
+       final destination, then the problem is at the remote host. If, however,
+       the message gets through correctly, then the problem may be between your
+       User Agent and Exim. Try setting Exim's <TT>log_arguments</TT> option, to see
+       with which arguments the UA is calling Exim.
+
+</P>
+<A NAME="SEC12" HREF="FAQ.html#TOC12">Q0011</A>: I am getting this message in mainlog every so often: "no immediate
+       delivery: too many connections (19, max 0)". What am I missing?
+
+
+<P>
+A0011: A current release of Exim. :-)  The message you are getting is the wrong
+       message. What it should be saying is "too many messages received in one
+       SMTP connection" (see next question). This bug was fixed in release
+       2.051.
+
+</P>
+<A NAME="SEC13" HREF="FAQ.html#TOC13">Q0012</A>: What does "no immediate delivery: too many messages received in one SMTP
+       connection" mean?
+
+
+<P>
+A0012: An SMTP client may send any number of messages down a single SMTP
+       connection to a server. Initially, an Exim server starts up a delivery
+       process as soon as a message is received. However, in order not to start
+       up too many processes when lots of messages are arriving (typically
+       after a period of downtime), it stops doing immediate delivery after a
+       certain number of messages have arrived down the same connection. The
+       threshold is set by <TT>smtp_accept_queue_per_connection</TT>, and the default
+       value is 10. On large systems, the value should be increased. If you are
+       running a dial-in host and expecting to get all your mail down a single
+       SMTP connection, then you can disable the limit altogether by setting
+       the value to zero.
+
+</P>
+<A NAME="SEC14" HREF="FAQ.html#TOC14">Q0013</A>: Exim puts "for &#60;address&#62;" in the Received: headers of some, but not all,
+       messages. Is this a bug?
+
+
+<P>
+A0013: No. It is deliberate. Exim inserts a "for" phrase only if the incoming
+       message has precisely one recipient. If there is more than one
+       recipient, nothing is inserted. The reason for this is that not all
+       recipients appear in the To: or Cc: headers, and it is considered a
+       breach of privacy to expose such recipients to the others. A common
+       case is when a message has come from a mailing list.
+
+</P>
+<A NAME="SEC15" HREF="FAQ.html#TOC15">Q0014</A>: Instead of <TT>exim_dbmbuild</TT>, I'm using a homegrown program to build DBM
+       (or cdb) files, but Exim doesn't seem to be able to use them.
+
+
+<P>
+A0014: Exim expects there to be a binary zero value on the end of each key used
+       in a DBM file if you use the "dbm" lookup type, but not for the "dbmnz"
+       lookup type or for the keys of a cdb file. Check that you haven't
+       slipped up in this regard.
+
+</P>
+<A NAME="SEC16" HREF="FAQ.html#TOC16">Q0015</A>: Exim is unable to route to any remote domains. It doesn't seen to be
+       able to access the DNS.
+
+
+<P>
+A0015: Try running "exim <B>-d11</B> <B>-bt</B> &#60;remote address&#62;". The <B>-d11</B> will make it show
+       the resolver queries it is building and the results of its DNS queries.
+       If it appears unable to contact any nameservers, check the contents and
+       permissions of <B><B>/etc/resolv.conf</B>.</B>
+
+</P>
+<A NAME="SEC17" HREF="FAQ.html#TOC17">Q0016</A>: I'm using ETRN to run a script that checks things and doesn't always
+       end up running "exim <B><B>-R".</B></B> However, after it has run once, subsequent
+       attempts fail with "458 Already processing".
+
+
+<P>
+A0016: Set <TT>no_smtp_etrn_serialize</TT>.
+
+</P>
+<A NAME="SEC18" HREF="FAQ.html#TOC18">Q0017</A>: What does the error message "transport <TT>system_aliases</TT>: cannot find
+       transport driver "<B>aliasfile</B>" in line 92" mean?
+
+
+<P>
+A0017: "<B>aliasfile</B>" is a director, not a transport. You have put a configuration
+       for a director into the transports section of the configuration file.
+
+</P>
+<A NAME="SEC19" HREF="FAQ.html#TOC19">Q0018</A>: Exim is timing out after receiving and responding to the DATA command
+       from one particular host, and yet the client host also claims to be
+       timing out. This seems to affect only certain messages.
+
+
+<P>
+A0018: (A) This problem has been seen with a network that was dropping all
+       packets over a certain size, which mean that the first part of the SMTP
+       transaction worked, but when the body of a large message started
+       flowing, the main data bits never got through the network. See also
+       
+        <A HREF="FAQ.html#SEC22">Q0021</A>.
+
+</P>
+<P>
+       (B) This can also happen if a machine has a broken TCP stack and won't
+       reassemble fragmented datagrams.
+
+</P>
+<P>
+       (C) A very few ISDN lines have been seen which failed when certain data
+       patterns were sent through them, and replacing the routers at both end
+       of the link did not fix things. One of them was triggered by more than 4
+       X's in a row in the data.
+
+</P>
+<A NAME="SEC20" HREF="FAQ.html#TOC20">Q0019</A>: What does the message "Socket bind() to port 25 for address (any)
+       failed: address already in use" mean?
+
+
+<P>
+A0019: You are trying to run an Exim daemon when there is one already running -
+       or maybe some other MTA is running, or perhaps you have an SMTP line in
+       <B><B>/etc/inetd.conf</B></B> which is causing <B>inetd</B> to listen on port 25.
+
+</P>
+<A NAME="SEC21" HREF="FAQ.html#TOC21">Q0020</A>: I've set <TT>headers_check_syntax</TT>, but this causes Exim to complain about
+       headers like "To: Work: Jim <B>&#60;jims@email</B>&#62;, Home: Bob <B>&#60;bobs@email</B>&#62;" which
+       look all right to me. Is this a bug?
+
+
+<P>
+A0020: No. Header lines such as From:, To:, <B>etc.,</B> which contain addresses, are
+       structured, and have to be in a specific format which is defined in RFC
+       822. Unquoted colons are not allowed in the "phrase" part of an email
+       address (they are OK in other headers such as Subject:). The correct
+       form for that header is
+
+</P>
+<PRE>
+         To: "Work: Jim" &#60;jims@email&#62;, "Home: Bob" &#60;bobs@email&#62;</PRE>
+<P>
+       You will sometimes see unquoted colons in To: and Cc: headers, but only
+       in connection with name lists (called "groups"), for example:
+
+</P>
+<PRE>
+         To: My friends: X &#60;x@y.x&#62;, Y &#60;y@w.z&#62;;,
+             My enemies: A &#60;a@b.c&#62;, B &#60;b@c.d&#62;;</PRE>
+<P>
+       Each list must be terminated by a semicolon, as shown.
+
+</P>
+<A NAME="SEC22" HREF="FAQ.html#TOC22">Q0021</A>: Whenever Exim tries to deliver a specific message to a particular
+       server, it fails, giving the error "Remote end closed connection after
+       data" or "Broken pipe" or a timeout. What's going on?
+
+
+<P>
+A0021: "Broken pipe" is the error you get on some OS when the far end just
+       drops the connection. The alternative is "connection reset by peer".
+
+</P>
+<P>
+       (A) There are some firewalls that fall over on \0 characters in the
+       mail. Have a look, e.g. with hexdump <B>-c</B> mymail | tail to see if your
+       mail contains any binary zero characters.
+
+</P>
+<P>
+       (B) There are broken SMTP servers around that just drop the connection
+       after the data has been sent if they don't like the message for some
+       reason (e.g. it is too big) instead of sending a 5xx error code. Have
+       you tried sending a small message to the same address?
+
+</P>
+<P>
+       (C) If the problem occurs right at the start of the mail, then it could
+       be a network problem with mishandling of large packets. Many emails are
+       small and thus appear to propagate correctly, but big emails will
+       generate big IP datagrams.
+
+</P>
+<P>
+       There have been problems when something in the middle of the network
+       mishandles large packets due to IP tunnelling. In a tunnelled link, your
+       IP datagrams gets wrapped in a larger datagram and sent over a network.
+       This is how virtual private networks (VPNs), and some ISP's transit
+       circuits work. Since the datagrams going over the tunnel require a
+       larger packet size, the tunnel needs a bigger maximum transfer unit
+       (MTU) in the network handling the tunnelled packets. However, MTUs
+       are often fixed, so the tunnel will try to fragment the packets.
+
+</P>
+<P>
+       If the systems outside the tunnel are using MTU path discovery, (most
+       Sun Sparc Solaris machines do by default), and set the DF (don't
+       fragment) bit because they don't send packets larger than their <EM>local</EM>
+       MTU, then ICMP control messages will be sent by the routers at the
+       ends of the tunnel to tell them to reduce their MTU, since the tunnel
+       can't fragment the data, and has to throw it away. If this mechanism
+       stops working, e.g. a firewall blocks ICMP, then your host never
+       knows it has hit the maximum path MTU, but it has received no ACK on
+       the packet either, so it continues to resend the same packet and the
+       connection stalls, eventually timing out.
+
+</P>
+<P>
+       You can test the link using pings of large packets and see what works:
+
+</P>
+<PRE>
+        ping -s host 2048</PRE>
+<P>
+       Try reducing the MTU on the sending host:
+
+</P>
+<PRE>
+        ifconfig le0 mtu 1300</PRE>
+<P>
+       Alternatively, you can reduce the size of the buffer Exim uses for SMTP
+       output by putting something like
+
+</P>
+<PRE>
+         DELIVER_OUT_BUFFER_SIZE=512</PRE>
+<P>
+       in your <B>Local/Makefile</B> and rebuilding Exim (the default is 8192).
+
+</P>
+<A NAME="SEC23" HREF="FAQ.html#TOC23">Q0022</A>: Why do messages not get delivered down the same connection when I do
+       something like: exim <B>-v</B> <B>-R</B> <B>@aol.com</B> ? For other domains, I do this and
+       I see the appropriate "waiting for passed connections to get used"
+       messages.
+
+
+<P>
+A0022: Recall that Exim does not keep separate queues for each domain, but
+       operates in a distributed fashion. Messages get into its "waiting for
+       host x" hints database only when a delivery has been tried, and has had
+       a temporary error. Here are some possibilities:
+
+</P>
+<P>
+       (1) The messages to <B>aol.com</B> got put in your queue, but no previous
+       delivery attempt occured before you did the <B><B>-R.</B></B> This might have been
+       because of your settings of <TT>queue_only_load</TT>, <TT>smtp_accept_queue</TT>, or any
+       other option that caused no immediate delivery attempt on arrival. If
+       this is the case, you can try using <B>-qqR</B> instead of <B><B>-R.</B></B>
+
+</P>
+<P>
+       (2) You have set <TT>batch_max</TT> on the smtp transport, and that limit was
+       reached. This would show as a sequence of n messages down one
+       connection, then another n down a new connection, etc.
+
+</P>
+<P>
+       (3) Exim tried to pass on the SMTP connection to another message, but
+       that message was in the process of being delivered to <B>aol.com</B> by some
+       other process (typically, a normal queue runner). This will break the
+       sequence, though the other delivery should pass its connection on to
+       other messages if there are any.
+
+</P>
+<P>
+       (4) The folk at <B>aol.com</B> changed the MX records so the host names have
+       changed - or a new host has been added. I don't know how likely this is.
+
+</P>
+<P>
+       (5) Exim is not performing as it should in this regard, for some reason.
+       Next time you have mail queued up for <B>aol.com,</B> try running
+
+</P>
+<PRE>
+         exim_dumpdb /var/spool/exim wait-remote_smtp</PRE>
+<P>
+       to see if those messages are listed among those waiting for the relevant
+       <B>aol.com</B> hosts.
+
+</P>
+<A NAME="SEC24" HREF="FAQ.html#TOC24">Q0023</A>: What does the error "SEGV while reading ... from dbm file: record
+       assumed not to exist" mean?
+
+
+<P>
+A0023: A crash is occuring when Exim calls your DBM library in order to read a
+       record from one of its hints files. This kind of problem can be related
+       to incorrectly installed DBM libraries. If you are using Slackware 3.6,
+       the problem is that libgdbm is incorrectly installed on that system, and
+       you will need to re-install it from source.
+
+</P>
+<A NAME="SEC25" HREF="FAQ.html#TOC25">Q0024</A>: There seems to be a problem in the string expansion code: it doesn't
+       recognize references to headers such as <B><B>${h_to}.</B></B>
+
+
+<P>
+A0024: The only valid syntax for header references is (for example) <B>$h_to:</B>
+       because header names are permitted by RFC 822 to contain a very wide
+       range of characters. A colon (or white space) is required as the
+       terminator.
+
+</P>
+<A NAME="SEC26" HREF="FAQ.html#TOC26">Q0025</A>: Exim is timing out after sending the a message's data to one particular
+       host, and yet the remote host also claims to be timing out. This seems
+       to affect only certain messages.
+
+
+<P>
+A0025: See 
+        <A HREF="FAQ.html#SEC19">Q0018</A>.
+
+</P>
+<A NAME="SEC27" HREF="FAQ.html#TOC27">Q0026</A>: When the Exim daemon forks a copy of itself to handle an incoming SMTP
+       request, the forked copy seems to go around in circles  for a
+       significant (up to 5 minutes, so far) amount of time before deciding to
+       accept the message.
+
+
+<P>
+A0026: These kinds of delay are usually caused by some kind of network problem
+       that affects outgoing calls made by Exim at the start of an incoming
+       message. Configuration options that cause outgoing calls are:
+
+</P>
+<P>
+       (1) <TT>rfc1413_query_hosts</TT> and <TT>rfc1413_query_timeout</TT> (for ident calls);
+           firewalls sometimes block ident calls, which can lead to this
+           problem.
+
+</P>
+<P>
+       (2) <TT>rbl_domains</TT> and <TT>rbl_hosts</TT>.
+
+</P>
+<P>
+       (3) <TT>host_lookup</TT> and any other options that require the remote host's
+           name to be looked up from its IP address.
+
+</P>
+<P>
+       You can use the <B>-bh</B> option to get more information about what is
+       happening at the start of a connection.
+
+</P>
+<A NAME="SEC28" HREF="FAQ.html#TOC28">Q0027</A>: What does "failed to create child process to send failure message" mean?
+       This is a busy mail server with <TT>smtp_accept_max</TT> set to 500, but this
+       problem started to occur at about 300 incoming connections.
+
+
+<P>
+A0027: Some message delivery failed, and when Exim wanted to send a bounce
+       message, it was unable to create a process in which to do so. Probably
+       the limit on the maximum number of simultaneously active processes has
+       been reached. Most OS have some means of increasing this limit, and in
+       some operating systems there is also a limit per uid which can be
+       varied.
+
+</P>
+<A NAME="SEC29" HREF="FAQ.html#TOC29">Q0028</A>: What does "&#60;message filter&#62; transporting defer (-1): No transport set
+       by director" in a log line mean?
+
+
+<P>
+A0028: Your system filter contains a "save" command, but you have not set
+       <TT>message_filter_file_transport</TT>.
+
+</P>
+<A NAME="SEC30" HREF="FAQ.html#TOC30">Q0029</A>: Why is Exim refusing to relay, saying "failed to find host name from IP
+       address" when I have the sender's IP address in <TT>host_accept_relay</TT>? My
+       configuration contains this:
+
+
+<PRE>
+         host_accept_relay = "lsearch;/etc/mail/relaydomains:192.168.96.0/24"</PRE>
+<P>
+A0029: When checking <TT>host_accept_relay</TT>, the items are tested in left-to-right
+       order. The first item in your list is a lookup on the incoming host's
+       name, so Exim has to determine the name from the incoming IP address in
+       order to perform the test. If it can't find the host name, it can't do
+       the check, so it gives up. The solution is to put all explicit IP
+       addresses first in the list. You would have discovered what was going
+       on if you had run a test such as
+
+</P>
+<PRE>
+         exim -bh 192.168.96.131</PRE>
+<A NAME="SEC31" HREF="FAQ.html#TOC31">Q0030</A>: When I run "exim <B>-bd</B> <B>-q10m"</B> I get "PANIC LOG: exec of exim <B>-q</B> failed".
+
+
+<P>
+A0030: This probably means that Exim doesn't know its own path so it can't
+       re-exec itself to do the first queue run. Check the output of
+
+</P>
+<PRE>
+         exim -bP exim_path</PRE>
+<A NAME="SEC32" HREF="FAQ.html#TOC32">Q0031</A>: Why do connections to my machine's SMTP port take a long time to respond
+       with the banner, when connections to other ports respond instantly?
+
+
+<P>
+A0031: See 
+        <A HREF="FAQ.html#SEC27">Q0026</A>.
+
+</P>
+<A NAME="SEC33" HREF="FAQ.html#TOC33">Q0032</A>: I can't seem to get a pipe command to run when I include a <B>${if</B>
+       expansion in it. This fails:
+
+
+<PRE>
+         command = "perl -T /usr/local/rt/bin/rtmux.pl \
+                      rt-mailgate helpdesk \
+                      ${if eq {$local_part}{rt} {correspond}{action}}"</PRE>
+<P>
+A0032: You need some internal quoting in there. Exim expands each individual
+       argument separately. Because you have (necessarily) got spaces in your
+       <B>${if</B> item, you have to quote that argument. Try
+
+</P>
+<PRE>
+         command = "perl -T /usr/local/rt/bin/rtmux.pl \
+                      rt-mailgate helpdesk \
+                      \"${if eq {$local_part}{rt} {correspond}{action}}\""</PRE>
+<A NAME="SEC34" HREF="FAQ.html#TOC34">Q0033</A>: I'm trying to get Exim to connect an alias to a pipe, but it always
+       gives error code 69, with the comment "(could mean service or program
+       unavailable)".
+
+
+<P>
+A0033: If your alias entry looks like this:
+
+</P>
+<PRE>
+         alias:  |"/some/command some parameters"</PRE>
+<P>
+       change it to look like this:
+
+</P>
+<PRE>
+         alias:  "|/some/command some parameters"</PRE>
+<A NAME="SEC35" HREF="FAQ.html#TOC35">Q0034</A>: I'm having a problem with an Exim RPM.
+
+
+<P>
+A0034: See 
+        <A HREF="FAQ.html#SEC280">Q9606</A>.
+
+</P>
+<A NAME="SEC36" HREF="FAQ.html#TOC36">Q0035</A>: What does the error "Spool file is locked" mean?
+
+
+<P>
+A0035: This is not an error[*]. All it means is that when an Exim delivery
+       process (probably started by a queue runner process) looked at a message
+       in order to start delivering it, it found that another Exim process was
+       already busy delivering it. On a busy system this is quite a common
+       occurrence. If you set <TT>log_level</TT> less than 5, these messages are omitted
+       from the log.
+
+</P>
+<P>
+       [*] The only time when this message might indicate a problem is if it is
+       repeated for the same message for a very long time - say more than a few
+       hours. That would suggest that the process that is delivering the
+       message has somehow got stuck.
+
+</P>
+<BR><H2><A NAME="SEC37" HREF="FAQ.html#TOC37">1. BUILDING EXIM
+
+</A></H2>
+<A NAME="SEC38" HREF="FAQ.html#TOC38">Q0101</A>: I get the error "conflicting types" when Exim is building the libident
+       library.
+
+
+<P>
+A0101: The problem is that libident assumes "struct timeval" refers to
+       <TT>DST_NONE</TT>, and so it tries to avoid using this structure when <TT>DST_NONE</TT>
+       isn't defined. Unfortunately it doesn't make this change everywhere it
+       should, and so it blows up. The problem has been seen on NetBSD and
+       some versions of the Linux C library. An easy, albeit not particularly
+       neat, fix is to add <B><TT>-DDST_NONE</TT></B> to <TT>LIBIDENTCFLAGS</TT> for systems that are
+       afflicted like this - there's not a lot else you can do without
+       modifying libident. The value of <TT>DST_NONE</TT> is never used, so defining it
+       to be empty should be harmless.
+
+</P>
+<A NAME="SEC39" HREF="FAQ.html#TOC39">Q0102</A>: When I ran <B>make</B> I got the error "undefined reference to <TT>dbopen</TT>".
+
+
+<P>
+A0102: Either:
+
+</P>
+<P>
+       (A) This means you (or the default configuration for your operating
+           system) have configured Exim to use Berkeley DB version 1<B><EM>.xx</EM></B>
+           and it has not been given access to the DB library (where <TT>dbopen</TT>
+           should be found). You may need something like <TT>DBMLIB=-ldb</TT> in
+           <B>Local/Makefile</B>. Berkeley DB is one of several alternative DBM
+           libraries that Exim can make use of. For a discussion of DBM issues,
+           see the file <B>doc/dbm.discuss.txt</B> in the Exim distribution.
+
+</P>
+<P>
+       (B) You are running on a version of Linux which has a problem in its
+           libraries. This effect isn't fully understood. It has been seen with
+           the libraries used in Caldera OpenLinux Base 1.1.
+
+</P>
+<A NAME="SEC40" HREF="FAQ.html#TOC40">Q0103</A>: I can't get Exim to compile with Berkeley DB version 2.x.
+
+
+<P>
+A0103: Have you set <TT>USE_DB=yes</TT> in <B>Local/Makefile</B>? This causes Exim to use the
+       native interface to the DBM library instead of the compatibility
+       interface, which needs a header called <B>ndbm.h</B> that may not exist on your
+       system.
+
+</P>
+<A NAME="SEC41" HREF="FAQ.html#TOC41">Q0104</A>: I'm getting an "undefined symbol" error for <TT>hosts_ctl</TT> when I try to
+       build Exim. (On some systems this error is "undefined reference to
+       'hosts_ctl'".)
+
+
+<P>
+A0104: You should either remove the definition of USE_TCP_WRAPPERS or add
+       <B>-lwrap</B> to your <TT>EXTRALIBS</TT> setting in <B>Local/Makefile</B>.
+
+</P>
+<A NAME="SEC42" HREF="FAQ.html#TOC42">Q0105</A>: I'm about to upgrade to a new Exim release. Do I need to ensure the
+       spool is empty, or take any other special action?
+
+
+<P>
+A0105: If you are changing to release 3.00 or later from a release prior to
+       3.00, you will probably need to make changes to the runtime
+       configuration file. See <B>README.UPDATING</B> for details. Otherwise, you
+       do not need to take special action. New releases are made backwards
+       compatible with old spool files and "hints" databases so that upgrading
+       can be done on a running system. All that should be necessary is to
+       install a new binary and then HUP the daemon if you are running one.
+
+</P>
+<A NAME="SEC43" HREF="FAQ.html#TOC43">Q0106</A>: What does the error "<B>install-info</B>: command not found" mean?
+
+
+<P>
+A0106: You have set INFO_DIRECTORY in your <B>Local/Makefile</B>, and Exim is trying
+       to install the Texinfo documentation, but cannot find the command called
+       <B>install-info</B>. If you have a version of Texinfo prior to 3.9, you
+       should upgrade. Otherwise, check your installation of Texinfo to see why
+       the <B>install-info</B> command is not available.
+
+</P>
+<A NAME="SEC44" HREF="FAQ.html#TOC44">Q0107</A>: Exim doesn't seem to be recognizing my operating system type correctly,
+       and so is failing to build.
+
+
+<P>
+A0107: Run the command "scripts/os-type <B><B>-generic".</B></B> The output should be one of
+       the known OS types, and should correspond to your operating system. You
+       can see which OS are supported by obeying "ls OS/Makefile-*" and looking
+       at the file name suffixes.
+
+</P>
+<P>
+       If there is a discrepancy, it means that the script is failing to
+       interpret the output from the "uname" command correctly, or that the
+       output is wrong. Meanwhile, you can build Exim by obeying
+
+</P>
+<PRE>
+         EXIM_OSTYPE=xxxx make</PRE>
+<P>
+       instead of just <B>make</B>, provided you are running a Bourne-compatible
+       shell, or otherwise by setting EXIM_OSTYPE correctly in your
+       environment. It is probably best to start again from a clean
+       distribution, to avoid any wreckage left over from the failed attempt.
+
+</P>
+<A NAME="SEC45" HREF="FAQ.html#TOC45">Q0108</A>: I am getting an error "`exim' undeclared here" when I compile, in the
+       <B>globals.c</B> module.
+
+
+<P>
+A0108: You have set EXIM_UID = exim in your <B>Local/Makefile</B>. Unfortunately,
+       named uids are not permitted here; you must give a numerical uid.
+       However, in the runtime configure file names are permitted.
+
+</P>
+<A NAME="SEC46" HREF="FAQ.html#TOC46">Q0109</A>: Exim fails to build, complaining about the absence of the "killpg"
+       function.
+
+
+<P>
+A0109: This function should be present in all modern flavours of Unix. If you
+       are using an older version, you should be able to get round the problem
+       by inserting
+
+</P>
+<PRE>
+         #define killpg(pgid,sig)   kill(-(pgid),sig)</PRE>
+<P>
+       into the file called <B>OS/os.h<I>-xx</I>x,</B> where <I>xxx</I> identifies your operating
+       system, and is the output of the command "scripts/os-type <B><B>-generic".</B></B>
+
+</P>
+<A NAME="SEC47" HREF="FAQ.html#TOC47">Q0110</A>: I'm getting an unresolved symbol <TT>ldap_is_ldap_url</TT> when trying to build
+       Exim.
+
+
+<P>
+A0110: You must have specified <TT>LOOKUP_LDAP=yes</TT> in the configuration. Have you
+       remembered to set <B>-lldap</B> somewhere (e.g. in LOOKUP_LIBS)? You need that
+       in order to get the LDAP scanned when linking.
+
+</P>
+<BR><H2><A NAME="SEC48" HREF="FAQ.html#TOC48">2. MAILBOX LOCKING
+
+</A></H2>
+<A NAME="SEC49" HREF="FAQ.html#TOC49">Q0201</A>: Why do I get the error "Permission denied: creating lock file hitching
+       post" when Exim tries to do a local delivery?
+
+
+<P>
+A0201: Your configuration specifies that local mailboxes are all held in
+       single directory, via configuration lines like these (taken from the
+       default configuration):
+
+</P>
+<PRE>
+         local_delivery:
+           driver = appendfile
+           file = /var/mail/${local_part}</PRE>
+<P>
+       and the permissions on the directory probably look like this:
+
+</P>
+<PRE>
+         drwxrwxr-x   3 root     mail         512 Jul  9 13:48 /var/mail/</PRE>
+<P>
+       Using the default configuration, Exim runs as the local user when doing
+       a local delivery, and it uses a lock file to prevent any other process
+       from updating the mailbox while it is writing to it. With those
+       permissions the delivery process, running as the user, is unable to
+       create a lock file in the <B>/var/mail</B> directory. There are two solutions
+       to this problem:
+
+</P>
+<P>
+       (A) Set the "write" and "sticky bit" permissions on the directory, so
+           that it looks like this:
+
+</P>
+<PRE>
+             drwxrwxrwt   3 root     mail         512 Jul  9 13:48 /var/mail/</PRE>
+<P>
+           The "w" allows any user to create new files in the directory, but
+           the "t" bit means that only the creator of a file is able to remove
+           it. This is the same setting as is normally used with the <B>/tmp</B>
+           directory.
+
+</P>
+<P>
+       (B) Arrange to run the <TT>local_delivery</TT> transport under a specific group
+           by changing the configuration to read
+
+</P>
+<PRE>
+             local_delivery:
+               driver = appendfile
+               file = /var/mail/${local_part}
+               group = mail</PRE>
+<P>
+           The delivery process still runs under the user's uid, but with the
+           group set to "mail". The group permission on the directory allows
+           the process to create and remove the lock file.
+
+</P>
+<P>
+           The choice between (A) and (B) is up to the administrator. If the
+           second solution is used, users can empty their mailboxes by updating
+           them, but cannot delete them.
+
+</P>
+<P>
+       If your problem involves mail to root, see also 
+        <A HREF="FAQ.html#SEC122">Q0507</A>.
+
+</P>
+<A NAME="SEC50" HREF="FAQ.html#TOC50">Q0202</A>: I am experiencing mailbox locking problems with Sun's <B>mailtool</B> used
+       over a network.
+
+
+<P>
+A0202: See 
+        <A HREF="FAQ.html#SEC286">A9705</A> in the Sun-specific section below.
+
+</P>
+<BR><H2><A NAME="SEC51" HREF="FAQ.html#TOC51">3. ROUTING
+
+</A></H2>
+<A NAME="SEC52" HREF="FAQ.html#TOC52">Q0301</A>: What does "lowest numbered MX record points to local host" mean?
+
+
+<P>
+A0301: It means exactly what it says. Exim has tried to route a domain that it
+       thinks is not local, and when it looked it up in the DNS, the lowest
+       numbered MX record pointed at the local host.
+
+</P>
+<P>
+       (A) If the domain is meant to be handled as a local domain, then there
+           is a problem with the setting of the <TT>local_domains</TT> configuration
+           option. If you have not set this, then only the name of the local
+           host is treated as a local domain. If, for example, your host is
+           called <B>myhost.mydomain.com</B> and you want it to handle mail for the
+           domain <B>mydomain.com</B> as well as for its own name, you must set
+
+</P>
+<PRE>
+             local_domains = myhost.mydomain.com:mydomain.com</PRE>
+<P>
+           or, if you want to be more general, you could use
+
+</P>
+<PRE>
+             local_domains = *.mydomain.com:mydomain.com</PRE>
+<P>
+           If you have a large number of individual local domains, you should
+           investigate storing them in a file and setting <TT>local_domains</TT> to do a
+           lookup.
+
+</P>
+<P>
+           All the domains in <TT>local_domains</TT> are treated as synonymous by
+           default. If you want to specify different handling for different
+           domains, you can either use <TT>domains</TT> options, to restrict certain
+           directors to certain domains, or use the <B>$domain</B> expansion variable
+           in director options to vary the value according to the domain, for
+           example, setting the name of an alias file to <B>/etc/aliases/$domain</B>.
+
+</P>
+<P>
+       (B) If the domain is one for which the local host is providing a
+           forwarding service (called "mail hubbing"), possibly as part of a
+           firewall, then you need to set up a router to tell Exim where to
+           send messages addressed to this domain, since the DNS directs them
+           to the local host. The routers section of your configuration file
+           should look something like this:
+
+</P>
+<PRE>
+             hubbed_hosts:
+               driver = domainlist
+               transport = remote_smtp
+               route_list = see discussion below</PRE>
+<PRE>
+             other_hosts:
+               driver = lookuphost
+               transport = remote_smtp</PRE>
+<P>
+           Note that the <B>domainlist</B> router must come first so that it can pick
+           off a hubbed host before it gets to the <B>lookuphost</B> router. The
+           contents of the <TT>route_list</TT> option depend on how many hosts you are
+           hubbing for, and how their names are related to the domain name.
+           Suppose the local host is a firewall, and all the domains in
+           <B>*.foo.bar</B> have MX records pointing to it, and each domain
+           corresponds to a host of the same name. Then the setting could be
+
+</P>
+<PRE>
+             route_list = "*.foo.bar $domain byname"</PRE>
+<P>
+           If there isn't a convenient relationship between the domain names
+           and the host names, then you either have to list each domain
+           separately, or use a lookup expansion to look up the host from the
+           domain, or put the routing information in a file and use the
+           <TT>route_file</TT> option.
+
+</P>
+<P>
+       (C) If neither (A) nor (B) is the case, then the lowest numbered MX
+           record for the domain should not be pointing to your host. You
+           should arrange to get the DNS mended.
+
+</P>
+<A NAME="SEC53" HREF="FAQ.html#TOC53">Q0302</A>: How do I configure Exim to send all non-local mail to a gateway host?
+
+
+<P>
+A0302: Replace the <B>lookuphost</B> router in the default configuration with the
+       following:
+
+</P>
+<PRE>
+         send_to_gateway:
+           driver = domainlist
+           transport = remote_smtp
+           route_list = "* gate.way.host byname"</PRE>
+<P>
+       This uses gethostbyname() to find the gateway's IP address. You could
+       alternatively have "bydns" to do a DNS lookup with MX handling, in which
+       case <B>"gate.way.host"</B> is really being treated as a mail domain name
+       rather than a host name. If there are several hosts you can send to,
+       you can specify them as a colon-separated list. See also 
+        <A HREF="FAQ.html#SEC76">Q0325</A> and 
+        <A HREF="FAQ.html#SEC79">Q0402</A>.
+
+</P>
+<A NAME="SEC54" HREF="FAQ.html#TOC54">Q0303</A>: How do I configure Exim to send all non-local mail to a central server
+       if it cannot be immediately delivered by my host? I don't want to have
+       queued mail waiting on my host.
+
+
+<P>
+A0303: Add to the <TT>remote_smtp</TT> transport the following:
+
+</P>
+<PRE>
+         fallback_hosts = central.server.name(s)</PRE>
+<P>
+       If there are several names, they must be separated by colons.
+
+</P>
+<A NAME="SEC55" HREF="FAQ.html#TOC55">Q0304</A>: How can I arrange for messages submitted by (for example) Majordomo to
+       be routed specially?
+
+
+<P>
+A0304: See 
+        <A HREF="FAQ.html#SEC81">A0404</A>.
+
+</P>
+<A NAME="SEC56" HREF="FAQ.html#TOC56">Q0305</A>: How do I arrange for all incoming email for <B><B>*@some.domain</B></B> to go into one
+       pop3 mail account? The customer doesn't want to add a list of specific
+       local parts to the system.
+
+
+<P>
+A0305: Set up a special transport that writes to the mailbox like this:
+
+</P>
+<PRE>
+         special_transport:
+           driver = appendfile
+           file = /pop/mailbox
+           envelope_to_add
+           return_path_add
+           delivery_date_add
+           user = exim</PRE>
+<P>
+       The file will be written as the user "exim". Then arrange to route all
+       mail for that domain to that transport, with a router like this:
+
+</P>
+<PRE>
+         special_router:
+           driver = domainlist
+           transport = special_transport
+           route_list = "some.domain"</PRE>
+<P>
+       Alternatively, you could make <B>some.domain</B> a local domain, and use a
+       <B>smartuser</B> director instead.
+
+</P>
+<A NAME="SEC57" HREF="FAQ.html#TOC57">Q0306</A>: The <TT>route_list</TT> setting 
+         <TT>^foo$:^bar$  $domain  byname</TT> in a <B>domainlist</B>
+       router does not work.
+
+
+<P>
+A0306: The first thing in a <TT>route_list</TT> item is a single pattern, not a list of
+       patterns. You need to write that as 
+         <TT>^(foo|bar)$  $domain  byname</TT>.
+       Alternatively, you could use several items and write
+
+</P>
+<PRE>
+         route_list = "foo $domain byname; bar $domain byname"</PRE>
+<P>
+       Note the semicolon separator. This is because the second thing in each
+       item <EM>can</EM> be a list - of hosts.
+
+</P>
+<A NAME="SEC58" HREF="FAQ.html#TOC58">Q0307</A>: I'm getting "permission denied" when Exim attempts to check a
+       <TT>require_files</TT> option.
+
+
+<P>
+A0307: See 
+        <A HREF="FAQ.html#SEC87">A0410</A> below.
+
+</P>
+<A NAME="SEC59" HREF="FAQ.html#TOC59">Q0308</A>: I have a domain for which some local parts must be delivered locally,
+       but the remainder are to be treated like any other remote addresses.
+
+
+<P>
+A0308: The way to do this is not to include the domain in <TT>local_domains</TT>, so
+       that addresses initially get passed to the routers. The first router
+       should be definied like this:
+
+</P>
+<PRE>
+         special_local:
+           driver = domainlist
+           local_parts = whatever...
+           domains = whatever...
+           route_list = * localhost byname
+           self = local</PRE>
+<P>
+       That will pick off those addresses with matching local parts and
+       domains, and hand them to the directors, because of the <TT>self = local</TT>
+       setting. Any other addresses will fall through to the other routers and
+       be handled as normal remote addresses.
+
+</P>
+<A NAME="SEC60" HREF="FAQ.html#TOC60">Q0309</A>: For certain domains, I don't want Exim to use MX records. Instead, I
+       want it just to look up the hosts' A records. I tried using a negative
+       entry in <TT>mx_domains</TT> in the smtp router, but it didn't work.
+
+
+<P>
+A0309: The <TT>mx_domains</TT> option specifies domains for which there <EM>must</EM> be an MX
+       record (an A record isn't good enough). Consequently, a negative item in
+       it doesn't do what you want - any domain matching is is not required to
+       have an MX record, but it doesn't stop Exim from using MX records for
+       any that do have them. You can achieve what you want using either a
+       <B>lookuphost</B> or a <B>domainlist</B> router:
+
+</P>
+<P>
+       (A) Using <B>lookuphost</B>:
+
+</P>
+<PRE>
+         special_domains:
+           driver = lookuphost
+           transport = remote_smtp
+           domains = list:of:domains:you:want:to:do:this:for
+           gethostbyname</PRE>
+<P>
+       (B) Using <B>domainlist</B>:
+
+</P>
+<PRE>
+         special_domains:
+           driver = domainlist
+           transport = remote_smtp
+           domains = list:of:domains:you:want:to:do:this:for
+           route_list = * * byname</PRE>
+<P>
+       If the list of domains is actually a lookup in a file, you can dispense
+       with <TT>domains</TT> in the <B>domainlist</B> case, and put the lookup into the
+       <TT>route_list</TT> option.
+
+</P>
+<A NAME="SEC61" HREF="FAQ.html#TOC61">Q0310</A>: How can I configure Exim on a firewall machine so that if mail arrives
+       addressed to a domain whose MX points to the firewall, it is forwarded
+       to the internal mail server, without having to have a list of all the
+       domains involved?
+
+
+<P>
+A0310: As your first router, have the standard <B>lookuphost</B> router from the
+       default configuration, with the added options
+
+</P>
+<PRE>
+         no_more
+         self = fail_soft</PRE>
+<P>
+       This will handle all domains whose lowest numbered MX records do <EM>not</EM>
+       point to your host. Because of the <TT>no_more</TT> setting, if it encounters
+       an unknown domain, routing will fail. However, if it hits a domain whose
+       lowest numbered MX points to your host, the "self" option comes into
+       play, and overrides <TT>no_more</TT>. The <TT>fail_soft</TT> setting causes it to pass
+       the address on to the next router. (The default causes it to generate an
+       error.)
+
+</P>
+<P>
+       As your second (and last) router, set up a <B>domainlist</B> router that sends
+       everything to your internal mail server. That is, use an option of the
+       form
+
+</P>
+<PRE>
+         route_list = * internal.server byname</PRE>
+<A NAME="SEC62" HREF="FAQ.html#TOC62">Q0311</A>: How can I arrange that messages larger than some limit are handled by
+       a special router?
+
+
+<P>
+A0311: If you are using Exim 2.10 or greater, you can use a <TT>condition</TT> option
+       on the router of the form
+
+</P>
+<PRE>
+         condition = ${if &#62;{$message_size}{100K}{yes}{no}}</PRE>
+<P>
+       Earlier versions of Exim do not have numerical comparison operators,
+       though you can use tricks like
+
+</P>
+<PRE>
+         condition = ${if eq {${substr_5:$message_size}}{}{no}{yes}}</PRE>
+<A NAME="SEC63" HREF="FAQ.html#TOC63">Q0312</A>: If a DNS lookup returns no MX records why doesn't Exim just bin the
+       message?
+
+
+<P>
+A0312: If a DNS lookup returns no MXs, Exim looks for an A record, in
+       accordance with the rules that are defined in the RFCs. If you want to
+       break the rules, you can set <TT>mx_domains</TT> in the <B>lookuphost</B> router, but
+       you will cut yourself off from those sites (and there still seem to be
+       plenty) who do not set up MX records.
+
+</P>
+<A NAME="SEC64" HREF="FAQ.html#TOC64">Q0313</A>: When a DNS lookup for MX records fails to complete, why doesn't Exim
+       send the messsage to the host defined by the A record?
+
+
+<P>
+A0313: The RFCs are quite clear on this. Only if it is known that there are no
+       MX records is an MTA allowed to make use of the A record. When an MX
+       lookup fails to complete, Exim does not know whether there are any MX
+       records or not. There seem to be some nameservers (or some
+       configurations of some nameservers) that give a "server fail" error when
+       asked for a non-existent MX record. Exim uses standard resolver calls,
+       which unfortunately do not distinguish between this case and a timeout,
+       so all Exim can do is try again later.
+
+</P>
+<A NAME="SEC65" HREF="FAQ.html#TOC65">Q0314</A>: Can you specify a list of domains to explicitly reject?
+
+
+<P>
+A0314: Use a router like this:
+
+</P>
+<PRE>
+         reject_domains:
+           driver = domainlist
+           self = fail_hard
+           domains = list:of:domains:to:reject
+           route_list = * localhost byname</PRE>
+<A NAME="SEC66" HREF="FAQ.html#TOC66">Q0315</A>: Is it possible to use a conditional expression for the host item in a
+       <TT>route_list</TT> for the <B>domainlist</B> router? I tried the following, but it
+       doesn't work:
+
+
+<PRE>
+         route_list = "* ${if match{$header_from:}{.*\\.usa\\.net\\$} \
+                       {&#60;smarthost1&#62;}{&#60;smarthost2&#62;} bydns_a"</PRE>
+<P>
+A0315: The problem is that the second item in the <TT>route_list</TT> contains white
+       space, which means that it gets terminated prematurely. To avoid this,
+       you must put the second item in quotes, and because the whole item is
+       already in quotes, you have to escape them like this:
+
+</P>
+<PRE>
+         route_list = "* \"${if match{$header_from:}{.*\\.usa\\.net\\$} \
+                       {&#60;smarthost1&#62;}{&#60;smarthost2&#62;}\" bydns_a"</PRE>
+<A NAME="SEC67" HREF="FAQ.html#TOC67">Q0316</A>: I send all external mail to a smart host, but this means that bad
+       addresses also get passed to the smart host. Can I avoid this?
+
+
+<P>
+A0316: If you are receiving the mail via SMTP, then you can use verification to
+       weed out the bad addresses. Set <TT>no_verify</TT> on the router which sends
+       everything to your smart host, and insert a new router with <TT>verify_only</TT>
+       that does general routing using DNS lookups (e.g. the default <B>lookuphost</B>
+       router), or any other verification you want. Then set <TT>receiver_verify</TT>
+       so that addresses are accepted only if they verify successfully.
+
+</P>
+<A NAME="SEC68" HREF="FAQ.html#TOC68">Q0317</A>: I have a dial-up machine, and I use the <TT>queue_smtp</TT> option so that remote
+       mail only goes out when I do a queue run. However, any email I send with
+       an address <B><B>&#60;anything&#62;@aol.com</B></B> is returned within about 15 mins saying
+       'retry time exceeded', and all addresses are affected.
+
+
+<P>
+A0317: See 
+        <A HREF="FAQ.html#SEC219">Q1401</A>.
+
+</P>
+<A NAME="SEC69" HREF="FAQ.html#TOC69">Q0318</A>: How can I route mail for user <B>X@local</B> to a smarthost if X doesn't exist
+       on the local host?
+
+
+<P>
+A0318: See 
+        <A HREF="FAQ.html#SEC105">A0428</A>.
+
+</P>
+<A NAME="SEC70" HREF="FAQ.html#TOC70">Q0319</A>: How can I arrange to do my own qualification of non-fully-qualified
+       domains, and then pass them on to the next router?
+
+
+<P>
+A0319: If you have some list of domains that you want to qualify, you can do
+       this using a <B>domainlist</B> router. For example,
+
+</P>
+<PRE>
+         qualify:
+           driver = domainlist
+           route_list = "*.a.b  $domain.c.com"</PRE>
+<P>
+       adds <B>".c.com"</B> to any domain that matches <B>"*.a.b".</B> In the absence of any
+       options in the route item, the new domain is passed to the next router.
+
+</P>
+<P>
+       If you want to do this in conjunction with a <B>lookuphost</B> router, the
+       <TT>widen_domains</TT> option of that router may be another way of achieving what
+       you want.
+
+</P>
+<A NAME="SEC71" HREF="FAQ.html#TOC71">Q0320</A>: Every system has a "nobody" account under which httpd etc run. I would
+       like to know how to restrict mail which comes from that account to users
+       on that host only.
+
+
+<P>
+A0320: Set up a router with <B><B>senders=nobody@your.domain</B></B> which routes all
+       mail to a local transport that delivers it to <B>/dev/null</B> (or to a pipe
+       that bounces with an error message, or whatever). That would catch all
+       mail to non-local domains.
+
+</P>
+<A NAME="SEC72" HREF="FAQ.html#TOC72">Q0321</A>: I have a really annoying intermittent problem where attempts to mail to
+       valid sites are rejected with "unknown mail domain". This only happens a
+       few times a day and there is no particular pattern to the sites it
+       rejects.  If I try to lookup the same domain a few minutes later then it
+       is OK.
+
+
+<P>
+A0321: (A) Have you linked Exim against the newest DNS resolver library that
+       comes with Bind? If you are using SunOS4 that may be your problem, as
+       the resolver that comes with that OS is known to be buggy and to give
+       intermittent false negatives.
+
+</P>
+<P>
+       (B) Effects like this are sometimes seen if a domain's nameservers get
+       out of step with each other.
+
+</P>
+<A NAME="SEC73" HREF="FAQ.html#TOC73">Q0322</A>: I'd like route all mail with unresolved addresses to a relay machine.
+
+
+<P>
+A0322: Set <TT>pass_on_timeout</TT> on your <B>lookuphost</B> router, and add below it a
+       <B>domainlist</B> router that routes everything to the relay.
+
+</P>
+<A NAME="SEC74" HREF="FAQ.html#TOC74">Q0323</A>: I would like to forward all incoming email for a particular domain to
+       another machine via SMTP. Whereabouts would I configure that?
+
+
+<P>
+A0323: First, do not list the domain in <TT>local_domains</TT>. Instead, list it in
+       <TT>relay_domains</TT>. Then, if the domain's lowest numbered MX record points to
+       your host, set up a <B>domainlist</B> router before your normal <B>lookuphost</B>
+       router, in order to route the domain to the specific host.
+
+</P>
+<A NAME="SEC75" HREF="FAQ.html#TOC75">Q0324</A>: Why does Exim say "all relevant MX records point to non-existent hosts"
+       when MX records point to IP addresses?
+
+
+<P>
+A0324: MX records cannot point to IP addresses. They are defined to point to
+       host names, so Exim always interprets them that way. (An IP address is a
+       syntactically valid host name.) The DNS for the domain you are having
+       problems with is misconfigured.
+
+</P>
+<A NAME="SEC76" HREF="FAQ.html#TOC76">Q0325</A>: How can I arrange for mail on my local network to be delivered directly
+       to the relevant hosts, but all other mail to be sent to my ISP's mail
+       server? The local hosts are all DNS-registered and behave like normal
+       Internet hosts.
+
+
+<P>
+A0325: Set up a first router to pick off all the domains for your local
+       network. There are several ways you might do this. For example
+
+</P>
+<PRE>
+         local:
+           driver = lookuphost
+           transport = remote_smtp
+           domains = lsearch;/etc/local_domains.list</PRE>
+<P>
+       This does a perfectly conventional DNS routing operation, but only for
+       your local domains. Follow this with a "smarthost" router:
+
+</P>
+<PRE>
+         internet:
+           driver = domainlist
+           transport = remote_smtp
+           route_list = * mail.isp.net bydns_a</PRE>
+<P>
+       This sends anything else to the smart host.
+
+</P>
+<BR><H2><A NAME="SEC77" HREF="FAQ.html#TOC77">4. DIRECTING
+
+</A></H2>
+<A NAME="SEC78" HREF="FAQ.html#TOC78">Q0401</A>: I need to have any mail for <B>virt.dom.ain</B> that <EM>doesn't</EM> match one of the
+       aliases in <B><B>/usr/lib/aliases.virt</B></B> delivered to a particular address, for
+       example, <B><B>postmaster@virt.dom.ain.</B></B>
+
+
+<P>
+A0401: Adding an asterisk to a search type causes Exim to look up "*" when the
+       normal lookup fails. So if your director is something like this:
+
+</P>
+<PRE>
+         virtual:
+           driver = aliasfile
+           domains = virt.dom.ain
+           file = /usr/lib/aliases.virt
+           search_type = lsearch
+           no_more</PRE>
+<P>
+       you should change "lsearch" to "lsearch*", and put this in the alias
+       file:
+
+</P>
+<PRE>
+         *: postmaster@virt.dom.ain</PRE>
+<P>
+       This solution has the feature that if there are several unknown
+       addresses in the same message, only one copy gets sent to the
+       postmaster, because of Exim's normal de-duplication rules.
+
+</P>
+<P>
+       You can get separate deliveries for each unknown address only if you can
+       direct them to a specific transport, by using a <B>smartuser</B> director like
+       this:
+
+</P>
+<PRE>
+         virtual:
+           driver = aliasfile
+           domains = virt.dom.ain
+           file = /usr/lib/aliases.virt
+           search_type = lsearch</PRE>
+<PRE>
+         default_virtual:
+           driver = smartuser
+           domains = virt.dom.ain
+           transport = special_delivery
+           new_address = postmaster@virt.dom.ain
+           no_more</PRE>
+<P>
+       If an address in the virtual domain is not matched by the normal alias
+       lookup, then it gets picked up by the <B>smartuser</B> and passed to the
+       transport with a new address. There is no checking for duplicates, so
+       if there is more than one address that passes through this mechanism,
+       multiple copies get delivered. In order to distinguish them, the
+       <TT>envelope_to_add</TT> option can be set on the transport, to cause the
+       insertion of an Envelope-To: header containing the original recipient
+       address.
+
+</P>
+<A NAME="SEC79" HREF="FAQ.html#TOC79">Q0402</A>: How do I configure Exim to send all messages to a central server?
+
+
+<P>
+A0402: This implies that you are not doing any local deliveries at all. Set
+
+</P>
+<PRE>
+         local_domains =</PRE>
+<P>
+       in the configuration file. This specifies that there are no local
+       domains (by default your host name is set up as a local domain). Then
+       all addresses are non-local - 
+        <A HREF="FAQ.html#SEC53">A0302</A> tells you how to deal with them.
+
+</P>
+<A NAME="SEC80" HREF="FAQ.html#TOC80">Q0403</A>: How do I configure Exim to send messages for unknown local users to a
+       central server?
+
+
+<P>
+A0403: At the end of the directors section of the configuration, insert the
+       following director:
+
+</P>
+<PRE>
+         unknown:
+           driver = smartuser
+           transport = unknown_transport</PRE>
+<P>
+       You should add <TT>no_verify</TT> to this if you are verifying addresses;
+       without it, all local parts will verify as valid in the local domain.
+       Then somewhere in the transports section of the configuration insert
+
+</P>
+<PRE>
+         unknown_transport:
+           driver = smtp
+           hosts = server.host.name</PRE>
+<P>
+       A colon-separated list of hosts may be given. They are tried in order.
+       By default, the IP address of any host is found by looking in the DNS
+       and doing MX processing (so really it is a domain list rather than a
+       host list). If you don't want MX processing, set the "gethostbyname"
+       option:
+
+</P>
+<PRE>
+         unknown_transport:
+           driver = smtp
+           hosts = server.host.name
+           gethostbyname</PRE>
+<P>
+       This calls the gethostbyname() function to find IP addresses. Depending
+       on your operating system and configuration, this usually consults
+       <B>/etc/hosts</B> and possibly other sources of information, as well as, or
+       instead of, the DNS.
+
+</P>
+<P>
+       If you want to change the recipient address when doing this, you can use
+       the <TT>new_address</TT> option on the <B>smartuser</B> director. For example, if the
+       address is <B><B>user@foo.bar.com</B></B> and the setting is
+
+</P>
+<PRE>
+           new_address = $local_part@bar.com</PRE>
+<P>
+       The message is sent to the server with the envelope recipient changed to
+       <B><B>user@bar.com.</B></B> However, this does not make any changes to the message's
+       headers.
+
+</P>
+<A NAME="SEC81" HREF="FAQ.html#TOC81">Q0404</A>: How can I arrange for messages submitted by (for example) Majordomo to
+       be handled specially?
+
+
+<P>
+A0404: You can use the <TT>condition</TT> option on a director or router, with a
+       setting such as
+
+</P>
+<PRE>
+         condition = "${if and {eq {$sender_host_address}{}} \
+                     {eq {$sender_ident}{majordom}} {yes}{no}}"</PRE>
+<P>
+       This first tests for a locally-submitted message, by ensuring there is
+       no sending host address, and then it checks the identity of the user
+       that ran the submitting process.
+
+</P>
+<A NAME="SEC82" HREF="FAQ.html#TOC82">Q0405</A>: On a host that accepts mail for several domains, do I have to use fully
+       qualified names in <B>/etc/aliases</B> or do I have to set up an alias file for
+       each domain?
+
+
+<P>
+A0405: You can do it either way. If you use a single file, you must set
+       <TT>include_domains</TT> on the <B>aliasfile</B> director. If you use a separate file
+       for each domain you can use a single director with an option such as
+
+</P>
+<PRE>
+         file = /etc/aliases/$domain</PRE>
+<P>
+       (as in C007), or you can have several different directors, each one with
+
+</P>
+<PRE>
+         domains = domain1:domain2:...</PRE>
+<P>
+       so that each one processes certain domains only. That way you could have
+       several domains sharing an alias file. All of this assumes that you want
+       have different aliases for each domain. If all the domain names are in
+       effect just synonyms, you don't need to do anything other than ensure
+       they all match something in <TT>local_domains</TT>.
+
+</P>
+<A NAME="SEC83" HREF="FAQ.html#TOC83">Q0406</A>: Some of my users are using the <B>.forward</B> to pipe to a shell command which
+       appends to the user's INBOX. How can I forbid this?
+
+
+<P>
+A0406: If you allow your users to run shells in pipes, you cannot control which
+       commands they run or which files they write to. However, you should point
+       out to them that writing to an INBOX by arbitrary commands is not
+       interlocked with the MTA and MUAs, and is liable to mess up the contents
+       of the file.
+
+</P>
+<P>
+       If a user simply wants to choose a specific file for the delivery of
+       messages, this can be done by putting a file name in a <B>.forward</B> file
+       rather than using a pipe, or by using the "save" command in an Exim
+       filter file.
+
+</P>
+<P>
+       You can set <TT>forbid_pipe</TT> on the <B>forwardfile</B> director, but that will
+       prevent them from running any pipe commands at all. Alternatively, you
+       can restrict which commands they may run in their pipes by setting the
+       <TT>allow_commands</TT> and/or <TT>restrict_to_path</TT> options in the <TT>address_pipe</TT>
+       transport.
+
+</P>
+<A NAME="SEC84" HREF="FAQ.html#TOC84">Q0407</A>: How can I arrange for a default value when using a query-style lookup
+       such as LDAP or NIS+ to handle aliases?
+
+
+<P>
+A0407: Using the queries option for the <B>aliasfile</B> driver should do what you
+       want. You can supply a second query which gets obeyed when the first
+       query fails. For example,
+
+</P>
+<PRE>
+       queries = "\
+         ldap:://x.y.z/l=yvr?aliasaddress?sub?(&(mail=$local_part@$domain)):\
+         ldap:://x.y.z/l=yvr?aliasaddress?sub?(&(mail=default@$domain))"</PRE>
+<A NAME="SEC85" HREF="FAQ.html#TOC85">Q0408</A>: If I don't fully qualify the addresses in a virtual domain's alias file
+       then mail to aliases which also match the local domain get delivered to
+       the local domain.
+
+
+<P>
+       For example, if the alias file for <B>foobar.com</B> is
+
+</P>
+<PRE>
+         foo: joe@some.place.com
+         postmaster: foo</PRE>
+<P>
+       then mail sent to <B><B>postmaster@foobar.com</B></B> is not delivered to
+       <B><B>joe@some.place.com</B></B> but instead goes to <B><B>foo@localdomain.com.</B></B>
+
+</P>
+<P>
+A0408: Set the <TT>qualify_preserve_domain</TT> option on the <B>aliasfile</B> director.
+
+</P>
+<A NAME="SEC86" HREF="FAQ.html#TOC86">Q0409</A>: We've got users who chmod their home to 750, and home is NFS-mounted
+       without root privilege, so Exim cannot access <B>~user/.forward.</B>
+
+
+<P>
+A0409: Set the seteuid option on the <B>forwardfile</B> director so that Exim
+       "becomes" the user before trying to read the file. However, if your
+       operating system does not support the seteuid() function, you cannot do
+       this. In that circumstance, if you cannot persuade your users to make
+       their <B>.forward</B> files world readable, you can set the <TT>ignore_eacces</TT>
+       option, which causes Exim to ignore unreadable files.
+
+</P>
+<A NAME="SEC87" HREF="FAQ.html#TOC87">Q0410</A>: I'm getting "permission denied" when Exim tries to check a for the
+       existence of a user's <B>.procmailrc</B> file using <TT>require_files</TT>.
+
+
+<P>
+A0410: Exim is running under its own uid (or root if there isn't an Exim uid)
+       when it checks <TT>require_files</TT>. You can cause it to change to a specific
+       uid by putting an item not containing any / characters at the start of
+       the <TT>require_files</TT> list. In this case you probably want a director along
+       these lines:
+
+</P>
+<PRE>
+         procmail:
+           driver = localuser
+           require_files = ${local_part}:${home}/.procmailrc
+           transport = procmail_pipe</PRE>
+<A NAME="SEC88" HREF="FAQ.html#TOC88">Q0411</A>: How can I deliver mail into different directories for each virtual
+       domain, doing user lookups not against <B>/etc/passwd</B> but against
+       <B><B>/etc/passwd.domain</B>?</B>
+
+
+<P>
+A0411: See configuration sample C009.
+
+</P>
+<A NAME="SEC89" HREF="FAQ.html#TOC89">Q0412</A>: I want mail for <EM>any</EM> local part at certain virtual domains to go
+       to a single address for each domain.
+
+
+<P>
+A0412: One way to to this is
+
+</P>
+<PRE>
+         virtual:
+           driver = smartuser
+           domains = lsearch;/etc/virtual
+           new_address = ${lookup{$domain}lsearch{/etc/virtual}{$value}fail}</PRE>
+<P>
+       The <B>/etc/virtual</B> file contains a list of domains and the addresses to
+       which their mail should be sent. For example:
+
+</P>
+<PRE>
+          domain1:  postmaster@some.where.else
+          domain2:  joe@xyz.plc
+          etc.</PRE>
+<P>
+       If the number of domains is large, using a DBM or cdb file would be more
+       efficient.
+
+</P>
+<A NAME="SEC90" HREF="FAQ.html#TOC90">Q0413</A>: How can I make Exim look in the alias NIS map instead of <B>/etc/aliases</B>?
+
+
+<P>
+A0413: The default configuration does not use NIS (many hosts don't run it).
+       You should change the <TT>system_aliases</TT> director to
+
+</P>
+<PRE>
+         system_aliases:
+           driver = aliasfile
+           file = mail.aliases
+           search_type = nis</PRE>
+<P>
+       If you want to use <B>/etc/aliases</B> as well as NIS, put this director (with
+       a different name) before or after the default one, depending on which
+       data source you want to take precedence.
+
+</P>
+<A NAME="SEC91" HREF="FAQ.html#TOC91">Q0414</A>: What does the error message "error in forward file (filtering not
+       enabled): missing or malformed local part ..." mean?
+
+
+<P>
+A0414: If you are trying to use an Exim filter, you have forgotten to enable
+       the facility, which is disabled by default. In the <B>forwardfile</B> director
+       (in the Exim configuration file) you need to set
+
+</P>
+<PRE>
+         filter = true</PRE>
+<P>
+       to allow a <B>.forward</B> file to be used as an Exim filter. If you are not
+       trying to use an Exim filter, then you have put a malformed address in
+       the <B>.forward</B> file.
+
+</P>
+<A NAME="SEC92" HREF="FAQ.html#TOC92">Q0415</A>: Exim isn't recognizing certain forms of local address.
+
+
+<P>
+A0415: (A) Try using the <B>-bt</B> option with debugging turned on, to see how Exim
+       is handling the addresses. For example,
+
+</P>
+<PRE>
+         exim -d2 -bt z6abc</PRE>
+<P>
+       will show you how it would handle the local part "z6abc". Increase the
+       debug level to <B>-d9</B> for more information.
+
+</P>
+<P>
+       (B) If the local user names contain capital letters, that is probably
+       the cause of your problem. Setting up such user names is a bad idea.
+       By default, everything is lowercased before the final delivery for the
+       sake of alias matching and user name matching, because people who type
+       email addresses often get the case wrong. You can stop this by setting
+
+</P>
+<PRE>
+         locally_caseless = false</PRE>
+<P>
+       but then incoming addresses are recognized only in the correct case.
+       See also 
+        <A HREF="FAQ.html#SEC101">Q0424</A> for a way round this.
+
+</P>
+<A NAME="SEC93" HREF="FAQ.html#TOC93">Q0416</A>: I have a domain for which some local parts must be delivered locally,
+       but the remainder are to be treated like any other remote addresses.
+
+
+<P>
+A0416: See 
+        <A HREF="FAQ.html#SEC59">A0308</A>.
+
+</P>
+<A NAME="SEC94" HREF="FAQ.html#TOC94">Q0417</A>: What I really need is the ability to obtain the result of a pipe
+       command so that I can filter externally and redirect internally. Is
+       this possible?
+
+
+<P>
+A0417: This is not possible. The result of a pipe command is not available to
+       a filter, because it doesn't run any deliveries while filtering. It just
+       sets up deliveries. They all happen later. If you want to run pipes
+       and examine their results, you need to set up a single delivery to a
+       delivery agent such as procmail which provides this kind of facility.
+
+</P>
+<A NAME="SEC95" HREF="FAQ.html#TOC95">Q0418</A>: When I set a suffix on one of my directors, it doesn't get stripped when
+       checking the <TT>local_parts</TT> option. Why is this?
+
+
+<P>
+A0418: The test on local parts and domains is done early on, and only if they
+       match is supplementary processing such as prefix and suffix recognition
+       done. There is a section of the manual called "Skipping directors" which
+       gives details. If you want to ignore a prefix or suffix in the initial
+       test of the local part, you can do so by replacing <TT>local_parts</TT> with a
+       setting of the <TT>condition</TT> option. For example, suppose you wanted to
+       look up the basic local part in a file, and run the director if it is
+       found:
+
+</P>
+<PRE>
+         condition = "${if lookup{\
+           ${if match{$local_part}{^(.*)-request}{$1}{$local_part}}\
+           }lsearch{/some/file}{yes}}"</PRE>
+<P>
+       The key that is looked up is the second line, which uses a regular
+       expression to strip "-request" from the local part if it is present.
+
+</P>
+<A NAME="SEC96" HREF="FAQ.html#TOC96">Q0419</A>: Why will Exim deliver a message locally to any username that is longer
+       than 8 characters as long as the first 8 characters match one of the
+       local usernames?
+
+
+<P>
+A0419: The problem is in your operating system. Exim just calls the getpwnam()
+       function to test a local part for being a local login name. It does not
+       presume to guess the maximum length of user name for the underlying
+       operating system. Many operating systems correctly reject names that are
+       longer than the maximum length; yours is apparently deficient in this
+       regard. To cope with such systems, Exim has an option called
+       <TT>max_user_name_length</TT> which you can set to the maximum allowed length.
+
+</P>
+<A NAME="SEC97" HREF="FAQ.html#TOC97">Q0420</A>: Why am I seeing the error "bad mode (100664) for <B><B>/home/test/.forward</B></B>
+       (userforward director)"? I've looked through the documentation but can't
+       see anything to suggest that exim has to do anything other than read the
+       <B>.forward</B> file.
+
+
+<P>
+A0420: For security, Exim checks for mode bits that shouldn't be set, by
+       default 022. You can change this by setting the "modemask" option of the
+       <B>forwardfile</B> director.
+
+</P>
+<A NAME="SEC98" HREF="FAQ.html#TOC98">Q0421</A>: How can I arrange that messages larger than some limit are handled by
+       a special director?
+
+
+<P>
+A0421: See 
+        <A HREF="FAQ.html#SEC62">A0311</A>.
+
+</P>
+<A NAME="SEC99" HREF="FAQ.html#TOC99">Q0422</A>: When a user's <B>.forward</B> file is syntactially invalid, Exim defers
+       delivery of all messages to that user, which sometimes include the
+       user's own test messages. Can it be told to ignore the <B>.forward</B> file
+       and/or inform the user of the error?
+
+
+<P>
+A0422: Setting <TT>skip_syntax_errors</TT> on the <B>forwardfile</B> director causes syntax
+       errors to be skipped. When dealing with users' <B>.forward</B> files it is best
+       to combine this with a setting of <TT>syntax_errors_to</TT> in order to send
+       a message about the error to the user. However, to avoid an infinite
+       cascade of messages, you have to be able to send to an address that
+       bypasses <B>.forward</B> file processing. This can be done by including a
+       director like this one
+
+</P>
+<PRE>
+         real_localuser:
+           driver = localuser
+           transport = local_delivery
+           prefix = real-</PRE>
+<P>
+       <EM>before</EM> the <B>forwardfile</B> director. This will do an ordinary local
+       delivery without <B>.forward</B> processing, if the local part is prefixed by
+       "real-". You can then set something like the following options on the
+       <B>forwardfile</B> director:
+
+</P>
+<PRE>
+         skip_syntax_errors
+         syntax_errors_to = real-$local_part@$domain
+         syntax_errors_text = "\
+           This is an automatically generated message. An error has been \
+           found\nin your .forward file. Details of the error are reported \
+           below. While\nthis error persists, messages addressed to you will \
+           get delivered into\nyour normal mailbox and you will receive a \
+           copy of this message for\neach one."</PRE>
+<P>
+       A final tidying setting to go with this is a rewriting rule that changes
+       "real-username" into just "username" in the headers of the message:
+
+</P>
+<PRE>
+         ^real-([^@]+)@your\.dom\.ain$    $1@your.dom.ain   h</PRE>
+<P>
+       This means that users won't ever see the "real-" prefix, unless they
+       look at the Envelope-To header.
+
+</P>
+<A NAME="SEC100" HREF="FAQ.html#TOC100">Q0423</A>: I have some users on my system with upper case letters in their login
+       names, but these are not recognized.
+
+
+<P>
+A0423: See 
+        <A HREF="FAQ.html#SEC101">A0424</A>.
+
+</P>
+<A NAME="SEC101" HREF="FAQ.html#TOC101">Q0424</A>: I have unset <TT>locally_caseless</TT> because my users have upper case letters
+       in their login names, but incoming mail now has to use the correct case.
+       Can I relax this somehow?
+
+
+<P>
+A0424: If you really have to live with caseful user names but want incoming
+       local parts to be caseless, then you have to maintain a file, indexed by
+       the lower case forms, that gives the correct case for each login, like
+       this:
+
+</P>
+<PRE>
+         admin:    Admin
+         steven:   Steven
+         mcdonald: McDonald
+         lamanch:  LaManche
+         ...</PRE>
+<P>
+       and at the start of your directors, put one like this:
+
+</P>
+<PRE>
+         set_case_director:
+           driver = smartuser
+           new_address = "${lookup{${lc:$local_part}}lsearch{/the/file}\
+                          {$value@$domain}fail}"</PRE>
+<P>
+       For efficiency, you should also set the <TT>new_director</TT> option to cause
+       processing of the changed address to begin at the next director. If you
+       are otherwise using the default configuration, then the setting would be
+
+</P>
+<PRE>
+         new_director = system_aliases</PRE>
+<P>
+       If there are lots of users, then a DBM or cdb file would be more
+       efficient than lsearch. If you are handling several domains, then you
+       will have to extend this configuration to cope appropriately.
+
+</P>
+<A NAME="SEC102" HREF="FAQ.html#TOC102">Q0425</A>: I want to look up local users in an SQL database instead of looking in
+       the passwd file.
+
+
+<P>
+A0425: (A) From release 3.03, Exim contains support for calling MySQL.
+
+</P>
+<P>
+       (B) If you can set up an LDAP interface to your SQL database, then this
+       is relatively straightforward to do, since Exim contains LDAP support.
+       Sample configuration C009 shows you how to lookup users in
+       <B>/etc/passwd/whatever</B> instead of <B>/etc/passwd</B>. Modifying this to use LDAP
+       instead of looking in a file would be easy.
+
+</P>
+<P>
+       (C) If you can access SQL from Perl, you could use Exim's embedded Perl
+       facility, but this is expensive in terms of resources used.
+
+</P>
+<P>
+       You must consider what will happen if your database is down. All local
+       mail delivery will be delayed until it comes up again. Whether this
+       matters is of course something for you to decide. If the database is
+       down a lot and it does matter, then consider some scheme of extracting
+       a list of users from the database at regular intervals, and getting Exim
+       to work off that. This is also likely to be more efficient.
+
+</P>
+<A NAME="SEC103" HREF="FAQ.html#TOC103">Q0426</A>: Is it possible for Exim to use a SQL database like MySQL for its lists
+       of virtual domains and explicit aliases?
+
+
+<P>
+A0426: See 
+        <A HREF="FAQ.html#SEC102">A0425</A>.
+
+</P>
+<A NAME="SEC104" HREF="FAQ.html#TOC104">Q0427</A>: Can I use my existing alias files and forward files as well as procmail
+       and effectively drop in exim in place of Sendmail ?
+
+
+<P>
+A0427: Yes, as long as your alias/forward files don't assume that pipes are
+       going to run under a shell. If they do, you either have to change them,
+       or configure Exim to use a shell (which it doesn't by default).
+
+</P>
+<A NAME="SEC105" HREF="FAQ.html#TOC105">Q0428</A>: How can I route mail for user <B>X@local</B> to a smarthost if X doesn't exist
+       on the local host?
+
+
+<P>
+A0428: This is the same question as 
+        <A HREF="FAQ.html#SEC79">Q0402</A>. The duplication is a bug in the FAQ.
+
+</P>
+<A NAME="SEC106" HREF="FAQ.html#TOC106">Q0429</A>: What is quickest way to set up Exim so any message sent to a non-
+       existing user would bounce back with a different message, based
+       on the name of non-existing user?
+
+
+<P>
+A0429: See the example in the section of the manual entitled "System-wide
+       automatic processing".
+
+</P>
+<A NAME="SEC107" HREF="FAQ.html#TOC107">Q0430</A>: I am building some largish mailing lists with Majordomo, and was
+       wondering if it worth leaving the actually list expansion to the
+       <B>aliasfile</B> :include: mechanism or should I consider using the <B>forwardfile</B>
+       transport? Is there any real difference in terms of facilities and/or
+       performance, and are the expansions basically the same code anyway?
+
+
+<P>
+A0430: The code that pulls out individual addresses from a list is the same in
+       both cases, so it's really just a matter of which is the most convenient
+       for you.
+
+</P>
+<A NAME="SEC108" HREF="FAQ.html#TOC108">Q0431</A>: What do I need to do to make Exim handle <B>/usr/ucb/vacation</B> processing
+       automatically, so that people could just create a .<B>vacation.msg</B> file in
+       their home directory and not have to edit their <B>.forward</B> file?
+
+
+<P>
+A0431: Add a new director like this, immediately before the normal localuser
+       director:
+
+</P>
+<PRE>
+         vacation:
+           driver = localuser
+           require_files = .vacation.msg
+           transport = vacation_transport
+           unseen</PRE>
+<P>
+       and a matching new transport like this:
+
+</P>
+<PRE>
+         vacation_transport:
+           driver = pipe
+           command = "/usr/ucb/vacation \"$local_part\""</PRE>
+<P>
+       However, some versions of <B>/usr/ucb/vacation</B> do not work properly unless
+       the DBM file(s) it uses are created in advance - it won't create them
+       itself. You also need a way of removing them when the vacation is over.
+
+</P>
+<P>
+       Another possibility is to use a fixed filter file which is run whenever
+       .<B>vacation.msg</B> exists, for example:
+
+</P>
+<PRE>
+         vacation:
+           driver = forwardfile
+           check_localuser
+           require_files = $home/.vacation.msg
+           file = /some/central/filter
+           filter</PRE>
+<P>
+       The filter file should use the "if personal" check before sending mail,
+       to avoid generating automatic responses to mailing lists. If sending a
+       message is all that it does, this doesn't count as a "significant"
+       delivery, so the message goes on to be delivered as normal.
+
+</P>
+<P>
+       Yet another possibility is to make use of Exim's autoreply transport.
+       See C033.
+
+</P>
+<A NAME="SEC109" HREF="FAQ.html#TOC109">Q0432</A>: I want to use a default entry in my alias file, but it picks up the
+       local parts that the aliases generate. For example, if the alias file
+       is
+
+
+<PRE>
+         luke.skywalker: luke
+         ls: luke
+         *: postmaster</PRE>
+<P>
+       then messages addressed to <B>luke.skywalker</B> end up at postmaster.
+
+</P>
+<P>
+A0432: (A) If you know for certain that no alias in your alias file ever
+       generates another alias that is in the same file, then the most
+       efficient solution is to put
+
+</P>
+<PRE>
+         new_director = name-of-following-director</PRE>
+<P>
+       in your <B>aliasfile</B> director. This stops Exim from processing the
+       generated names as aliases the second time.
+
+</P>
+<P>
+       (B) If you can't give that guarantee, then you have to put dummy entries
+       in the alias file for all your local parts, for example:
+
+</P>
+<PRE>
+         luke: luke</PRE>
+<P>
+       (C) Another possibility is to put the <B>aliasfile</B> director for these
+       aliases <EM>after</EM> the localuser director, so that local parts get picked
+       off first. You will need to have two <B>aliasfile</B> directors if there are
+       some local parts (e.g. root) which you do want to handle as aliases
+       rather than local users.
+
+</P>
+<A NAME="SEC110" HREF="FAQ.html#TOC110">Q0433</A>: I have some obsolete domains which people have been warned not to use
+       any more. How can I arrange to delete any mail that is sent to them?
+
+
+<P>
+A0433: If you are using release 3.10 or later, you can use a <B>smartuser</B> director
+       like this:
+
+</P>
+<PRE>
+         obsolete:
+         domains = lsearch;/etc/exim/obsolete.domains
+         new_address = :blackhole:</PRE>
+<P>
+       If you want to make any exceptions, for example, for mail to postmaster
+       at those domains, you can add the line
+
+</P>
+<PRE>
+         local_parts = !postmaster</PRE>
+<P>
+       If you are using an earlier release of Exim, you have to set up an alias
+       file in order to use :blackhole:
+
+</P>
+<PRE>
+         obsolete:
+         domains = lsearch;/etc/exim/obsolete.domains
+         file = /blackhole/all
+         search_type = lsearch*</PRE>
+<P>
+       with the file containing
+
+</P>
+<P>
+         *:           :blackhole:
+
+</P>
+<P>
+       and possibly a postmaster alias if you want.
+
+</P>
+<A NAME="SEC111" HREF="FAQ.html#TOC111">Q0434</A>: How can I arrange that mail addressed to <B><B>anything@something.mydomain.com</B></B>
+       gets delivered to <B><B>something@mydomain.com</B>?</B>
+
+
+<P>
+A0434: Ensure that all the relevant domains are local, by setting
+
+</P>
+<PRE>
+         local_domains = mydomain.com : *.mydomain.com</PRE>
+<P>
+       Then set up a <B>smartuser</B> director like this:
+
+</P>
+<PRE>
+         user_from_domain:
+           driver = smartuser
+           new_address = "${if match{$domain}{^(.+)\\\\.mydomain.com\\$}\
+             {$1@mydomain.com}fail}"</PRE>
+<A NAME="SEC112" HREF="FAQ.html#TOC112">Q0435</A>: I can't get a regular expression to work in this <TT>local_parts</TT> option on
+       one of my directors:
+
+
+<PRE>
+         local_parts = ^0740\d{6}</PRE>
+<P>
+A0435: The <TT>local_parts</TT> option is expanded before use, so that you can, for
+       example, make it dependent on the domain. Therefore, you need to write
+
+</P>
+<PRE>
+         local_parts = ^0740\\d{6}</PRE>
+<P>
+       so as to preserve the backslash.
+
+</P>
+<A NAME="SEC113" HREF="FAQ.html#TOC113">Q0436</A>: How can I arrange for all addresses in a group of domains <B>*.example.com</B>
+       to share the same alias file? I have a number of such groups.
+
+
+<P>
+A0436: For a single group you could just hardwire the file name into a director
+       that had
+
+</P>
+<PRE>
+         domains = *.example.com</PRE>
+<P>
+       set, to restrict it to the relevant domains. For a number of such groups
+       you can create a file containing the domains, like this:
+
+</P>
+<PRE>
+         *.example1.com    example1.com
+         *.example2.com    example2.com
+         ...</PRE>
+<P>
+       Arrange that the domains are treated as local by setting
+
+</P>
+<PRE>
+         local_domains = "partial-lsearch;/that/file"</PRE>
+<P>
+       Then create a director like this
+
+</P>
+<PRE>
+         domain_aliases:
+           driver = aliasfile
+           domains = partial-lsearch;/that/file
+           file = /etc/aliases.d/$domain_data
+           search_type = lsearch*</PRE>
+<P>
+       The variable <B>$domain_data</B> contains the data that was looked up when the
+       <TT>domains</TT> option was matched, i.e. <B>"example1.com",</B> <B>"example2.com",</B> etc.
+       in this case.
+
+</P>
+<A NAME="SEC114" HREF="FAQ.html#TOC114">Q0437</A>: When Exim tries to read <B><B>/usr/lib/majordomo/lists/lists.aliases</B></B> it is
+       giving "Permission denied", but that file is world-readable!
+
+
+<P>
+A0437: Check the permissions on the superior directories.
+
+</P>
+<BR><H2><A NAME="SEC115" HREF="FAQ.html#TOC115">5. DELIVERY
+
+</A></H2>
+<A NAME="SEC116" HREF="FAQ.html#TOC116">Q0501</A>: What does the error "Neither the <I>xxx</I> director nor the <I>yyy</I> transport set
+       a uid for local delivery of..." mean?
+
+
+<P>
+A0501: Whenever Exim does a local delivery, it runs a process under a specific
+       user and group id (uid and gid). For deliveries into mailboxes, and to
+       pipes and files set up by <B>.forward</B>ing, it normally picks up the uid/gid
+       of the receiving user. However, if an address is directed to a pipe or a
+       file by some other means, such an entry in the system alias file of the
+       form
+
+</P>
+<PRE>
+         majordomo: |/local/mail/majordomo ...</PRE>
+<P>
+       then Exim has to be told what uid/gid to use for the delivery. This can
+       be done either on the director that handled the address, or on the
+       transport that actually does the delivery. If a pipe is going to run a
+       setuid program, then it doesn't matter what uid Exim starts it out with,
+       and so the most straightforward thing is to put
+
+</P>
+<PRE>
+         user = exim</PRE>
+<P>
+       on either the director or the transport. A setting on the transport
+       overrides a setting on the director, so if the same transport is being
+       used with several directors, you should set the user on it only if you
+       want the same uid to be used in all cases.
+
+</P>
+<P>
+       In the default configuration, the transports used for file and pipe
+       deliveries are the ones called <TT>address_file</TT> and <TT>address_pipe</TT>. You
+       can specify different transports by setting, for example,
+
+</P>
+<PRE>
+         pipe_transport = special_pipe_transport</PRE>
+<P>
+       on the <B>aliasfile</B> director. Then you can set up <TT>special_pipe_transport</TT>
+
+</P>
+<PRE>
+         special_pipe_transport:
+           driver = pipe
+           user = ????</PRE>
+<P>
+       which will be used only for pipe deliveries from that one director.
+       What you put for the ???? is up to you, and depends on the particular
+       circumstances.
+
+</P>
+<A NAME="SEC117" HREF="FAQ.html#TOC117">Q0502</A>: Exim won't deliver to a host with no MX record.
+
+
+<P>
+A0502: (A) Are you sure there really is no MX record? Sometimes a typo results
+       in a malformed MX record in the zone file, in which case some nameservers
+       give a SERVFAIL error rather than NXDOMAIN. Exim has to treat this as
+       a temporary error, so it can't go on to look for an A record. You can
+       check for this state using one of the DNS interrogation commands, such
+       as "dig".
+
+</P>
+<P>
+       (B) Is there a wildcard MX record for <EM>your</EM> domain? Is the
+       <TT>search_parents</TT> option on in your <B>lookuphost</B> router? (Prior to Exim
+       version 1.80 this was the default; it was changed because of this
+       problem.) If the answer to both these questions is "yes", then that is
+       the cause of the problem. When the DNS resolver fails to find the MX
+       record, it tries adding on your domain if <TT>search_parents</TT> is true, and
+       thereby finds your wildcard MX record. For example:
+
+</P>
+<P>
+         .  There is a wildcard MX record for <B>*.a.b.c.</B>
+
+</P>
+<P>
+         .  There is a host called <B>x.y.z</B> that has an A record and no MX record.
+
+</P>
+<P>
+         .  Somebody on a machine <B>m.a.b.c</B> domain tries to mail to <B><B>user@x.y.z.</B></B>
+
+</P>
+<P>
+         .  Exim calls the DNS to look for an MX record for <B>x.y.z.</B>
+
+</P>
+<P>
+         .  The DNS doesn't find any MX record. Because <TT>search_parents</TT> is true,
+            it then tries searching the current host's parent domain, so it
+            looks for <B>x.y.z.a.b.c</B> and picks up the wildcard MX record.
+
+</P>
+<P>
+       Setting <TT>search_parents</TT> false makes this case work while retaining the
+       wildcard MX record. However, anybody on the machine <B>m.a.b.c</B> who mails to
+       <B><B>user@n.a</B></B> (expecting it to go to <B><B>user@n.a.b.c</B>)</B> now has a problem. The
+       <TT>widen_domains</TT> option of the <B>lookuphost</B> router may be helpful in this
+       circumstance.
+
+</P>
+<A NAME="SEC118" HREF="FAQ.html#TOC118">Q0503</A>: How should Exim be configured when it is acting as a temporary storage
+       system for a domain on a dial-up host?
+
+
+<P>
+A0503: See 
+        <A HREF="FAQ.html#SEC220">Q1402</A>.
+
+</P>
+<A NAME="SEC119" HREF="FAQ.html#TOC119">Q0504</A>: I would like to deliver mail addressed to a given domain normally, but
+       also to generate a message to the envelope sender.
+
+
+<P>
+A0504: If the domain is a local one, you can do this with an "unseen" <B>smartuser</B>
+       director and an autoreply transport, along the following lines:
+
+</P>
+<PRE>
+         # Transport
+         warning_t:
+           driver        = autoreply
+           file          = /usr/local/mail/warning.txt
+           file_expand
+           from          = postmaster@your.domain
+           to            = $sender_address
+           user          = exim
+           subject       = "Re: Your mail to ${local_part}@${domain}"</PRE>
+<PRE>
+         # Director
+         auto_warning_d:
+           driver        = smartuser
+           domains       = &#60;domains you want to do this for&#62;
+           condition     = ${if eq{$sender_address}{}{no}{yes}}
+           transport     = warning_t
+           no_verify
+           unseen</PRE>
+<P>
+       Note the use of the <TT>condition</TT> option to avoid attempting to send a
+       message when there is no sender (that is, when the incoming message is a
+       delivery error report). You can of course extend this to include other
+       conditions. If you want to log the sending of messages, you can add
+
+</P>
+<PRE>
+         log = /some/file</PRE>
+<P>
+       to the transport and also make use of the "once" option if you want to
+       send only one message to each sender.
+
+</P>
+<A NAME="SEC120" HREF="FAQ.html#TOC120">Q0505</A>: Exim keeps crashing with segmentation errors (signal 11 or 139) during
+       delivery. This seems to happen when it is about to contact a remote
+       host or when a delivery is deferred.
+
+
+<P>
+A0505: This could be a problem with Exim's databases. Check that your DBM
+       library is correctly installed. In particular, if you have installed a
+       second DBM library onto a system that already had one, check that its
+       version of <B>ndbm.h</B> is being seen first. For example, if the new version
+       is in <B>/usr/local/include</B>, check that there isn't another version in
+       <B>/usr/include</B>. If you are using Berkeley db, you can set <TT>USE_DB=yes</TT> in
+       your <B>Local/Makefile</B> to avoid using <B>ndbm.h</B> altogether. This is
+       particularly relevant for version 2 of Berkeley db, because no <B>ndbm.h</B>
+       file is distributed with it.
+
+</P>
+<A NAME="SEC121" HREF="FAQ.html#TOC121">Q0506</A>: Whenever Exim tries to do a local delivery, it gives a permission denied
+       error for the <B>.forward</B> file, like this:
+
+
+<PRE>
+         1998-08-10 16:55:32 0z5y2W-0000B8-00 == xxxx@yyy.zzz &#60;xxxx@yyy.zz&#62;
+           D=userforward defer (-1): failed to open /home/xxxx/.forward
+           (userforward director): Permission denied (euid=1234 egid=101)</PRE>
+<P>
+A0506: Have you remembered to make Exim setuid root?
+
+</P>
+<A NAME="SEC122" HREF="FAQ.html#TOC122">Q0507</A>: I have installed Exim, but now I can't mail to root any more. Why is
+       this?
+
+
+<P>
+A0507: Most people set up root as an alias for the manager of the machine. If
+       you haven't done this, Exim will attempt to deliver to root as if it
+       were a normal user. This isn't really a good idea because the delivery
+       process would run as root. Exim has a trigger guard in the option
+
+</P>
+<PRE>
+         never_users = root</PRE>
+<P>
+       in the default configuration file. This prevents it from running as root
+       when doing any local deliveries. If you really want to run local
+       deliveries as root, remove this line, but it would be better to create
+       an alias for root instead.
+
+</P>
+<A NAME="SEC123" HREF="FAQ.html#TOC123">Q0508</A>: How can I stop undeliverable bounce messages (e.g. to routeable, but
+       undeliverable, spammer senders) from clogging up the queue for days?
+
+
+<P>
+A0508: Set <TT>ignore_errmsg_errors</TT> to drop them immediately, or set <TT>ignore_errmsg_</TT>
+       <TT>errors_after</TT> to specify a (short) time to keep them for. I use 12h so
+       that I notice them, but they go away relatively quickly.
+
+</P>
+<A NAME="SEC124" HREF="FAQ.html#TOC124">Q0509</A>: How can mails that are being routed through directors other than
+       localuser be delivered under the uid of the recipient?
+
+
+<P>
+A0509: 
+        <A HREF="FAQ.html#SEC116">A0501</A> contains background information on this. If you are using, say, an
+       alias file to direct messages to specific mailboxes, then you can use
+       the "user" option on either the <B>aliasfile</B> director or the appendfile
+       transport to set the uid. What you put in the setting depends on how
+       the required uid is to be found. It could be looked up in a file or
+       computed somehow from the local part, for example.
+
+</P>
+<A NAME="SEC125" HREF="FAQ.html#TOC125">Q0510</A>: I want to use MMDF-style mailboxes. How can I get Exim to append the
+       ctrl-A characters that separate indvidual emails?
+
+
+<P>
+A0510: Set the suffix option in the appendfile transport. In fact, for MMDF
+       mailboxes you need a prefix as well as a suffix to get it working right,
+       so your transport should contain these settings:
+
+</P>
+<PRE>
+         prefix = "\1\1\1\1\n"
+         suffix = "\1\1\1\1\n"</PRE>
+<P>
+       Also, you need to change the <TT>check_string</TT> and <TT>escape_string</TT> settings so
+       that the escaping happens for lines in the message that happen to begin
+       with the MMDF prefix or suffix string, rather than "From" (the default):
+
+</P>
+<PRE>
+         check_string  = "\1\1\1\1\n"
+         escape_string = "\1\1\1\1 \n"</PRE>
+<P>
+       Adding a space to the line is sufficient to prevent it being taken as a
+       separator.
+
+</P>
+<A NAME="SEC126" HREF="FAQ.html#TOC126">Q0511</A>: I have an ISDN connection and would like a way of running the queue
+       automatically when it is up.
+
+
+<P>
+A0511: The following shell commands test for the interface being up and then
+       run the queue:
+
+</P>
+<PRE>
+         ifconfig ppp0 | fgrep UP &#62;/dev/null
+         if [ $? -eq 0 ] ; then exim -q ; fi</PRE>
+<P>
+       You could put these commands into a script which runs them at regular
+       intervals. You might want to use <B>-qq</B> instead of <B><B>-q.</B></B>
+
+</P>
+<P>
+       With Linux, the script <B>/etc/ppp/ip-up</B> is run after a ISDN connection
+       or a more general PPP connection has been established. If you are using
+       Linux, you could put the call to exim in that script.
+
+</P>
+<A NAME="SEC127" HREF="FAQ.html#TOC127">Q0512</A>: If a user's mailbox is over quota, is there a way for me to set it up so
+       that the mail bounces to the sender and is NOT stored in the mail queue?
+
+
+<P>
+A0512: In the retry section of the configuration, put
+
+</P>
+<PRE>
+         *@your.dom.ain        quota</PRE>
+<P>
+       That is, provide no retry timings for over quota errors. They will then
+       bounce immediately. Alternatively, you can set up retries for a short
+       time only, or use something like this:
+
+</P>
+<PRE>
+         *@your.dom.ain        quota_7d
+         *@your.dom.ain        quota       F,2h,15m; F,3d,1h</PRE>
+<P>
+       which bounces immediately if the user's mailbox hasn't been read for 7
+       days, but otherwise tries for up to 3 days after the first quota
+       failure.
+
+</P>
+<A NAME="SEC128" HREF="FAQ.html#TOC128">Q0513</A>: I'm using tmail to do local deliveries, but when I turned on the
+       <TT>use_crlf</TT> option on the pipe transport (tmail prefers \r\n terminations)
+       message bodies started to vanish.
+
+
+<P>
+A0513: You need to unset the prefix option (or change it so that its default
+       \n terminator becomes \r\n). For example, the transport could be:
+
+</P>
+<PRE>
+         local_delivery_mbx:
+          driver = pipe
+          command = "/usr/local/bin/tmail ${local_part}"
+          user = exim
+          current_directory = /
+           use_crlf
+           prefix =</PRE>
+<P>
+       The reason for this is as follows: tmail uses the line terminator on
+       the first line it sees to determine whether lines are terminated by
+       \r\n or \n. If the latter, it moans to stderr and changes subsequent
+       \n terminators to \r\n. The default setting of the prefix option is
+       "From ...\n", and this is unaffected by the <TT>use_crlf</TT> option. If you
+       don't change this, tmail sees the first line terminated by \n and
+       prepends \r to the \n terminator on all subsequent lines. However, if
+       <TT>use_crlf</TT> is set, Exim makes all other lines \r\n terminated leading to
+       doubled \r\r\n lines and corrupt mbx mailboxes.
+
+</P>
+<A NAME="SEC129" HREF="FAQ.html#TOC129">Q0514</A>: What does the message "Unable to get root to set uid and gid
+       for local delivery to <I>xxx</I>: uid=<I>yyy</I> euid=<I>zzz</I>" mean?
+
+
+<P>
+A0514: Have you remembered to make Exim setuid root? It needs root privilege if
+       it is to do any local deliveries, because it does them "as the user".
+
+</P>
+<A NAME="SEC130" HREF="FAQ.html#TOC130">Q0515</A>: I upgraded to 2.04 and now my Envelope-To: header for my virtual domains
+       is gone. Any idea how to get it back?
+
+
+<P>
+A0515: Read paragraph 1 of the 1.92 information in <B>README.UPDATING.</B> Add
+       <TT>envelope_to_add</TT> to your transports for your virtual domains. You may
+       also want to set <TT>return_path_add</TT> and <TT>delivery_date_add</TT>.
+
+</P>
+<A NAME="SEC131" HREF="FAQ.html#TOC131">Q0516</A>: The Exim log records the arrival of a message, and then "Completed",
+       without logging any deliveries. What's going on?
+
+
+<P>
+A0516: This is unlikely in current versions of Exim, because more logging
+       has been added. In versions before 2.053, one scenario is that the
+       message was addressed to some user who has set up an Exim filter
+       containing the command "seen finish", which discards a message without
+       doing any deliveries. (In current versions of Exim this is logged as
+       "discarded".) More information can be obtained by setting
+
+</P>
+<PRE>
+         log_received_recipients</PRE>
+<P>
+       so that next time you can see to whom it is addressed. Another
+       possibility, prior to version 2.053, was that the message was injected
+       using the <B>-t</B> option, but all the addresses in the message were also on
+       the command line. See 
+        <A HREF="FAQ.html#SEC245">A5020</A> for more detail. Current versions of Exim
+       generate a bounce message in this case.
+
+</P>
+<A NAME="SEC132" HREF="FAQ.html#TOC132">Q0517</A>: When I activate "return receipt" for example in Netscape Mailbox
+       sending options, then I get an error message from Exim... something
+       like "not supported". Can I activate delivery confirmations?
+
+
+<P>
+A0517: Exim does not support any kind of delivery notification.
+
+</P>
+<P>
+       (A) You can configure it to recognize headers such as
+       "Return-receipt-to:" if you wish.
+
+</P>
+<P>
+       (B) Some people want MSN (message status notification). Such services
+       are implemented in MUAs, and don't impact on the MTA at all.
+
+</P>
+<P>
+       (C) I investigated the RFCs which describe the DSN (delivery status
+       notification) system, and there is even a bit of code in there (excluded
+       by #ifdef) for handling some of the data. However, I was unable to
+       specify any sensible way of actually doing anything with the data. There
+       were comments on the mailing list at the time; many people, including
+       me, conclude that DSN is in practice unworkable. The killer problem is
+       with forwarding and aliasing. Do you propagate the DSN data with the
+       generated addresses? Do you send back a "reached end of the DSN world"
+       or "expanded" message? Do you do this differently for different kinds of
+       aliasing/forwarding? For a user who has a <B>.forward</B> file with a single
+       address in, this might seem easy - just propagate the data. But what if
+       there are several forwardings? If you propagate the DSN data, the sender
+       may get back several DSN messages - and should the sender really know
+       about the detail of the receiver's forwarding arrangements? There isn't
+       really any way to distinguish between a <B>.forward</B> file that is forwarding
+       and one that is a mini mailing list. And so on, and so on. There are so
+       many questions that don't have obvious answers.
+
+</P>
+<A NAME="SEC133" HREF="FAQ.html#TOC133">Q0518</A>: When I dial up to collect mail from my ISP, only the first 10 messages
+       get delivered immediately; the remainder just sit on the queue until a
+       queue runner process finds them.
+
+
+<P>
+A0518: Your ISP is delivering all the messages in a single SMTP session. Exim
+       limits the number of immediate delivery processes it will create as a
+       result of a single SMTP connection, in order to avoid creating a zillion
+       processes on systems that can have many incoming connections. In your
+       situation, you should probably set <TT>smtp_accept_queue_per_connection</TT> to
+       some number larger than 10.
+
+</P>
+<A NAME="SEC134" HREF="FAQ.html#TOC134">Q0519</A>: My ISP's mail server is rejecting bounce messages from Exim, complaining
+       that they have no sender. The SMTP trace does indeed show that the
+       sender address is "&#60;&#62;". Why is the Sender on the bounce message empty?
+
+
+<P>
+A0519: Because the RFCs say it must be. Your ISP is at fault. Send them this
+       extract from RFC 1123 section 5.3.3 ("Reliable Mail Receipt"):
+
+</P>
+<P>
+         If there is a delivery failure after acceptance of a message,
+         the receiver-SMTP MUST formulate and mail a notification
+         message.  This notification MUST be sent using a null ("&#60;&#62;")
+         reverse path in the envelope; see Section 3.6 of RFC-821.  The
+         recipient of this notification SHOULD be the address from the
+         envelope return path (or the Return-Path: line).  However, if
+         this address is null ("&#60;&#62;"),  the receiver-SMTP MUST NOT send a
+         notification.  If the address is an explicit source route, it
+         SHOULD be stripped down to its final hop.
+
+</P>
+<A NAME="SEC135" HREF="FAQ.html#TOC135">Q0520</A>: What does the message "retry time not reached [for any host]" on the log
+       mean? Why won't Exim try to deliver the message?
+
+
+<P>
+A0520: That is not an error. It means exactly what it says. A previous attempt
+       to deliver to that address failed with a temporary error, and Exim
+       computed the earliest time at which to try again. This can apply to
+       local as well as to remote deliveries. For remote deliveries, each host
+       (if there are several) has its own retry time.
+
+</P>
+<P>
+       Some MTAs have a retrying schedule for each message. Exim does not work
+       like this. Retry timing is normally host-based for remote domains and
+       address-based for local domains. (There are some exceptions for certain
+       kinds of remote failure - see "Errors in outgoing SMTP" in the manual.)
+
+</P>
+<P>
+       If a new message arrives for a failing address and the retry time has
+       not yet arrived, Exim will log "retry time not reached" and leave the
+       message on the queue, without attempting delivery. Similarly, if a queue
+       runner notices the message before the time to retry has arrived, it
+       writes the same log entry. When the retry time has past, Exim attempts
+       delivery at the next queue run. If you want to know when that will be,
+       run the exinext utility on the address, for example:
+
+</P>
+<PRE>
+         exinext user@some.domain</PRE>
+<P>
+       You can suppress these messages on the log by setting <TT>log_level</TT> to a
+       value that is less than 5. You can force a delivery attempt on a
+       specific message (overriding the retry time) by means of the <B>-M</B> option:
+
+</P>
+<PRE>
+         exim -M 10hCET-0000Bf-00</PRE>
+<P>
+       If you want to do this for the entire queue, use the <B>-qf</B> option. See
+       also 
+        <A HREF="FAQ.html#SEC148">Q0533</A>.
+
+</P>
+<A NAME="SEC136" HREF="FAQ.html#TOC136">Q0521</A>: RFC 1985 specifies that the SMTP command "ETRN <B>host.domain"</B> causes all
+       mail queued for that host, no matter what domain it's for, to be
+       dequeued. Why doesn't Exim support this?
+
+
+<P>
+A0521: Exim does not keep queues of mail for specific destinations. It just
+       keeps one pool of undelivered messages. What is more, once you start a
+       delivery of a message, it tries to deliver to <EM>all</EM> the addresses in the
+       message, not just the one you may be interested in. (Of course, this
+       doesn't usually do any harm.)
+
+</P>
+<P>
+       The only way it could be done within Exim would be, for <EM>every</EM> message
+       on the queue, to go through the motions of routing each undelivered
+       address and see if that resulted in a delivery to the host of interest.
+       This could be extremely expensive (e.g. 1,000 messages on the queue,
+       only 1 for the given host).
+
+</P>
+<P>
+       The bottom line is that Exim just wasn't designed for this kind of
+       operation, that is, holding messages for intermittently connected hosts.
+       The queueing arrangements are designed for handling delivery problems
+       that are not expected to be common.
+
+</P>
+<P>
+       A better way to do this is to implement the required queues separately.
+       After all, keeping such mail on an "active" queue (where Exim will keep
+       trying to deliver) is silly. If there is a lot of mail for these hosts,
+       it also masks genuine delivery problems when you inspect the queue.
+
+</P>
+<P>
+       Large ISPs who provide this kind of functionality do not usually leave
+       waiting mail on the MTA's queue. Instead, they get it delivered into
+       per-host directories, one message per file, in one of the special
+       formats (BSMTP, maildir, or mailstore) and when an ETRN arrives, it
+       kicks off some completely different program that establishes an SMTP
+       connection to the host and shovels the waiting mail down it. That seems
+       to me to be a much neater way of doing this. It means you can easily add
+       additional functionality such as archiving or throwing away uncollected
+       mail. One program that has this functionality is "ssmtp", which can be
+       found in <B><A HREF="ftp://metalab.unc.edu/pub/Linux/system/mail/mta/.">ftp://metalab.unc.edu/pub/Linux/system/mail/mta/.</A></B>
+
+</P>
+<A NAME="SEC137" HREF="FAQ.html#TOC137">Q0522</A>: If email has been deferred to a member on a local mailing list
+       (implemented through forward files), and one of our ETRN clients is on
+       this mailing list, the <B>-R</B> won't "flush" the mailing list message for
+       that client.
+
+
+<P>
+A0522: That is because <B>-R</B> matches only original recipient addresses, not those
+       produced as a result of expansion, because these are not (by default)
+       preserved from delivery to delivery. You can get round this by setting
+       <TT>one_time</TT> on the <B>forwardfile</B> director, but you are not allowed to have
+       expansions to pipes or files on directors that have <TT>one_time</TT> set.
+       Therefore, you will have to have a separate director for mailing lists
+       (with <TT>one_time</TT> set) to the one used for normal forward files that might
+       specify pipe or file deliveries. However, the problem will then still be
+       present for any user who sets up a <B>.forward</B> file to redirect to any of
+       the ETRN domains. See the last 3 paragraphs of 
+        <A HREF="FAQ.html#SEC136">A0521</A> for a discussion of
+       an alternative approach.
+
+</P>
+<A NAME="SEC138" HREF="FAQ.html#TOC138">Q0523</A>: Exim seems to be sending the same message twice, according to the log,
+       although there is a difference in capitalization of the local part of
+       the address.
+
+
+<P>
+A0523: That is correct. The RFCs are explicit in stating that capitalization
+       matters for local parts. For remote domains, Exim is not entitled to
+       assume case independence of local parts. I know, it is utterly silly,
+       and it causes a lot of grief, but that's what the rules say. Here is a
+       quote from the draft of the forthcoming revision to RFC 821:
+
+</P>
+<P>
+         ... a command verb, an argument value other than a mailbox
+         local-part, and free form text MAY be encoded in upper case,
+         lower case, or any mixture of upper and lower case with no impact
+         on its meaning.  This is NOT true of a mailbox local-part. The
+         local-part of a mailbox MUST BE treated as case sensitive.
+         Therefore, SMTP implementations MUST take care to preserve the
+         case of mailbox local-parts.  Mailbox domains are not case
+         sensitive.  However, exploiting the case sensitivity of mailbox
+         local-parts impedes interoperability and is discouraged.
+
+</P>
+<A NAME="SEC139" HREF="FAQ.html#TOC139">Q0524</A>: How can I force the next retry time for a host to be now?
+
+
+<P>
+A0524: (A) You can force a particular message to be delivered with the <B>-M</B>
+       command line option. If it succeeds, the retry data will get cleared. If
+       the host is past the cutoff time, so that messages are bouncing
+       immediately without trying a delivery, you can use <B>-odq</B> to put a message
+       on the queue without a delivery attempt, and then use <B>-M</B> on it.
+
+</P>
+<P>
+       (B) You can change the retry time with the <TT>exim_fixdb</TT> utility, but its
+       interface is very clumsy.
+
+</P>
+<A NAME="SEC140" HREF="FAQ.html#TOC140">Q0525</A>: I set up "|/bin/grep Subject|/usr/bin/smbclient <B>-M</B> &#60;netbiosname&#62;" as an
+       alias but it doesn't work.
+
+
+<P>
+A0525: That is a shell command line. Exim does not run pipe commands under a
+       shell by default (for added security - and it saves a process). You
+       need something like
+
+</P>
+<PRE>
+         "|/bin/sh -c '/bin/grep Subject|/usr/bin/smbclient -M &#60;netbiosname&#62;'"</PRE>
+<A NAME="SEC141" HREF="FAQ.html#TOC141">Q0526</A>: Why does the pipe transport add a line starting with "&#62;From" to
+       messages?
+
+
+<P>
+A0526: Actually, it adds a line starting with "From", because that is the
+       default of the "prefix" option (/usr/ucb/vacation needs it, and that is
+       the most common use of piping). If you don't want it, change the setting
+       of "prefix".
+
+</P>
+<A NAME="SEC142" HREF="FAQ.html#TOC142">Q0527</A>: I have set <TT>fallback_hosts</TT> on my smtp transport, but after the error
+       <B>"sem@chat.ru</B> cannot be resolved at this time" Exim isn't using them.
+
+
+<P>
+A0527: <TT>fallback_hosts</TT> only works if an attempt at delivery to the original
+       host(s) fails. In this case, Exim couldn't even resolve the domain
+       <B>chat.ru</B> to discover what the original hosts were, so it never got as far
+       as the transport. However, see 
+        <A HREF="FAQ.html#SEC73">Q0322</A> for a possible solution.
+
+</P>
+<A NAME="SEC143" HREF="FAQ.html#TOC143">Q0528</A>: After the holidays my ISP has always hundreds of e-mails waiting for me.
+       These are forced down Exim's throat in one go. Exim spawns a lot of
+       kids, but is there some limit to the number of processes it creates?
+
+
+<P>
+A0528: Unless you have changed <TT>smtp_accept_queue_per_connection</TT> (introduced at
+       release 2.03) it should only spawn that many processes per connection
+       (default 10). Your ISP may be making many connections, of course. That
+       is limited by <TT>smtp_accept_max</TT>.
+
+</P>
+<A NAME="SEC144" HREF="FAQ.html#TOC144">Q0529</A>: When a message in the queue got to 12h old, Exim wrote 'retry timeout
+       exceeded' and removed <EM>all</EM> messages in the queue to this host - even
+       recent messages. How I can avoid this behaviour? I only want to remove
+       messages that have exceeded the maximum retry time.
+
+
+<P>
+A0529: Exim's retrying is host-based rather than message-based. The philosophy
+       is that if a host has been down for a very long time, there is no point
+       in keeping messages hanging around. However, you might like to check
+       out <TT>delay_after_cutoff</TT> in the smtp transport. It doesn't do what you
+       want, but it might help.
+
+</P>
+<A NAME="SEC145" HREF="FAQ.html#TOC145">Q0530</A>: Can Exim add a Content-Length: header to messages it delivers?
+
+
+<P>
+A0530: You could include something like
+
+</P>
+<PRE>
+         headers_remove = "content-length"
+         headers_add = "Content-Length: $message_body_size"</PRE>
+<P>
+       to the appendfile transport. However, the use of Content-Length: can
+       cause several problems, and is not recommended unless you really know
+       what you are doing. There is a discussion of the problems in
+
+</P>
+<P>
+         <B><A HREF="http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/content-length.html">http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/content-length.html</A></B>
+
+</P>
+<A NAME="SEC146" HREF="FAQ.html#TOC146">Q0531</A>: Exim seems to be trying to deliver a message every 10 minutes, though
+       the retry rules specify longer times after a while, because it is
+       writing a log entry every time, like this:
+
+
+<PRE>
+       1999-08-26 14:51:19 11IVsE-000MuP-00 == example@example.com T=smtp defer
+       (-34): some host address lookups failed and retry time not reached for
+       other hosts or connection limit reached</PRE>
+<P>
+A0531: It is <EM>looking</EM> at the message every 10 minutes, but it isn't actually
+       trying to deliver. It's looking up <B>example.com</B> in the DNS and finding
+       this information:
+
+</P>
+<PRE>
+         example.com.                MX 10 example-com.isp.example.com.
+         example.com.                MX  0 mail.example.com.
+         mail.example.com.           A  202.77.183.45
+         A lookup for example-com.isp.example.com. yielded NXDOMAIN</PRE>
+<P>
+       The last line means that there is no address (A) record in the DNS for
+       <B>example-com.isp.example.com.</B> That accounts for "some host address
+       lookups failed", but the retry time for <B>mail.example.com</B> hasn't been
+       reached, which accounts for "retry time not reached for other hosts".
+
+</P>
+<A NAME="SEC147" HREF="FAQ.html#TOC147">Q0532</A>: I am trying to set exim up to have a automatic failover if it sees that
+       the system that it is sending all mail to is down.
+
+
+<P>
+A0532: Add to the <TT>remote_smtp</TT> transport the following:
+
+</P>
+<PRE>
+         fallback_hosts = failover.server.name(s)</PRE>
+<P>
+       If there are several names, they must be separated by colons.
+
+</P>
+<A NAME="SEC148" HREF="FAQ.html#TOC148">Q0533</A>: I can't get Exim to deliver over NFS. I get the error "fcntl() failed:
+       No locks available", though the lock daemon is running on the NFS server
+       and other hosts are able to access it.
+
+
+<P>
+A0533: Check that you have lockd running on the NFS <EM>client</EM>. This is not
+       always running by default on some systems (Red Hat is believed to be one
+       such system).
+
+</P>
+<A NAME="SEC149" HREF="FAQ.html#TOC149">Q0534</A>: Why does Exim bounce messages without even attempting delivery, giving
+       the error "retry time not reached for any host after a long failure
+       period"?
+
+
+<P>
+A0534: This message means that all hosts to which the message could be sent
+       have been failing for so long that the end of the retry period
+       (typically 4 or 5 days) has been reached. In this situation, Exim still
+       computes a next time to retry, but any messages that arrive in the
+       meantime are bounced straight away. You can alter this behaviour by
+       unsetting the <TT>delay_after_cutoff</TT> option on the smtp transport. Then Exim
+       will try most messages for those hosts once before giving up.
+
+</P>
+<A NAME="SEC150" HREF="FAQ.html#TOC150">Q0535</A>: My <B>.forward</B> file is "|/usr/bin/procmail <B>-f-"</B> and mail gets delivered,
+       but there was a bounce to the sender, sending him the output of procmail.
+       How can I prevent this?
+
+
+<P>
+A0535: Exim's default configuration is set up like this:
+
+</P>
+<PRE>
+         address_pipe:
+           driver = pipe
+           return_output</PRE>
+<P>
+       The <TT>return_output</TT> option requests that <EM>any</EM> output that the pipe
+       produces be returned to the sender. That is the safest default. If you
+       don't want this, you can either remove the option altogether, or change
+       it to <TT>return_fail_output</TT>, to return output only if the command fails.
+       Note that this will affect all pipes that users run, not just your
+       procmail one. It might be better to arrange for procmail not to produce
+       any output when it succeeds.
+
+</P>
+<BR><H2><A NAME="SEC151" HREF="FAQ.html#TOC151">6. UUCP
+
+</A></H2>
+<A NAME="SEC152" HREF="FAQ.html#TOC152">Q0601</A>: The MX records for some UUCP domains point to my local host. How do I
+       get it to pass the messages on to UUCP?
+
+
+<P>
+A0601: There are several possibilities. One straightforward way is to set up
+       a <B>domainlist</B> router which matches the UUCP domains and routes to a
+       suitable transport. Sample configuration C003 is such a configuration,
+       while C004 shows another way to do it, by defining the domains as local
+       and using a <B>smartuser</B> director.
+
+</P>
+<P>
+       If <EM>all</EM> the domains whose MX records point to the local host are either
+       local domains or UUCP domains, you can do without the <B>domainlist</B> router
+       altogether, by making use of the "self" option. This means that only the
+       DNS has to be updated when a UUCP domain is added or removed.
+
+</P>
+<P>
+       For example, this router routes to remote hosts over SMTP using a DNS
+       lookup with default options, and fails for unknown domains (because of
+       the <TT>no_more</TT> setting), but if the MX for a domain points at the local
+       host, Exim continues on to the next router (self = <TT>fail_soft</TT> overrides
+       <TT>no_more)</TT>.
+
+</P>
+<PRE>
+         lookuphost:
+           driver = lookuphost
+           transport = smtp
+           no_more
+           self = fail_soft</PRE>
+<P>
+       The next router can just send everything to a suitable UUCP transport:
+
+</P>
+<PRE>
+         uucp:
+           driver = domainlist
+           transport = uux_transport
+           route_list = "* $domain"</PRE>
+<P>
+       This assumes that the transport can determine the UUCP host name from
+       the domain name.
+
+</P>
+<A NAME="SEC153" HREF="FAQ.html#TOC153">Q0602</A>: How can I get Exim to handle "bang path" addresses?
+
+
+<P>
+A0602: In general, you can't (Exim is an Internet mailer and recognizes only
+       RFC 822 addresses) but some restricted kinds of bang path can be dealt
+       with by appropriate rewriting - but please note the warning below.
+
+</P>
+<P>
+       Exim treats a bang path address as an unqualified local part, and so
+       will qualify it with your domain. A rule such as
+
+</P>
+<PRE>
+         ^([^!]+)!(.+)@your\.domain$   $2@$1</PRE>
+<P>
+       turns <B><B>a!b@your.domain</B></B> into <B><B>b@a.</B></B> You can also use a repeating rule to
+       turn multi-component paths into the "percent hack" notation with a rule
+       such as
+
+</P>
+<PRE>
+         ^([^!]+)!([^@%]+)(.+)$   $2%$1$3   R</PRE>
+<P>
+       which turns <B>a!b@c</B> into <B>b%a@c</B> and <B>a!b!c@d</B> first into <B>b!c%a@d</B> and then,
+       because of the R flag, into <B><B>c%b%a@d.</B></B> The R flag causes repetition up to
+       10 times.
+
+</P>
+<P>
+       See also sample configuration C002, which contains some more
+       sophisticated rewriting rules.
+
+</P>
+<P>
+       WARNING: If you install a general rewriting rule like the above, you are
+       opening yourself up to the possibility of unwanted relaying. A host that
+       is not permitted to relay through your system could send a message with
+       an SMTP command line such as
+
+</P>
+<PRE>
+         RCPT TO:&#60;victim-host!victim-user@your.domain&#62;</PRE>
+<P>
+       and this would be accepted because it is addressed to your domain.
+       However, the rewriting then converts the address, and the message does
+       in fact get relayed. One way round this, if all your bang path messages
+       are passed to Exim via SMTP, is to use the "S" rewriting flag. This
+       applies a rewriting rule to incoming SMTP addresses as soon as they are
+       received, before checking for qualification, relaying, etc. So a rule
+       such as
+
+</P>
+<PRE>
+         ^([^!]+)!(.+)$  $2@$1  S</PRE>
+<P>
+       rewrites simple two-component bang paths before the result is checked
+       for relaying. However, this does not rewrite addresses in the headers of
+       the message.
+
+</P>
+<A NAME="SEC154" HREF="FAQ.html#TOC154">Q0603</A>: We see something strange on our system in regards to mail comming in via
+       rmail from a UUCP link. The sender is being set to mailmaster instead of
+       the real sender, and a Sender: header is being added to the message.
+
+
+<P>
+A0603: If mailmaster is the user that is running rmail, you need to include
+       that user in the <TT>trusted_users</TT> configuration option. Only trusted users
+       are permitted to specify senders when mail is passed to Exim via the
+       command line.
+
+</P>
+<BR><H2><A NAME="SEC155" HREF="FAQ.html#TOC155">7. PERFORMANCE
+
+</A></H2>
+<A NAME="SEC156" HREF="FAQ.html#TOC156">Q0701</A>: I'm running a large mail server. Should I set <TT>split_spool_directory</TT> to
+       improve performance?
+
+
+<P>
+A0701: There doesn't seem to be any significant performance hit using a flat
+       queue on Solaris systems, so there is no need to do this for them. On
+       the other hand, there is a known performance problem on Linux filing
+       systems, where <TT>split_spool_directory</TT> can make a significant difference.
+       ???? Other operating systems ????
+
+</P>
+<A NAME="SEC157" HREF="FAQ.html#TOC157">Q0702</A>: How well does Exim scale?
+
+
+<P>
+A0702: Although the author did not specifically set out to write a high-
+       performance MTA, Exim does seem to be fairly efficient. The biggest
+       server at the University of Cambridge (a large Sun box) goes over
+       100,000 deliveries per day on busy days (it has over 20,000 users).
+       There was a report of a mailing list exploder that sometimes handles
+       over 100,000 deliveries a day on a big Linux box, the record being
+       177,000 deliveries (791MB in total). Up to 13,000 deliveries an hour
+       have been reported.
+
+</P>
+<P>
+       These are quotes from some Exim users:
+
+</P>
+<P>
+       "... Canada's largest internet provider, uses Exim on all of our mail
+       machines, and we're absolutely delighted with it. It brought life back
+       into one of our machines plagued with backlogs and high load averages.
+       Here's just an example of how much email our largest mail server
+       (quad SS1000) is seeing ... "  [230,911 deliveries in a day: 4,475MB]
+
+</P>
+<P>
+       "... Exim has to ... do gethostbyname()s and RBL lookups on all of the
+       incoming mail servers, and he runs from <B>inetd</B> (TCP Wrappers connected).
+       All the same, it seems to me that he runs as fast as lightning on our
+       SCO 5.0.4 box (1 Pentium 166) - far faster than MMDF which I (and many
+       customers) had before."
+
+</P>
+<P>
+       "On a PII 400 with 128M of RAM running Linux 2.2.5, I have achieved
+       36656 messages per hour (outgoing unique messages and recipients). For
+       about a 5 minute period, I was able to achieve an average of 30 messages
+       per second (that would be 108000 m/hour)! We are using: (options that
+       make a difference):
+
+</P>
+<PRE>
+         queue_only
+         split_spool_directory
+         auto_thaw 60s
+         max_queue_run 1
+         remote_max_parallel 1</PRE>
+<P>
+       We have a cron job hat runs every five minutes that spawns 5 exim <B>-q</B> if
+       there are less that 120 exim processes currently running. We found
+       that by "manually" controlling the concurrency of exim <B>-q</B> processes
+       contending for the spool for <TT>remote_smtp</TT> delivery that we gained
+       considerable performance <B>--</B> 10000 m/hour."
+
+</P>
+<A NAME="SEC158" HREF="FAQ.html#TOC158">Q0703</A>: We have a large password file. Can Exim use alternative lookups during
+       delivery to speed things up?
+
+
+<P>
+A0703: Yes. You don't have to use the password file at all. See sample
+       configuration C009 for some suggestions. (It shows lsearch lookups, but
+       these could equally be DBM or cdb or NIS or LDAP lookups.)
+
+</P>
+<BR><H2><A NAME="SEC159" HREF="FAQ.html#TOC159">8. POLICY CONTROLS
+
+</A></H2>
+<A NAME="SEC160" HREF="FAQ.html#TOC160">Q0801</A>: How do I block unwanted messages from outside my host?
+
+
+<P>
+A0801: There are several different options that can be used to block incoming
+       SMTP messages according to different criteria. The following are the
+       most commonly used:
+
+</P>
+<P>
+       (A) Set <TT>sender_verify</TT>; this causes rejection of any message whose
+           envelope sender cannot be successfully routed. This is mainly a
+           check on the existence of remote domains, though it the domain is a
+           local one, the local part also gets checked. Unfortunately, error
+           mesages do not have envelope sender addresses, so cannot be checked
+           in this way. See the <TT>headers_sender_verify</TT> options for ways of
+           checking header addresses.
+
+</P>
+<P>
+       (B) If you want to block all mail from specific hosts or IP networks,
+           set <TT>host_reject_recipients</TT>. The <TT>_recipients</TT> form of the option is
+           more likely to prevent the remote hosts from keeping on trying. For
+           example:
+
+</P>
+<PRE>
+             host_reject_recipients = 209.12.111.0/24</PRE>
+<P>
+           If you have many such blocks, they can be put in a file which is
+           named in the option. If you have a mixture of IP addresses and names
+           in your list, it is best to put the addresses first, because they
+           can be checked without the need for a DNS lookup.
+
+</P>
+<P>
+       (C) If you want to block mail from specific envelope sender addresses,
+           one convenient way is to organize a file of local parts indexed by
+           domain names, for example
+
+</P>
+<PRE>
+             x.y.z     creditrepair:^betterlovelife[0-9]+$:...
+             p.q.r     *</PRE>
+<P>
+           This would block <B><B>creditrepair@x.y.z</B>,</B> any local part starting with
+           <B>betterlovelife</B> and ending with digits in the <B>x.y.z</B> domain, and
+           all addresses in the <B>p.q.r</B> domain. You refer to the file in the Exim
+           configuration as follows:
+
+</P>
+<PRE>
+             sender_reject_recipients = @@lsearch*;/name/of/the/file</PRE>
+<P>
+           If the file is big, you can convert it into a DBM or cdb file and
+           use a faster lookup method. The asterisk on the end of the search
+           type causes a lookup for "*" if the domain is not found; that is, it
+           permits a default list of local parts that are blocked at any
+           domain that is not specifically listed. If you use this, you
+           probably also want to end each local part list with "&#62;*" (except
+           those that consist of "*"). This causes Exim to check the default
+           list of local parts if none of the specific ones for a domain are
+           matched. So, the file above could become
+
+</P>
+<PRE>
+             *         yourfriend:a.friend:...
+             x.y.z     creditrepair:^betterlovelife[0-9]+$:&#62;*
+             p.q.r     *</PRE>
+<P>
+           If you are using an lsearch file, putting the * entry first saves a
+           bit of processing.
+
+</P>
+<P>
+       (D) If you want to allow mail to postmaster through the blocks, you can
+           set
+
+</P>
+<PRE>
+             recipients_reject_except = postmaster@your.domain</PRE>
+<P>
+           This overrides any of the policy controls that cause rejection by
+           recipient.
+
+</P>
+<A NAME="SEC161" HREF="FAQ.html#TOC161">Q0802</A>: I don't want to block spam entirely; how can I inspect each message
+       before deciding whether to deliver it or not?
+
+
+<P>
+A0802: This can be done by using a system filter. See the sample configuration
+       F003.
+
+</P>
+<A NAME="SEC162" HREF="FAQ.html#TOC162">Q0803</A>: How can I test that my spam blocks are working?
+
+
+<P>
+A0803: The <B>-bh</B> option allows you to run a testing SMTP session as if from a
+       given IP address. For example,
+
+</P>
+<PRE>
+         exim -bh 192.203.178.39</PRE>
+<P>
+       In addition to the normal SMTP replies, it outputs commentary about
+       which tests have succeeded or failed.
+
+</P>
+<A NAME="SEC163" HREF="FAQ.html#TOC163">Q0804</A>: How can I test that Exim is correctly configured to use the Realtime
+       Blocking List (RBL)?
+
+
+<P>
+A0804: The <B>-bh</B> option allows you to run a testing SMTP session as if from a
+       given address. You need to know a blocked IP address with which to test.
+       Such a testing address is kindly provided by Russell Nelson:
+
+</P>
+<PRE>
+         linux.crynwr.com [192.203.178.39]</PRE>
+<P>
+       You can also send mail to <B><B>nelson@linux.crynwr.com</B></B> from the server
+       whose RBL block you are testing. The robot that receives that email
+       will attempt to send a piece of test email in reply. If your RBL block
+       didn't work, you get a message to that effect. Regardless of whether the
+       RBL block succeeds or not it emails you the results of the SMTP
+       conversation from a host that is not on the RBL, so you can see how your
+       server looks from the view of someone on the RBL.
+
+</P>
+<A NAME="SEC164" HREF="FAQ.html#TOC164">Q0805</A>: How can I use <B>tcpwrappers</B> in conjunction with Exim?
+
+
+<P>
+A0805: Exim's own control facilities can do all that <B>tcpwrappers</B> can do.
+       However, if you are already using <B>tcpwrappers</B> for other things it might
+       be convenient to include Exim controls in the same place.
+
+</P>
+<P>
+       First of all, ensure that Exim is built to call the <B>tcpwrappers</B> library,
+       by including <TT>USE_TCPWRAPPERS=yes</TT> in <B>Local/Makefile</B>. You also need to
+       ensure that the header file <B>tcpd.h</B> is available at compile time, and the
+       <B>libwrap.a</B> library is available at link time, typically by including it in
+       <TT>EXTRALIBS</TT>. You may need to copy these two files from the <B>tcpwrappers</B>
+       build directory to, for example, <B>/usr/local/include</B> and <B>/usr/local/lib</B>,
+       respectively. Then you could reference them by
+
+</P>
+<PRE>
+         CFLAGS=-I/usr/local/include
+         EXTRALIBS=-L/usr/local/lib -lwrap</PRE>
+<P>
+       in <B>Local/Makefile</B>. There are two ways to make use of the functionality,
+       depending on how you have <B>tcpwrappers</B> set up. If you have it set up to
+       use only one file, you ought to have something like:
+
+</P>
+<PRE>
+         /etc/hosts.allow:</PRE>
+<PRE>
+             exim : &#60;client_list&#62;  : &#60;allow_or_deny&#62;</PRE>
+<P>
+         For example:
+
+</P>
+<PRE>
+             exim : LOCAL  192.168.0.  .friendly.domain  special.host : ALLOW
+             exim : ALL                                               : DENY</PRE>
+<P>
+       This allows connections from local hosts (chiefly `localhost'), from
+       the subnet 192.168.0.0/24, from all hosts in <B>*.friendly.domain,</B> and
+       from a specific host called <B>special.host.</B> All other connections are
+       denied. If you have <B>tcpwrappers</B> set up to use two files, use the
+       following:
+
+</P>
+<PRE>
+         /etc/hosts.allow:</PRE>
+<PRE>
+             exim    : &#60;client_list&#62;</PRE>
+<PRE>
+         /etc/hosts.deny:</PRE>
+<PRE>
+             exim    : &#60;client_list&#62;</PRE>
+<P>
+       Read the <TT>hosts_access(5)</TT> man page for more ways of specifying clients,
+       including ports, <B>etc.,</B> and on logging connections.
+
+</P>
+<A NAME="SEC165" HREF="FAQ.html#TOC165">Q0806</A>: How can I get POP-auth-before-relay support in Exim?
+
+
+<P>
+A0806: See <B><A HREF="http://cc.ysu.edu/~doug/exim-pop.tar.Z">http://cc.ysu.edu/~doug/exim-pop.tar.Z</A></B> which has some scripts for
+       this, courtesy of Doug S <B><B>&#60;doug@cc.ysu.edu</B>&#62;.</B>
+
+</P>
+<A NAME="SEC166" HREF="FAQ.html#TOC166">Q0807</A>: I have one or two cases where my machine correctly rejects messages, but
+       the remote machine is quite persistent, and keeps trying over and over.
+
+
+<P>
+A0807: It is an unfortunate fact that a number of SMTP clients, in violation of
+       the SMTP RFC, do not treat a permanent error code that is given after
+       the  MAIL FROM command or the DATA portion of the transaction as a
+       permanent error. Consequently they keep resending the message. Failing
+       checks on a message's headers (the <TT>headers_</TT>... options) necessarily
+       result in an error code after the data has been received.
+
+</P>
+<A NAME="SEC167" HREF="FAQ.html#TOC167">Q0808</A>: I am seeing the error "no valid sender in message headers: return path
+       is &#60;&#62;" in the reject log. Isn't &#60;&#62; a valid return path for error
+       messages?
+
+
+<P>
+A0808: It is indeed valid. The complaint here is about the contents of the
+       message's headers, not the return path. This message has been reworded
+       in later versions of Exim. You must have set the <TT>headers_sender_verify</TT>
+       option. Check the From:, Reply-to: and Sender: headers that were logged
+       with the error. You can use Exim's <B>-bv</B> option to find out why
+       verification of those addresses failed.
+
+</P>
+<A NAME="SEC168" HREF="FAQ.html#TOC168">Q0809</A>: Let's say that we want to run a mail server that does not care if you
+       have proper reverse DNS. If you include <TT>host_reject</TT> lines in your
+       config file, Exim will always reject connections from such hosts. How
+       can this be avoided?
+
+
+<P>
+A0809: This is true only if you have wild-carded host names in  <TT>host_reject</TT>.
+       For complete host names, Exim uses a DNS forward lookup to obtain an IP
+       address to compare. If you are using wild cards of any sort, put
+       <TT>+allow_unknown</TT> as an item in your host list, for example:
+
+</P>
+<PRE>
+         host_reject = +allow_unknown : *.def.zz : *.stu.yy</PRE>
+<P>
+       This will allow any host without reverse DNS to bypass the checks. Note
+       that it means that the owner of <B>abc.def.zz</B> (for example) can trivially
+       get round your block simply by deleting the PTR record for <B>abc.def.zz.</B>
+       If you use +warn_unknown instead of <TT>+allow_unknown</TT>, the action is the
+       same, but every time the exception is invoked, it is logged.
+
+</P>
+<A NAME="SEC169" HREF="FAQ.html#TOC169">Q0810</A>: Is there a way to prevent lookups in the RBL for local hosts?
+
+
+<P>
+A0810: Check out the <TT>rbl_hosts</TT> option.
+
+</P>
+<A NAME="SEC170" HREF="FAQ.html#TOC170">Q0811</A>: How can I set up the <TT>sender_reject</TT> option in my config file so I can
+       reject mail by matching regular expressions?
+
+
+<P>
+A0811: You must either put the regular expressions directly in the option
+       setting, or in a file that is referenced by a plain file name, or use
+       an @@ type of search. If the regular expressions match the domain as
+       well as the local part, then the first two approaches are the only
+       possible ones. For example:
+
+</P>
+<PRE>
+         sender_reject_recipients = ^.*\.spam\.com$ : ^.*@[0-9]+\.com$</PRE>
+<P>
+       or
+
+</P>
+<PRE>
+         sender_reject_recipients = /some/file</PRE>
+<P>
+       Each line of the file is treated as if it were an entry in the list, and
+       must begin with ^ if it is a regular expression. No keys are involved
+       because this is not a lookup,
+
+</P>
+<P>
+       If you are using version 2.10 or later, the first of those regular
+       expressions can be rewritten to execute much more efficiently by
+       using lookbehinds and once-only subpatterns:
+
+</P>
+<PRE>
+         sender_reject_recipients = ^(?&#62;.*$)(?&#60;=\.spam\.com)</PRE>
+<P>
+       See the manual section entitled "Address lists" for a description of the
+       @@ type of split domain/local part lookup. See also 
+        <A HREF="FAQ.html#SEC160">Q0801</A>.
+
+</P>
+<A NAME="SEC171" HREF="FAQ.html#TOC171">Q0812</A>: Normally <TT>sender_reject_recipients</TT> works fine, but addresses that have
+       some uppercase letters in them seem to come through.
+
+
+<P>
+A0812: This should no longer be the case from release 3.00 onwards. Although
+       host and domain names are case-insensitive, the RFCs about mail specify
+       that local parts are case sensitive. When earlier versions of Exim
+       looked up a sender address in <TT>sender_reject_recipients</TT>, they did so
+       using the caseful form, in order to be compliant with the mail RFCs.
+       (In principle, <B>user@domain</B> and <B>USER@domain</B> might be different
+       people. Silly, I know, but that's the rule. It has caused a lot of
+       grief.) However, RFC 2305 (Anti-Spam Recommendations for SMTP MTAs)
+       recommends that address checking in blocking lists should be done
+       caselessly, so Exim now does this by default.
+
+</P>
+<A NAME="SEC172" HREF="FAQ.html#TOC172">Q0813</A>: I want to accept some sender addresses, even though they do not verify.
+       There doesn't seem to be an option for verification exceptions, so how
+       can I do this?
+
+
+<P>
+A0813: Set up a special director or router to ensure that those addresses do
+       verify, using <TT>verify_only</TT> and <TT>verify_sender</TT> so that it is not used
+       during delivery or recipient verification. For example, here is a router
+       which verifies the address <B><B>root@somedomain.com</B>:</B>
+
+</P>
+<PRE>
+         verify_exceptions:
+           driver = domainlist
+           verify_only
+           verify_sender
+           domains = some.domain.com
+           local_parts = root
+           route_list = *</PRE>
+<A NAME="SEC173" HREF="FAQ.html#TOC173">Q0814</A>: We are being plagued by forged mail coming from a number of different
+       hosts and sender addresses. The guy however leaves a fingerprint. The
+       first received line always contains 'Received: from baby'. What is the
+       best suggested way for eliminiating him from our systems?
+
+
+<P>
+A0814: You cannot, unfortunately, prevent the message from getting into your
+       system, because the message has to be read before you can inspect the
+       Received: header. The best you can do is to install a system filter
+       which junks any message containing such a header. Thus the sender still
+       wastes bandwidth and your resources in transporting the message to you,
+       but you just throw it away. A simple system filter that does this is
+
+</P>
+<PRE>
+         # Exim filter
+         if $h_Received: contains "from baby" then seen finish endif</PRE>
+<A NAME="SEC174" HREF="FAQ.html#TOC174">Q0815</A>: I have set <TT>host_accept_relay</TT>, but my host still refuses to relay from
+       matching hosts.
+
+
+<P>
+A0815: (A) Did you remember to HUP or restart the Exim daemon after changing
+           the configuration? You can get information as to what options Exim
+           is checking by using the <B>-bh</B> option to test how it would handle mail
+           from a specific host.
+
+</P>
+<P>
+       (B) Have you used any wild-card host names in <TT>host_accept_relay</TT>? <B>E.g:</B>
+
+</P>
+<PRE>
+             host_accept_relay = *.aaa.bbb</PRE>
+<P>
+           If so, the problem may be that the relevant hosts do not have
+           reverse DNS entries for their IP addresses. In order to match a wild
+           card name, Exim has to look up the calling host's name from its IP
+           address, and if it cannot do so, it takes a hard line by default.
+           Exim processes lists from left to right, and so will attempt a
+           reverse DNS lookup at the first wild-carded entry it reaches. If you
+           have IP addresses in your list, it is best to put them first for
+           this reason. Suppose you had
+
+</P>
+<PRE>
+             host_accept_relay = *.x.y : 10.9.8.7</PRE>
+<P>
+           Then when the host 10.9.8.7 connects, a reverse lookup will still
+           be done, because the first check is against <B>*.x.y.</B> If the lookup
+           fails, relaying is rejected. However, if the list were in the
+           opposite order, the IP check would succeed, and no DNS lookup would
+           be done. See also 
+        <A HREF="FAQ.html#SEC168">Q0809</A>.
+
+</P>
+<A NAME="SEC175" HREF="FAQ.html#TOC175">Q0816</A>: How can I run customized verification checks on incoming addresses?
+
+
+<P>
+A0816: If you can implement your checks in Perl, then you can use Exim's
+       facility for running an embedded Perl interpreter. For example, if you
+       want to run special checks on local addresses, you could install this as
+       your first director:
+
+</P>
+<PRE>
+         private_verify:
+           driver = smartuser
+           condition = ${perl{verify}{$local_part}{$domain}}
+           verify_only</PRE>
+<P>
+       If you want this to be the only means of verification, you can set
+       <TT>no_verify</TT> on all the other directors. Otherwise, if this director fails
+       to verify, the address gets passed on to those that follow.
+
+</P>
+<P>
+       The <TT>verify_sender</TT> and <TT>verify_recipient</TT> options can be used to restrict
+       the director to sender or recipient verification only, and if necessary
+       you could have two different directors, one for senders and one for
+       recipients.
+
+</P>
+<P>
+       If the result of the expansion of <TT>condition</TT> is not "no", "false" or
+       "0", then address verification succeeds, because the director itself
+       matches any address. The expansion of <TT>condition</TT> causes the Perl
+       subroutine called "verify" to be run, with two arguments, the local part
+       and the domain. The subroutine must be provided in Perl code that is
+       referenced by the <TT>perl_startup</TT> option. See the chapter on embedded Perl
+       for details.
+
+</P>
+<P>
+       Remote addresses can be handled in a similar way by using a <B>domainlist</B>
+       router that matches all domains. See also 
+        <A HREF="FAQ.html#SEC172">Q0813</A>.
+
+</P>
+<P>
+       Starting up a Perl interpreter is not cheap. On a busy system you should
+       first make sure that there isn't some way of using Exim's own facilities
+       for doing what you want before going down this road.
+
+</P>
+<A NAME="SEC176" HREF="FAQ.html#TOC176">Q0817</A>: Does Exim apply RBL checks to error messages, those with an envelope
+       sender of "&#60;&#62;" ?
+
+
+<P>
+A0817: Yes, it does, because the RBL check happens immediately on connection,
+       before any commands are passed, and so therefore before it even knows
+       that the envelope sender is "&#60;&#62;".
+
+</P>
+<A NAME="SEC177" HREF="FAQ.html#TOC177">Q0818</A>: I want to be able to set up a list, similar to <TT>sender_reject_recipients</TT>,
+       but with a user-defined message. I believe I have to use a director for
+       this.
+
+
+<P>
+A0818: You can do this using the <TT>prohibition_message</TT> mechanism (see the section
+       entitled "Customizing prohibition messages" in the manual). This avoids
+       having to use a director, and therefore doesn't require you to let the
+       message into your host at all. Use something like this:
+
+</P>
+<PRE>
+         prohibition_message = "\
+           ${if eq {$prohibition_reason}{sender_reject_recipients}\
+           {${lookup{$sender_address}lsearch{/some/file}{$value}}}{}}"</PRE>
+<P>
+       This example looks up a message that is specific to the sender, but you
+       can of course tailor the message any way you like. Vertical bar is
+       treated as a line separator in prohibition texts.
+
+</P>
+<A NAME="SEC178" HREF="FAQ.html#TOC178">Q0819</A>: I want to reject certain sender-recipient combinations, with a specific
+       message for each such combination.
+
+
+<P>
+A0819: That needs a special director, using the "senders" option to predicate
+       it on the sender, and a file of recipients to fail for each sender.
+       Something like this:
+
+</P>
+<PRE>
+         forced_fail:
+           driver = aliasfile
+           senders = sender@domain.com : *@otherdomain.com
+           file = /blocked/${lc:$sender_address}
+           search_type = lsearch</PRE>
+<P>
+       with the files containing lines like
+
+</P>
+<PRE>
+         recipient:  :fail:  message</PRE>
+<P>
+       If you are handling multiple local domains, you may want to set
+       <TT>include_domain</TT> so you can specify fully qualified addresses in the
+       files. If the files get big, an indexed search type such as DBM or cdb
+       should be used.
+
+</P>
+<P>
+       If you want to block an entire domain from a specific sender, you could
+       use this director:
+
+</P>
+<PRE>
+         domain_block:
+           driver = aliasfile
+           senders = dislikedsender@wherever
+           file = /fail/all
+           search_type = lsearch*</PRE>
+<P>
+       with the file containing
+
+</P>
+<PRE>
+         *:   :fail:   message</PRE>
+<P>
+       The message text supplied after :fail: is restricted to a single line.
+       If you want to send several paragraphs of message, instead of using
+       :fail: you could use the <B>aliasfile</B> to pipe the message off so some
+       script which generates a long message and then gives a non-zero return
+       code so that the message gets returned to the sender.
+
+</P>
+<P>
+       In all of these cases you are in trouble if the sender address is bad,
+       because the bounce message you generate will get stuck.
+
+</P>
+<A NAME="SEC179" HREF="FAQ.html#TOC179">Q0820</A>: Will Exim allow me to create a file of regexs and match incoming
+       external email to the list - and if a match is found file the offending
+       message into a special location? Also is it possible to make exim only
+       filter parts of an incoming email - e.g. ignore large MIME attachments
+       for example and only process text/plain?
+
+
+<P>
+A0820: You can do some of this in a system filter. For example:
+
+</P>
+<PRE>
+         if $message_body matches &#60;...some complicated regex...&#62; or
+            $message_body matches &#60;...some other regex...&#62; or
+            $header_from: matches &#60;...regex...&#62; or
+            etc.
+         then
+           save /some/special/file
+         endif</PRE>
+<P>
+       or instead of "save" you could have "deliver" (to some address) or
+       "pipe" (to some script).
+
+</P>
+<P>
+       There isn't any mechanism for ignoring attachments, but <B>$message_body</B>
+       only looks at the first n bytes of the body, where n defaults to 500 but
+       can be changed.
+
+</P>
+<P>
+       A more expensive alternative would be to run a Perl subroutine using the
+       embedded Perl mechanism. If you passed over the message id, the Perl
+       code could read the message files on the spool and implement any
+       algorithm it liked for deciding what should be done.
+
+</P>
+<A NAME="SEC180" HREF="FAQ.html#TOC180">Q0821</A>: I've hacked sendmail to make an ioctl call at the time of the SMTP RCPT
+       command, to check if a user has exceeded their email quota. If they have
+       I issue a temporary failure and a message - can I do this with Exim?
+
+
+<P>
+A0821: This could be done by arranging for a quota check to happen during the
+       verification of the address after RCPT, but without hacking Exim you
+       would have to use the embedded Perl facility to get it to run a Perl
+       script to do the test.
+
+</P>
+<P>
+       If the reason you want to do this is to avoid having messages for over-
+       quota users sitting on your spool for many days, there is an
+       alternative. In Exim you can set up special retry rules for quota
+       excession (what we use is "if mailbox not read for 7 days, bounce
+       immediately, otherwise try every hour for one day, then bounce").
+
+</P>
+<A NAME="SEC181" HREF="FAQ.html#TOC181">Q0822</A>: I'm looking for a rule to reject special unknown recipients.
+
+
+<P>
+A0822: If the messages in question are coming in via SMTP, you can turn on
+       <TT>receiver_verify</TT> (if you haven't already) and arrange for these addresses
+       not to verify. For example, if they are not in your local domains, you
+       could use a router like this:
+
+</P>
+<PRE>
+         verify_check_specials:
+           driver = domainlist
+           condition = "\
+             ${if eq {$local_part@$domain}{account@host.domain}{yes}{no}}"
+           verify_only
+           fail_verify
+           route_list = *</PRE>
+<P>
+       where of course you can extend the <TT>condition</TT> setting to use regular
+       expressions, file lookups, Perl calls, or anything else that is
+       available. The failure of the verification causes an error return to the
+       SMTP RCPT command, so the messages never get into your system. For
+       addresses in your local domains you could use a <B>smartuser</B> director in a
+       similar fashion, but you could also use an alias file with :fail:
+       entries.
+
+</P>
+<P>
+       If you are receiving such messages from the local host, then they are
+       already in the system, and have to be failed locally as part of the
+       delivery process. The :fail: mechanism is the simplest for local
+       addresses. For remote addresses, one possibility would be to use a
+       router with a <TT>condition</TT> setting to send such messages to an autoreply
+       transport that sends back an error message to the sender. See also
+       
+        <A HREF="FAQ.html#SEC185">Q0826</A>.
+
+</P>
+<A NAME="SEC182" HREF="FAQ.html#TOC182">Q0823</A>: I'd like to pass all messages through a virus-scanning system before
+       delivery. Can Exim do this?
+
+
+<P>
+A0823: One way of achieving this is to deliver all messages via a pipe to a
+       checking program that resubmits them for delivery in some private way
+       that can be checked (e.g. on a specific SMTP port, or IP address). One
+       possibility is to use the "received protocol" field that can be set
+       for locally submitted mail via the <B>-oMr</B> command line option. This
+       director sends all messages that are not from the local host and whose
+       received protocol is not "scanned-ok" to the <TT>virus_scan</TT> transport:
+
+</P>
+<PRE>
+         vircheck:
+           driver = smartuser
+           transport = virus_scan
+           condition = "${if or {{eq {$received_protocol}{scanned-ok}} \
+                                 {eq {$sender_host_address}{127.0.0.1}}}\
+                                 {0}{1}}"</PRE>
+<P>
+       A similar router could be used if you want to scan messages for remote
+       addresses. One problem is that this approach scans the message for each
+       recipient, not just once per message.
+
+</P>
+<P>
+       The <TT>virus_scan</TT> transport should be set up to pipe the message to a
+       suitable checking program or script which runs as a trusted user. This
+       can then re-submit the message to Exim, using <B>-oMr</B> to set the received
+       protocol to "scanned-ok", and the <B>-f</B> option to set the correct envelope
+       sender address.
+
+</P>
+<A NAME="SEC183" HREF="FAQ.html#TOC183">Q0824</A>: How can I accomplish this: a message sent from any host must either be
+       sending to a domain in a list (a dbm file) or the sender's address
+       domain must be in the list.
+
+
+<P>
+A0824: First of all, set
+
+</P>
+<PRE>
+         relay_domains = dbm;/the/dbm/file</PRE>
+<P>
+       This allows relaying from any host, provided that the recipient address
+       matches one of the domains in the list. Then set
+
+</P>
+<PRE>
+         host_accept_relay = *
+         sender_address_relay = dbm;/the/dbm/file</PRE>
+<P>
+       This allows relaying from any host (because of the *) to any arbitrary
+       domain, provided that the sender's address matches a domain in the list.
+
+</P>
+<P>
+       WARNING: This setting makes it possible for your host to be used as an
+       open relay by those unscrupulous enough to forge sender addresses. Your
+       host may end up on one of the open relay blocking lists as a result.
+
+</P>
+<A NAME="SEC184" HREF="FAQ.html#TOC184">Q0825</A>: I've set <TT>relay_domains</TT> and <TT>sender_address_relay</TT>, but if <B>user@mydomain</B>
+       tries sending to an arbitrary domain, Exim rejects it.
+
+
+<P>
+A0825: The safest way to control relaying arbitrary domains is by host, not
+       by sender address. If you are able to specify the hosts which your users
+       use, then set <TT>host_accept_relay</TT> to match them. You can then remove the
+       setting of <TT>sender_address_relay</TT>, unless you also want to limit relaying
+       to specific senders.
+
+</P>
+<P>
+       If you want to permit relaying from specific senders on arbitrary hosts,
+       you can set <TT>relay_match_host_or_sender</TT>. This requires that only one of
+       the host or sender address be recognized, instead of both of them.
+
+</P>
+<P>
+       WARNING: This setting makes it possible for your host to be used as an
+       open relay by those unscrupulous enough to forge sender addresses. Your
+       host may end up on one of the open relay blocking lists as a result.
+
+</P>
+<A NAME="SEC185" HREF="FAQ.html#TOC185">Q0826</A>: I set <TT>sender_reject_recipients</TT>, but Exim is not rejecting those
+       recipients.
+
+
+<P>
+A0826: You have misunderstood the option. A setting like that rejects <EM>all</EM> the
+       recipients of an incoming message with that <EM>sender</EM>. To reject a
+       specific recipient in your own domain you can set up an alias like this:
+
+</P>
+<PRE>
+         reject-me:  :fail: mail for reject-me is not acceptable</PRE>
+<P>
+       If you want to reject a recipient that is not in a local domain, one
+       approach is to set up a router to send the address to your directors,
+       and then use an alias file to generate a :fail: message as above.
+       Alternatively, you can use the verification mechanism: see 
+        <A HREF="FAQ.html#SEC181">Q0822</A>.
+
+</P>
+<A NAME="SEC186" HREF="FAQ.html#TOC186">Q0827</A>: I can't find an option to deny "RCPT TO:" addresses.
+
+
+<P>
+A0827: Denying RCPT TO addresses is the job of verifying. You can set up
+       directors and routers that are run only when verifying and not when
+       delivering. This gives you a great deal of flexibility. See 
+        <A HREF="FAQ.html#SEC181">Q0822</A>.
+
+</P>
+<A NAME="SEC187" HREF="FAQ.html#TOC187">Q0828</A>: My problem is that Exim replaces <B>$local_part</B> with an empty string in the
+       system filtering. What's wrong or what did I miss?
+
+
+<P>
+A0828: A message may have many recipients. The system filter is run just once
+       at the start of a delivery attempt. Consequently, it does not make sense
+       to set <B><B>$local_part.</B></B> Which recipient should it be set to? However, you
+       can access all the recipients from a system filter via the variable
+       called <B><B>$recipients.</B></B>
+
+</P>
+<A NAME="SEC188" HREF="FAQ.html#TOC188">Q0829</A>: Using <B>$recipients</B> in a system filter gives me another problem: how can
+       I do a string lookup if <B>$recipients</B> is a list of addresses?
+
+
+<P>
+A0829: Check out section 25 of the filter document ("Testing a list of
+       addresses"). If that doesn't help, you may have to resort to calling an
+       embedded Perl interpreter - but that is expensive.
+
+</P>
+<A NAME="SEC189" HREF="FAQ.html#TOC189">Q0830</A>: Is there a way to configure Exim to reject mail to a certain local host?
+
+
+<P>
+A0830: No, only to certain domains. Use a configuration like this:
+
+</P>
+<PRE>
+         receiver_verify
+         local_domains = rejected.domain : &#60;other local domains&#62;</PRE>
+<P>
+       with the first director as
+
+</P>
+<PRE>
+         reject_domains:
+           driver = smartuser
+           domains = rejected.domain
+           verify_only
+           fail_verify</PRE>
+<A NAME="SEC190" HREF="FAQ.html#TOC190">Q0831</A>: Exim sometimes rejects messages with bad senders after the DATA and
+       sometimes after the MAIL command. What is the difference?
+
+
+<P>
+A0831: The first time Exim encounters a particular bad sender, it rejects the
+       message after the data has been received, so that it can log the
+       headers. If the same sender re-appears within 24 hours, Exim assumes
+       that the remote host has (in violation of RFC 821) not interpreted the
+       previous 550 error code correctly, so this time it rejects the MAIL
+       command. Some hosts don't even managed to handle that, so if the same
+       sender turns up for a third time within 24 hours, Exim accepts MAIL, but
+       rejects every RCPT command instead.
+
+</P>
+<A NAME="SEC191" HREF="FAQ.html#TOC191">Q0832</A>: How can I get Exim to remove attachments from messages?
+
+
+<P>
+A0832: (A) The cleanest way is to check for the existence of a "Content-type"
+           header line, and route messages containing it down a pipe to some
+           other program that strips the attachments and re-submits the message
+           to Exim. Alternatively, a transport filter can be used to do the
+           job, as described in C028.
+
+</P>
+<P>
+       (B) A somewhat more hairy way is to use embedded Perl from a system
+           filter to truncate the message's data file directly, and then use
+           the "headers remote" filter command to get rid of the associated
+           headers.
+
+</P>
+<A NAME="SEC192" HREF="FAQ.html#TOC192">Q0833</A>: I ran a relay test against my host and it failed with an address
+       containing a %, though I don't have <TT>percent_hack_domains</TT> set. Is Exim
+       broken? This is what the tester said:
+
+
+<PRE>
+         Relay test 6
+         &#62;&#62;&#62; RSET
+         &#60;&#60;&#60; 250 Reset OK
+         &#62;&#62;&#62; MAIL FROM:&#60;spamtest@example.com&#62;
+         &#60;&#60;&#60; 250 &#60;spamtest@example.com&#62; is syntactically correct
+         &#62;&#62;&#62; RCPT TO:&#60;relaytest%mail-abuse.org@example.com&#62;
+         &#60;&#60;&#60; 250 &#60;relaytest%mail-abuse.org@example.com&#62; is syntactically correct
+         Relay test result
+         Uh oh, host appeared to accept a message for relay.
+         The host may reject this message internally, however</PRE>
+<P>
+A0833: This does not prove that your host is open for relaying. Notice the
+       wording of the last two sentences: "appeared to accept" and "may reject
+       internally". Assuming that your Exim configuration is correct, Exim will
+       discover that the local part <B>"relaytest%mail-abuse.org"</B> is not valid on
+       your host, and it will bounce the message.
+
+</P>
+<P>
+       Why doesn't it reject the RCPT TO command? Answer: because you have not
+       set <TT>receiver_verify</TT> in your configuration file, or you have excluded
+       these particular sender or recipient domains from receiver verification.
+
+</P>
+<BR><H2><A NAME="SEC193" HREF="FAQ.html#TOC193">9. MAJORDOMO
+
+</A></H2>
+<A NAME="SEC194" HREF="FAQ.html#TOC194">Q0901</A>: How do I set up Majordomo to work with Exim?
+
+
+<P>
+A0901: Users have found several ways of setting up Exim for use with Majordomo.
+       There's a web page at
+
+</P>
+<PRE>
+         <A HREF="http://www.netmaster.ca/exim/majordomo.html">http://www.netmaster.ca/exim/majordomo.html</A></PRE>
+<P>
+       which shows one way to do it, and discusses some of the issues. The
+       sample configuration C018 is another approach which automates a lot of
+       the functions based on whether the files or directories exist. Only
+       three aliases per list are needed.
+
+</P>
+<P>
+       Somewhere in the Majordomo docs or FAQ it mentions using batchmail or
+       other additional programs to improve the performance of large lists.
+       They are not needed with Exim, and their use can actually make things
+       worse. However, it's a good idea to set <TT>remote_max_parallel</TT> to a value
+       greater than 1 in the Exim configuration.
+
+</P>
+<A NAME="SEC195" HREF="FAQ.html#TOC195">Q0902</A>: I have set <B>$mailer</B> in <B>majordomo.cf,</B> but it still isn't setting the
+       sender correctly in the messages it sends.
+
+
+<P>
+A0902: Make sure you have got the quoting correct in the <B>$mailer</B> setting. For
+       example,
+
+</P>
+<P>
+       <B>$mailer</B> = "$sendmail_command <B>-oi</B> <B>-oee</B> <B><B>-f$sender\@lists.mydomain.de</B>";</B>
+
+</P>
+<P>
+       is not correct. It needs three backslashes, not one, and the $ at the
+       start of <B>$sender</B> has to be escaped with a backslash.
+
+</P>
+<A NAME="SEC196" HREF="FAQ.html#TOC196">Q0903</A>: I'm trying to set up majordomo, but I'm getting a "wrong mode" error
+       when I try to send it mail. The panic log entry reads:
+
+
+<P>
+       1999-01-05 11:23:34 0zxZGY-0000vB-00 <TT>majordomo_aliases</TT> director:
+       <B><B>/var/lib/majordomo/lists/lists.aliases</B></B> (lsearch lookup): wrong mode
+
+</P>
+<P>
+A0903: Check the mode of <B><B>/var/lib/majordomo/lists/lists.aliases</B></B> and compare it
+       with the setting of the modemask option in the <TT>majordomo_aliases</TT>
+       director. This option specifies bits which must not be set for the alias
+       file, and it defaults to 022.
+
+</P>
+<A NAME="SEC197" HREF="FAQ.html#TOC197">Q0904</A>: I'm getting return code 9 from <B><B>/home/majordomo/majordomo-1.94.4/wrapper</B></B>
+       when it is passed a message from Exim.
+
+
+<P>
+A0904: A problem like this turned out to be the Perl version that came with
+       RedHat 5.2. Rebuilding Perl 5.005x solved it.
+
+</P>
+<BR><H2><A NAME="SEC198" HREF="FAQ.html#TOC198">10. REWRITING
+
+</A></H2>
+<A NAME="SEC199" HREF="FAQ.html#TOC199">Q1001</A>: How can I get Exim to strip the hostname from the sender's address?
+
+
+<P>
+A1001: If you set up a rewriting rule in the following form:
+
+</P>
+<PRE>
+          *@*.your.domain  $1@your.domain</PRE>
+<P>
+       then Exim will rewrite all addresses in the envelope and the headers,
+       removing anything between "@" and <B>"your.domain".</B> This applies to all
+       messages that Exim processes. If you want to rewrite sender addresses
+       only, the the rule should be
+
+</P>
+<PRE>
+          *@*.your.domain  $1@your.domain  Ffrs</PRE>
+<P>
+       This applies the rule only to the envelope "From" address and to the
+       From:, Reply-to:, and Sender: headers.
+
+</P>
+<A NAME="SEC200" HREF="FAQ.html#TOC200">Q1002</A>: I have Exim configured to remove the hostname portion of the domain on
+       outgoing mail, and yet the hostname is present when the mail gets
+       delivered.
+
+
+<P>
+A1002: Check the DNS record for your domain. If the MX record points to a CNAME
+       record instead of to an A record, MTAs are liable to rewrite addresses,
+       changing your domain name to its "canonical" form, as obtained from the
+       CNAME record.
+
+</P>
+<A NAME="SEC201" HREF="FAQ.html#TOC201">Q1003</A>: I want to rewrite local addresses in mail that goes to the outside
+       world, but not for messages that remain within the local intranet.
+
+
+<P>
+A1003: Exim wasn't really designed to handle this kind of split world. Because
+       it keeps only one copy of a message, and does all the rewriting at the
+       time of reception, a standard configuration cannot handle this kind of
+       rewriting in a message that has both internal and external recipients.
+
+</P>
+<P>
+       However, what can be done is to split off a copy of the message to be
+       sent to all external recipients, and do the rewriting on that. This can
+       be achieved by running two differently-configured versions of Exim,
+       either on a single host, or on two different hosts. If you have a
+       gateway or firewall machine, that is the natural place to run the
+       rewriting version.
+
+</P>
+<P>
+       On a single machine, the following is one way of handling this:
+
+</P>
+<P>
+       (1) Set up the normal configuration (in the configuration file whose
+           name is screwed into the binary) such that it does local deliveries
+           as required, but forwards a copy of the message for non-local
+           recipients to a different incarnation of Exim via a private SMTP
+           port. For example, use this transport and router:
+
+</P>
+<PRE>
+             # Transport to send SMTP using port 26
+             internal_smtp:
+               driver = smtp
+               service = 26</PRE>
+<PRE>
+             # Router to send everything the internal_smtp transport
+             pass_remotes:
+               driver = domainlist
+               transport = internal_smtp
+               route_list = * localhost byname
+               self = send</PRE>
+<P>
+           This should be the only router. Because of the <TT>self = send</TT>
+           setting, Exim will transport the messages, even though it knows it
+           is going to the local host.
+
+</P>
+<P>
+       (2) Set up a different configuration file for the rewriting version of
+           Exim. This need do no local deliveries, so it needs no local
+           domains or directors, and as it accepts mail only from the local
+           host, there is no need for any spam-blocking or other policy
+           controls. However, it does need to have its own spool area. The main
+           part of the configuration could be like this:
+
+</P>
+<PRE>
+             local_domains =
+             local_interfaces = 127.0.0.1
+             host_reject = !127.0.0.1
+             spool_directory = /var/spool/exim-external
+             end</PRE>
+<P>
+           Note the use of a negated item for <TT>host_reject</TT>, causing rejection of
+           SMTP calls from all but the local host.
+
+</P>
+<P>
+           The directors section can be completely empty (apart from the line
+           saying "end"), while the routers section should be as in a normal
+           configuration, as it is going to control external delivery.
+
+</P>
+<P>
+           The rule(s) for rewriting your internal addresses into external ones
+           should be in this configuration. This is one example of what might
+           be done:
+
+</P>
+<PRE>
+           *@*.your.domain  "\
+              ${lookup{$1}cdb{/etc/$2/mail.handles.cdb}{$value}fail}"</PRE>
+<P>
+           which looks up each local part in a per-host file to obtain the
+           externally-visible address, including (in this example) the domain.
+
+</P>
+<P>
+       (3) You have to arrange for a daemon to be listening on port 26, and to
+           be using the alternate configuration file. It is necessary to do
+           this as root so that Exim retains its privilege after reading a
+           non-standard configuration. A command such as
+
+</P>
+<PRE>
+             exim -C /etc/exim-configure2 -bd -oX 26</PRE>
+<P>
+           could be used in a suitable system start-up file. Alternatively you
+           could set up <B>inetd</B> to run Exim with the <B>-C</B> option for incoming
+           connections on port 26.
+
+</P>
+<P>
+       The net result of all of this is that when a message has one or more
+       external recipients, a copy of it is sent via port 26 to the second
+       version of Exim, which rewrites any internal addresses and does the
+       external deliveries. The cost of this is that the message has to be
+       copied and spooled twice, and you have two different Exim queues to
+       manage. Note that if the "external" Exim has to send a delivery failure
+       message, it will use the rewritten sender address.
+
+</P>
+<A NAME="SEC202" HREF="FAQ.html#TOC202">Q1004</A>: I'm using this rewriting rule to change login names into "friendly"
+       names, but if mail comes in for an upper case login name, it doesn't
+       get rewritten.
+
+
+<PRE>
+        *@my.domain     ${lookup{$1}dbm{/usr/lib/exim/longforms}\
+                        {$value}fail}@my.domain bcfrtFT</PRE>
+<P>
+       The longforms database has entries of the form:
+
+</P>
+<PRE>
+         ano23: A.N.Other</PRE>
+<P>
+A1004: Replace <B>$1</B> in your rule by <B>${lc:$1}</B> to force the local part to lower
+       case before it is used as a lookup key.
+
+</P>
+<A NAME="SEC203" HREF="FAQ.html#TOC203">Q1005</A>: Is it possible to completely fail a message if the rewrite rules fail?
+
+
+<P>
+A1005: It depends on what you mean by "fail a message" and what addresses you
+       are rewriting. If you are rewriting recipient addresses for your local
+       domain, you can do:
+
+</P>
+<PRE>
+        *@dom.ain  ${lookup{$1}dbm{/wher/ever}{$value}{failaddr}}  Ehq</PRE>
+<P>
+       and in your alias file put something like
+
+</P>
+<PRE>
+        failaddr:   :fail: Rewriting failed.</PRE>
+<P>
+       This fails a single recipient - others are processed independently.
+
+</P>
+<A NAME="SEC204" HREF="FAQ.html#TOC204">Q1006</A>: I'm using <B>$domain</B> as the key for a lookup in a rewriting rule, but its
+       contents are not being lowercased. Aren't domains supposed to be handled
+       caselessly?
+
+
+<P>
+A1006: The value of <B>$domain</B> is the actual domain that appears in the address.
+       It could of course be lower cased, but I know that would cause some
+       unhappiness, because some people have mixed-case domain names which look
+       silly if the case is changed. Thus, one wants to preserve the case in
+       rewrites such as
+
+</P>
+<PRE>
+         *@*.TheRap.com   &#60;something&#62;@$domain</PRE>
+<P>
+       (not the best example) because "therap" doesn't look like two words. I
+       know it seems trivial, but it is important to some people - especially
+       if by some unfortunate accident the lowercased word is something
+       indecent.
+
+</P>
+<P>
+       You can trivally force lower casing by means of the <B>${lc:</B> operator.
+       Instead of "$domain" write "${lc:$domain}".
+
+</P>
+<A NAME="SEC205" HREF="FAQ.html#TOC205">Q1007</A>: I want to rewrite local sender addresses depending on the domain of the
+       recipient.
+
+
+<P>
+A1007: In general, this is not possible, because a message may have more than
+       one recipient and Exim keeps just a single copy of each message. You can
+       do an incomplete job by using a regular expression match in a rewrite
+       rule to test, for example, the contents of the To: header. This would
+       work except in cases of multiple recipients. See also 
+        <A HREF="FAQ.html#SEC201">Q1003</A>.
+
+</P>
+<BR><H2><A NAME="SEC206" HREF="FAQ.html#TOC206">11. HEADERS
+
+</A></H2>
+<A NAME="SEC207" HREF="FAQ.html#TOC207">Q1101</A>: I would like add some custom headers to selected outgoing mail based on
+       a specific domain and the subject line.
+
+
+<P>
+A1101: To the <TT>remote_smtp</TT> transport, add something like
+
+</P>
+<PRE>
+         headers_add = "${if and{\
+                       {eq{$domain}{spec.dom}}\
+                       {matches{$h_subject:}{whatever}}}\
+                       {Content-Type: text/html; charset=\"us-ascii\"} fail }"</PRE>
+<P>
+       This example shows a Content-Type header, but you can have anything you
+       like, and multiple headers can be inserted by using \n to separate them.
+
+</P>
+<A NAME="SEC208" HREF="FAQ.html#TOC208">Q1102</A>: Is it possible to have Exim add a header to only certain <TT>local_parts</TT> of
+       outgoing mail?
+
+
+<P>
+A1102: Only if you arrange for each such local part to receive its own private
+       copy of the mail. See <TT>max_rcpt</TT> in the SMTP transport. Then you could use
+       conditions in an expansion string to add or not add a header.
+
+</P>
+<A NAME="SEC209" HREF="FAQ.html#TOC209">Q1103</A>: How can I remove some part of the Received: header?
+
+
+<P>
+A1103: Set <TT>received_header_text</TT>.
+
+</P>
+<A NAME="SEC210" HREF="FAQ.html#TOC210">Q1104</A>: How I can insert the PGP header line using exim filters?
+
+
+<P>
+A1104: You can't insert headers in a user filter. A system filter can do so,
+       but the inserted lines then are included for all recipients.
+
+</P>
+<BR><H2><A NAME="SEC211" HREF="FAQ.html#TOC211">12. FETCHMAIL
+
+</A></H2>
+<A NAME="SEC212" HREF="FAQ.html#TOC212">Q1201</A>: When I run fetchmail, I get the error "SMTP listener doesn't like
+       recipient address <B><I>xxx</I>@localhost</B>".
+
+
+<P>
+A1201: Put "localhost" in a list of local domains, that is, add it to the
+       <TT>local_domains</TT> option in your Exim configuration file.
+
+</P>
+<A NAME="SEC213" HREF="FAQ.html#TOC213">Q1202</A>: Fetchmail is passing on bounce messages to Exim with the sender address
+       set to <B><B>&#60;@some.domain</B>&#62;</B> which causes Exim to complain, because there is no
+       local part.
+
+
+<P>
+A1202: This was a fetchmail problem which has been fixed. Ideally, you should
+       upgrade to the current fetchmail release. If you cannot do this, there
+       is some Exim magic that might help. The 'S' rewriting flag allows
+       rewriting of envelope addresses to be done as soon as they are received
+       in the SMTP protocol, before any kind of checking or other processing is
+       done. This is specifically provided for installations that have to cope
+       with mangled addresses coming in over SMTP.
+
+</P>
+<A NAME="SEC214" HREF="FAQ.html#TOC214">Q1203</A>: I'm currently using Exim with fetchmail and I'd like to use the RBL on
+       Exim, but will it work? Do I need to configure fetchmail any particular
+       way? As far as Exim knows, all mail is coming from 127.0.01. Will it
+       check the source address against RBL? Or will it check the From: header?
+
+
+<P>
+A1203: It will check 127.0.0.1 (not very useful). The point of the RBL is to
+       keep messages from black-listed hosts out of your machine. If you are
+       using fetchmail, you have got the messages into your machine before you
+       approach Exim. That kind of defeats the purpose of the RBL. The right
+       way to do this would be for the host from which you fetchmail to do the
+       RBL checking and insert some kind of warning header for you to test, as
+       Exim does if you run RBL checks in warning mode.
+
+</P>
+<BR><H2><A NAME="SEC215" HREF="FAQ.html#TOC215">13. PERL
+
+</A></H2>
+<A NAME="SEC216" HREF="FAQ.html#TOC216">Q1301</A>: Exim built with Perl support exits with the error message <B>"./exim:</B> can't
+       load library <B>'libperl.so'".</B>
+
+
+<P>
+A1301: If you are using BSDI, see 
+        <A HREF="FAQ.html#SEC270">Q9401</A>.
+
+</P>
+<A NAME="SEC217" HREF="FAQ.html#TOC217">Q1302</A>: Exim built with Perl support exits with several error messages of the
+       form "undefined reference to `PL_stack_sp'".
+
+
+<P>
+A1302: This has been seen on FreeBSD systems that had two different versions of
+       Perl installed, the older with an <B>a.out</B> library and the newer with an
+       ELF library. Ensure that the older package is removed.
+
+</P>
+<BR><H2><A NAME="SEC218" HREF="FAQ.html#TOC218">14. DIAL-UP
+
+</A></H2>
+<A NAME="SEC219" HREF="FAQ.html#TOC219">Q1401</A>: How can I arrange for mail to other hosts on my local network to be
+       delivered when I'm not connected to the Internet?
+
+
+<P>
+A1401: Use the <TT>queue_remote_domains</TT> option to control which domains are held
+       on the queue for later delivery. For example,
+
+</P>
+<PRE>
+         queue_remote_domains = ! *.localnet</PRE>
+<P>
+       allows delivery to domains ending in .localnet, while queueing all the
+       others.
+
+</P>
+<A NAME="SEC220" HREF="FAQ.html#TOC220">Q1402</A>: I have a dial-up machine, and I use the <TT>queue_smtp_domains</TT> option so
+       that remote mail only goes out when I do a queue run. However, any email
+       I send with an address <B><B>&#60;anything&#62;@aol.com</B></B> is returned within about 15
+       minutes saying 'retry time exceeded', and all addresses are affected.
+
+
+<P>
+A1402: (A) You should be using <TT>queue_remote_domains</TT> rather than <TT>queue_smtp_</TT>
+       domains. With the latter, Exim is trying to route the addresses, which
+       involves a DNS lookup. This is presumably timing out, causing a retry
+       time to be set for the domain, and somehow a valid lookup never happened
+       before the maximum retry time (default of 4 days) passed. Hence the
+       bounce. The fact that it is <B>aol.com</B> is not relevant. You should probably
+       also be using <B>-qq</B> to do your queue run rather than <B><B>-q.</B></B>
+
+</P>
+<P>
+       (B) An alternative approach if you are sending all your outgoing mail to
+       the same smart host is to use a single router like this:
+
+</P>
+<PRE>
+        route_append:
+        driver = domainlist
+        transport = remote_smtp
+        route_list = "* smarthost.isp.net byname"</PRE>
+<P>
+       and put the address of the smart host in <B>/etc/hosts</B>, so that it can be
+       found without the need of a DNS lookup. Then you can use <TT>queue_smtp_</TT>
+       domains so that Exim does the routing for every message, but doesn't try
+       to deliver it. See also 
+        <A HREF="FAQ.html#SEC221">Q1403</A>.
+
+</P>
+<A NAME="SEC221" HREF="FAQ.html#TOC221">Q1403</A>: How should Exim be configured when it is acting as a temporary storage
+       system for a domain on a dial-up host?
+
+
+<P>
+A1403: Exim isn't really designed for this, but... The lowest-numbered MX
+       record for the domain should be pointing to your host. You should set a
+       large retry time for that domain, so that Exim doesn't keep trying to
+       deliver when the host is offline. When the host comes online, the
+       waiting messages have to be kicked somehow. This can be done by calling
+       Exim with the <B>-R</B> option, or via the SMTP ETRN command. This works
+       provided the number of messages is low. If you are handling lots of
+       mail, keeping messages waiting for their host to connect and those that
+       are having delivery problems to remote hosts all in the same queue
+       doesn't work so well. It is better in this case to get Exim to deliver
+       the mail for the dial-in hosts into some local files which then get
+       transmitted by other software when the host connects. See the manual
+       chapter entitled "Intermittently connected hosts" and also 
+        <A HREF="FAQ.html#SEC239">Q5014</A> and
+       
+        <A HREF="FAQ.html#SEC136">Q0521</A>.
+
+</P>
+<A NAME="SEC222" HREF="FAQ.html#TOC222">Q1404</A>: I have <TT>queue_remote_domains</TT> or <TT>queue_smtp_domains</TT> set, and use <B>-qf</B> to
+       force delivery of waiting mail when I dial in. How can I arrange for any
+       new messages that arrive while I'm connected to be delivered immediately?
+
+
+<P>
+A1404: (A) Instead of <TT>queue_remote_domains</TT> or <TT>queue_smtp_domains</TT>, use the
+       <TT>queue_only_file</TT> option. This causes messages to be queued only if a
+       particular file exists. The word "remote" or "smtp" before the file name
+       controls which type of queueing is used. For example:
+
+</P>
+<PRE>
+         queue_only_file = remote/etc/present/when/not/connected</PRE>
+<P>
+       Then, in the scripts which are run when you connect and disconnect,
+       arrange to remove the file after connection, and create it just before
+       disconnection.
+
+</P>
+<P>
+       (B) An alternative is to set <TT>hold_domains</TT> to point to a file lookup and
+       switch that file appropriately.
+
+</P>
+<BR><H2><A NAME="SEC223" HREF="FAQ.html#TOC223">20. MILLENNIUM
+
+</A></H2>
+<A NAME="SEC224" HREF="FAQ.html#TOC224">Q2000</A>: Are there any Y2K issues with Exim?
+
+
+<P>
+A2000: The author of Exim believes that it is Y2K-compliant, as long as the
+       underlying operating system and C library are. Exim does not parse dates
+       or times at all. Internally, it makes some use of binary timestamps in
+       Unix format (number of seconds since 1-Jan-1970) and uses C library
+       services to convert these to printing forms (e.g. for logging). The
+       printing forms all use 4-digit years. Some people have tried various
+       tests. No problems have been reported, but details of what tests have
+       been done are not available.
+
+</P>
+<BR><H2><A NAME="SEC225" HREF="FAQ.html#TOC225">50. MISCELLANEOUS
+
+</A></H2>
+<A NAME="SEC226" HREF="FAQ.html#TOC226">Q5001</A>: What does the error "Unable to get interface configuration: 22 Invalid
+       argument" mean?
+
+
+<P>
+A5001: This is an error that occurs when Exim is trying to find out the all the
+       IP addresses on all of the local host's interfaces. If you have lots of
+       virtual interfaces, this can occur if there are more than around 250 of
+       them. The solution is to set the option <TT>local_interfaces</TT> to list just
+       those IP addresses that you want to use for making and receiving SMTP
+       connections.
+
+</P>
+<A NAME="SEC227" HREF="FAQ.html#TOC227">Q5002</A>: How can I arrange to allow a limited set of users to perform a limited
+       set of Exim administration functions? I don't want to put them all in
+       the exim group.
+
+
+<P>
+A5002: See <B><A HREF="http://www.chiark.greenend.org.uk/~ian/userv/.">http://www.chiark.greenend.org.uk/~ian/userv/.</A></B> Using userv you can
+       arrange (for example) for certain users to be able to invoke mailq or
+       runq or other preset commands as exim (or any other user, as configured)
+       with only userv configuration. If you want to check the particular Exim
+       options available you can easily do it with shell or Perl scripts and
+       userv configuration, and provided you know how to do argument
+       `unparsing' properly in shell or Perl it will be secure.
+
+</P>
+<A NAME="SEC228" HREF="FAQ.html#TOC228">Q5003</A>: How can I test for a message's size being greater or less than a given
+       value in an expansion string?
+
+
+<P>
+A5003: This isn't straightforward in versions of Exim prior to 2.10, because
+       there were no arithmetic operators in expansion strings. In version
+       2.10 or later you can write, straightforwardly,
+
+</P>
+<PRE>
+         ${if &#62; {$message_size}{10K} {yes} {no}}</PRE>
+<P>
+       In earlier versions, low cunning can be used to achieve certain
+       kinds of test. For example, to test if the message size is less than
+       or equal to 1000000:
+
+</P>
+<PRE>
+       ${if eq{${expand:\$\{substr_-1000000_$message_size:x\}}} {} {yes} {no}}</PRE>
+<A NAME="SEC229" HREF="FAQ.html#TOC229">Q5004</A>: I want to "tail" the Exim log, but I have a number of other logs I also
+       want to "tail", and the number of tailing windows is getting to be a
+       nuisance.
+
+
+<P>
+A5004: Look for a program called 'xtail' (despite its name, it's not an
+       X-windows application). It allows you to do multiple tails, even of
+       entire directories.
+
+</P>
+<A NAME="SEC230" HREF="FAQ.html#TOC230">Q5005</A>: I would like to have Exim log information written to syslog.
+
+
+<P>
+A5005: Support for this is available from version 3.10 onwards.
+
+</P>
+<A NAME="SEC231" HREF="FAQ.html#TOC231">Q5006</A>: What does the error "Failed to create spool file" mean?
+
+
+<P>
+A5006: Exim has been unable to create a file in its spool area in which to
+       store an incoming message. This is most likely to be either a
+       permissions problem in the file hierarchy, or a problem with the uid
+       under which Exim is running, though it could be something more drastic
+       such as your disc being full. Check that you have defined the spool
+       directory correctly by running
+
+</P>
+<PRE>
+         exim -bP spool_directory</PRE>
+<P>
+       and examining the output. Check the mode of this directory. It should
+       look like this, assuming you are running Exim as user `exim':
+
+</P>
+<PRE>
+         drwxr-x---   6 exim  exim      512 Jul 16 12:29 /var/spool/exim</PRE>
+<P>
+       If there are any subdirectories already in existence, they should have
+       the same permissions, owner, and group. Check also that you haven't got
+       incorrect permissions on superior directories (for example, <B>/var/spool</B>).
+       Check that you have set up the exim binary to be setuid root. It should
+       look like this:
+
+</P>
+<PRE>
+         -rwsr-xr-x   1 root     xxx       502780 Jul 16 14:16 exim</PRE>
+<P>
+       Note that it is not just the owner that must be root, but also the third
+       permission must be "s" rather than "x".
+
+</P>
+<A NAME="SEC232" HREF="FAQ.html#TOC232">Q5007</A>: Exim keeps crashing with segmentation errors (signal 11 or 139).
+
+
+<P>
+A5007: This might be a problem with the db library. See 
+        <A HREF="FAQ.html#SEC120">Q0505</A>.
+
+</P>
+<A NAME="SEC233" HREF="FAQ.html#TOC233">Q5008</A>: Exim's databases keep getting corrupted.
+
+
+<P>
+A5008: See 
+        <A HREF="FAQ.html#SEC120">Q0505</A>.
+
+</P>
+<A NAME="SEC234" HREF="FAQ.html#TOC234">Q5009</A>: I've been using an autoreply director to try and mimic a bounce message,
+       but I can't get it to have an envelope from of &#60;&#62;.
+
+
+<P>
+A5009: You haven't, by any chance, put "exim" in the list of <TT>never_users</TT>, have
+       you?
+
+</P>
+<A NAME="SEC235" HREF="FAQ.html#TOC235">Q5010</A>: I see entries in the log that mention two different IP addresses for the
+       same connection. Why is this? For example:
+
+
+<PRE>
+         H=tip-mp8-ncs-13.stanford.edu ([36.173.0.189]) [36.173.0.156]</PRE>
+<P>
+A5010: The actual IP address from which the call came is the final one.
+       Whenever there's something in parentheses in a host name, it is what the
+       host quoted as the domain part of an SMTP HELO or EHLO command. So in
+       this case, the client, despite being 36.173.0.156, issued the command
+
+</P>
+<PRE>
+         HELO [36.173.0.189]</PRE>
+<P>
+       when it sent your server the message. This is, of course, very
+       misleading.
+
+</P>
+<A NAME="SEC236" HREF="FAQ.html#TOC236">Q5011</A>: How can I persuade Exim to accept ETRN commands without the leading
+       # character?
+
+
+<P>
+A5011: Set the option
+
+</P>
+<PRE>
+         smtp_etrn_command = /usr/lib/sendmail -R $domain</PRE>
+<P>
+       This causes Exim to run that command, with <B>$domain</B> replaced by the
+       argument of ETRN. The default action of Exim is to require the # sign
+       in order to be RFC-compliant, and to run the equivalent of
+
+</P>
+<PRE>
+         smtp_etrn_command = /usr/lib/sendmail -R ${substr_1:$domain}</PRE>
+<P>
+       which uses the argument without the leading # as the value for the <B>-R</B>
+       option. You aren't restricted to running Exim with the <B>-R</B> option, of
+       course. You can specify any command you like, with any number of
+       arguments. In particular, you can pass over the IP address of the caller
+       via <B><B>$sender_host_address.</B></B> However, if you make use of expansion strings
+       in the arguments, each one must be entirely contained in a single
+       argument. For example, if you want to remove the first character of the
+       ETRN argument when it is @ or #, you could use
+
+</P>
+<PRE>
+         smtp_etrn_command = "/usr/lib/sendmail -R \
+           \"${if match {$domain}{^[@#]}{${substr_1:$domain}}{$domain}}\""</PRE>
+<P>
+       The internal quotes are necessary because of the white space inside the
+       expansion string.
+
+</P>
+<P>
+       If you use <TT>smtp_etrn_command</TT> to run something other than Exim with the
+       <B>-R</B> option, you must disable <TT>smtp_etrn_serialize</TT>, because otherwise the
+       serialization lock (which is set by default) never gets removed.
+
+</P>
+<A NAME="SEC237" HREF="FAQ.html#TOC237">Q5012</A>: I've recently noticed that emails I send with a Bcc: line are being
+       delivered to their final destination with the Bcc: line still present.
+
+
+<P>
+A5012: Exim removes Bcc lines only if you call it with the <B>-t</B> option (i.e.
+       when it is acting partly as an MUA). It does not remove Bcc lines that
+       are present in incoming SMTP mail or command-line mail that does not
+       use <B><B>-t.</B></B> Indeed, it should not remove them. From RFC 822:
+
+</P>
+<P>
+         5.3.  BCC / RESENT-BCC
+
+</P>
+<P>
+         This field contains the identity of additional recipients of the
+         message. The contents of this field are not included in copies of the
+         message sent to the primary and secondary recipients. Some systems may
+         choose to include the text of the "Bcc" field only in the author(s)'s
+         copy, while others may also include it in the text sent to all those
+         indicated in the "Bcc" list.
+
+</P>
+<P>
+       Only the initiating software (i.e. the MUA) can tell what to do with
+       Bcc; any MTA software has to leave it alone.
+
+</P>
+<A NAME="SEC238" HREF="FAQ.html#TOC238">Q5013</A>: I used gv <B>v3.5.8</B> (ghostview) to try printing <B>spec.ps.</B> After every
+       printed page, the printer ejects a blank sheet. Is this something to do
+       with using "letter" rather than A4 paper?
+
+
+<P>
+A5013: This seems to be an effect of using ghostview. Although the PostScript
+       is generated for A4 pages, the size of the page images is such that they
+       should fit on a letter page (they are shorter than would normally be
+       used on A4 paper). If the PostScript file is sent directly to a
+       PostScript printer, there is no problem. An alternative is to get hold
+       of the "psutils" toolset, which is available from
+
+</P>
+<PRE>
+         <A HREF="ftp://ftp.dcs.ed.ac.uk/pub/psutils/psutils.tar.gz">ftp://ftp.dcs.ed.ac.uk/pub/psutils/psutils.tar.gz</A></PRE>
+<P>
+       It contains utilities for extracting pages (which can be useful for
+       double-sided printing) and for resizing pages. If you resize from A4 to
+       letter the text shrinks a bit, but should then be printable via
+       ghostview.
+
+</P>
+<A NAME="SEC239" HREF="FAQ.html#TOC239">Q5014</A>: I would like to have a separate queue per domain for hosts which dial
+       in to collect their mail.
+
+
+<P>
+A5014: Exim isn't really designed for this kind of operation. The only way to
+       do this would be to cause it to send those messages to a differently
+       configured version of Exim with its own spool area. This could be done
+       via a pipe or SMTP to a private port. The main Exim, listening on port
+       25, would then be configured to run an appropriate command to prod one
+       of the others when it received ETRN, by means of the <TT>etrn_command</TT> option.
+
+</P>
+<P>
+       You could probably manage this with a single Exim binary and a number of
+       different configuration files, passed to the special versions using the
+       <B>-C</B> option. For this application they could all run as exim, since no
+       root privilege would be needed.
+
+</P>
+<P>
+       An alternative approach would be to get Exim to deliver mail for such
+       hosts in batch SMTP format into some directory, and have the ETRN run
+       something to pass such messages to the dialled-in host. See also 
+        <A HREF="FAQ.html#SEC118">Q0503</A>
+       and 
+        <A HREF="FAQ.html#SEC136">Q0521</A>.
+
+</P>
+<A NAME="SEC240" HREF="FAQ.html#TOC240">Q5015</A>: A short time after I start Exim I see a &#60;defunct&#62; process. What is
+       causing this?
+
+
+<P>
+A5015: Your system must be lightly loaded as far as mail is concerned. The
+       daemon sets off a queue runner process when it is started, but it only
+       tidies up completed child processes when it wakes up for some other
+       reason. When there's nothing much going on, you occasionally see
+       &#60;defunct&#62; processes like this waiting to be dealt with. This is
+       perfectly normal.
+
+</P>
+<A NAME="SEC241" HREF="FAQ.html#TOC241">Q5016</A>: On a reboot, or a restart of the mail system, I see the message "Mailer
+       daemons: exim abandoned: unknown, malformed, or incomplete option
+       <B>-bz</B> sendmail". What does this mean?
+
+
+<P>
+A5016: <B>-bz</B> is a Sendmail option requesting it to create a "configuration freeze
+       file". Exim has no such concept and so does not support the option. You
+       probably have a line like
+
+</P>
+<PRE>
+         /usr/lib/sendmail -bz</PRE>
+<P>
+       in some start-up script (e.g. <B><B>/etc/init.d/mail</B>)</B> immedately before
+
+</P>
+<PRE>
+         /usr/lib/sendmail -bd -q15m</PRE>
+<P>
+       The first of these lines should be commented out.
+
+</P>
+<A NAME="SEC242" HREF="FAQ.html#TOC242">Q5017</A>: I would like to restrict e-mail usage for some users to the local
+       machine, ideally on a group basis.
+
+
+<P>
+A5017: See 
+        <A HREF="FAQ.html#SEC293">A9802</A>
+
+</P>
+<A NAME="SEC243" HREF="FAQ.html#TOC243">Q5018</A>: Whenever exim restarts it takes up to 3-5 minutes to start responding on
+       the SMTP port. Why is this?
+
+
+<P>
+A5018: Something else is hanging onto port 25 and not releasing it. One place
+       to look is <B><B>/etc/inetd.conf</B></B> in case for any reason an SMTP stream is
+       configured there.
+
+</P>
+<A NAME="SEC244" HREF="FAQ.html#TOC244">Q5019</A>: Why aren't there any man pages for Exim? I don't always carry my printed
+       documentation.
+
+
+<P>
+A5019: As well as plain ASCII text, the Exim documentation is provided in two
+       online forms - texinfo and HTML - which have a certain amount of built-
+       in indexing for ease of finding your way around. There are no man pages
+       because the author of Exim hasn't the time (or desire :-) to maintain
+       yet another documentation format. Besides, it is hard to know how to
+       split the Exim manual up.
+
+</P>
+<P>
+       There is a contributed man page for a previous version of Exim in
+
+</P>
+<P>
+       <B><A HREF="ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/Contrib/doc/exim.8">ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/Contrib/doc/exim.8</A></B>
+
+</P>
+<P>
+       This was written by a previous maintainer of the Debian GNU/Linux Exim
+       package. You can view a nicely formated version at:
+
+</P>
+<P>
+       <B><A HREF="http://dwww.jimpick.com/cgi-bin/dwww?type=man&location=/usr/man/man8/exim.8.gz">http://dwww.jimpick.com/cgi-bin/dwww?type=man&location=/usr/man/man8/exim.8.gz</A></B>
+
+</P>
+<P>
+       This contains some introductory text and the command line options only.
+
+</P>
+<A NAME="SEC245" HREF="FAQ.html#TOC245">Q5020</A>: When I send a message using the <B>-t</B> command line option, Exim sends only
+       to the addresses within the message, not to those on the command line.
+
+
+<P>
+A5020: By default Exim operates according to the Sendmail documentation, and
+       interprets addresses on the command line as addresses <EM>not</EM> to send to.
+       You can set
+
+</P>
+<PRE>
+         extract_addresses_remove_arguments = false</PRE>
+<P>
+       to change this behaviour. There is some confusion in the Sendmail
+       community about the interpretation of recipient addresses on the command
+       line if the <B>-t</B> option is used.
+
+</P>
+<P>
+       Here is an except from one version of the sendmail documentation
+
+</P>
+<P>
+         <B>-t</B>  Read message for recipients. To:, Cc:, and Bcc: lines will
+             be scanned for recipient addresses. The Bcc: line will be
+             deleted before transmission. Any addresses in the argument
+             list will be suppressed, that is, they will not receive
+             copies even if listed in the message header.
+
+</P>
+<P>
+       Earlier versions of the sendmail documentation are ambiguous (unlike the
+       snippet above).  Apparently the code and documentation streams resolved
+       the ambiguity differently.
+
+</P>
+<A NAME="SEC246" HREF="FAQ.html#TOC246">Q5021</A>: If I set up, for example, 
+          <TT>local_domains = *customer.com</TT>, then it matches
+       <B>"customer.com"</B> and <B>"abc.customer.com"</B> as required, but it also matches
+       <B>"noncustomer.com",</B> which is wrong. How can I get round this?
+
+
+<P>
+A5021: (A) You have to specify two entries in the list:
+
+</P>
+<PRE>
+         local_domains = customer.com : *.customer.com</PRE>
+<P>
+       because * in a domain list matches any characters, including "." and
+       including a null sequence.
+
+</P>
+<P>
+       (B) Alternatively, you could use a regular expression:
+
+</P>
+<PRE>
+          local_domains = ^(.+\.|)customer\.com$</PRE>
+<P>
+       but that probably will not be as efficient.
+
+</P>
+<P>
+       (C) If you have lots of local domains, you could put them into a file to
+       be searched (using lsearch, dbm, cdb, or whatever) and use a partial
+       search such as
+
+</P>
+<PRE>
+         local_domains = partial-dbm;/list/of/domains</PRE>
+<P>
+       If the file contains the key <B>*.customer.com</B> then the desired effect is
+       achieved, because partial lookups do operate on a component basis. See
+       the section entitled "Partial matching in domain lists". It is a bit
+       confusing that "*" is used in this context, because its meaning is not
+       the same as when it appears directly in a domain list.
+
+</P>
+<A NAME="SEC247" HREF="FAQ.html#TOC247">Q5022</A>: I want to match all local domains of the form <B>*.oyoy.org</B> but want a few
+       exceptions. For instance I don't want <B>foo.oyoy.org</B> or <B>bar.oyoy.org</B> to be
+       treated as local. What is the best way to do this?
+
+
+<P>
+A5022: (A) From release 3.00 onwards, you can put negative items in the
+       <TT>local_domains</TT> setting, like this:
+
+</P>
+<PRE>
+         local_domains = !foo.oyoy.org : !bar.oyoy.org : *.oyoy.org</PRE>
+<P>
+       If there are many exceptions, you can use a lookup instead of listing
+       them all inline.
+
+</P>
+<P>
+       (B) Otherwise, you can use a regular expression:
+
+</P>
+<PRE>
+         local_domains = ^.*(?&#60;!^foo|^bar)\.oyoy\.org$</PRE>
+<P>
+       An alternative formulation that is more efficient in execution (because
+       it doesn't backtrack for .* in cases that don't match) is
+
+</P>
+<PRE>
+         local_domains = ^(?&#62;.*$)(?&#60;=\.oyoy\.org)(?&#60;!^(foo|bar)\.oyoy\.org)</PRE>
+<P>
+       If you are using an earlier version of Exim in which the regular
+       expression library does not have lookbehind support (versions prior to
+       2.051, but after 1.735):
+
+</P>
+<PRE>
+         local_domains = ^(?!(foo|bar)\.oyoy\.org$).+\.oyoy\.org$</PRE>
+<P>
+       If you are using a version of Exim that is earlier than 1.735, consider
+       upgrading!
+
+</P>
+<A NAME="SEC248" HREF="FAQ.html#TOC248">Q5023</A>: I can't seem to find a pre-built version of Exim anywhere. The machine
+       is a Sparc 5 running Solaris 2.6.
+
+
+<P>
+A5023: The problem is that there are a number of build-time options, requiring
+       the answer to questions like:
+
+</P>
+<P>
+       . Which DBM library do you have? (On Solaris probably ndbm, but no easy
+         default on some other systems.)
+
+</P>
+<P>
+       . Which uid/gid do you want to use for Exim?
+
+</P>
+<P>
+       . Where do you want the configuration file to be? (<EM>Many</EM> different
+         answers, even on the same OS, depending on local policy.)
+
+</P>
+<P>
+       . Ditto for the binaries.
+
+</P>
+<P>
+       . Which optional bits of Exim do you want to include?
+
+</P>
+<P>
+       ... and so on. One could impose a set of values, but I suspect they
+       would probably please nobody.
+
+</P>
+<A NAME="SEC249" HREF="FAQ.html#TOC249">Q5024</A>: Is there a Windows NT version of Exim available?
+
+
+<P>
+A5024: A long time ago somebody took a copy of the Exim source with the aim of
+       trying to port it to NT. However, I never heard anything more.
+
+</P>
+<A NAME="SEC250" HREF="FAQ.html#TOC250">Q5025</A>: Does Exim support Delivery Status Notificaion (DSN), Message Status
+       Notification (MSN), or any other form of delivery acknowledgement?
+
+
+<P>
+A5025: See 
+        <A HREF="FAQ.html#SEC132">A0517</A>.
+
+</P>
+<A NAME="SEC251" HREF="FAQ.html#TOC251">Q5026</A>: What does "Exim" stand for?
+
+
+<P>
+A5026: Originally, it was "EXperimental Internet Mailer", which was the best I
+       could come up with when I was starting out. At that point it <EM>was</EM>
+       experimental - I wanted to see if the ideas I had for extending Smail's
+       approach actually worked. Then somebody discovered about it and wanted
+       to start using it, and told other people about it...
+
+</P>
+<A NAME="SEC252" HREF="FAQ.html#TOC252">Q5027</A>: What does the log message "no immediate delivery: more than 10 messages
+       received in one connection" mean?
+
+
+<P>
+A5027: See 
+        <A HREF="FAQ.html#SEC133">A0518</A>.
+
+</P>
+<A NAME="SEC253" HREF="FAQ.html#TOC253">Q5028</A>: Although I haven't set <TT>check_spool_space</TT>, Exim is still checking the
+       amount of space on the spool for incoming SMTP messages that use the
+       SIZE option. Can I suppress this?
+
+
+<P>
+A5028: The RFC for the SIZE option says
+
+</P>
+<P>
+         If the server currently lacks sufficient resources to accept a
+         message of the indicated size, but may be able to accept the
+         message at a later time, it responds with code "452
+         insufficient system storage".
+
+</P>
+<P>
+       and that is what Exim is trying to implement. This is entirely
+       independent from <TT>check_spool_space</TT>, which says "don't accept any mail
+       if there is less than so much space in the spool partition", though the
+       code is optimised to do both checks at the same time if required.
+       However, you can suppress the SIZE check if you want to, by unsetting
+       <TT>smtp_check_spool_space</TT>.
+
+</P>
+<A NAME="SEC254" HREF="FAQ.html#TOC254">Q5029</A>: I just noticed log entries that start off "&#60;= &#60;&#62;". Am I correct in
+       assuming that the "&#60;&#62;" indicates that the envelope did not contain any
+       "From" data?
+
+
+<P>
+A5029: Yes. This indicates a delivery failure report (aka "bounce message").
+       Here is what RFC 1123 has to say about this:
+
+</P>
+<P>
+         "If there is a delivery failure after acceptance of a message,
+         the receiver-SMTP MUST formulate and mail a notification
+         message.  This notification MUST be sent using a null ("&#60;&#62;")
+         reverse path in the envelope; see Section 3.6 of RFC-821.  The
+         recipient of this notification SHOULD be the address from the
+         envelope return path (or the Return-Path: line).  However, if
+         this address is null ("&#60;&#62;"),  the receiver-SMTP MUST NOT send a
+         notification.  If the address is an explicit source route, it
+         SHOULD be stripped down to its final hop."
+
+</P>
+<P>
+       The reason for using empty sender addresses is to identify bounce
+       messages so that they themselves do not cause further bounces. However,
+       this has made life harder for those that want to check incoming mail for
+       valid senders. It is a pity that some other mechanism (e.g. a keyword
+       on the MAIL command) was not used instead, but it is far too late to
+       change now.
+
+</P>
+<P>
+       Empty senders are also used for other kinds of report which should not
+       themselves cause the generation of bounce messages. For example, Exim
+       uses them when sending out warnings about delivery delays.
+
+</P>
+<A NAME="SEC255" HREF="FAQ.html#TOC255">Q5030</A>: I've received a message which does not have my address in the To:
+       line. It is a spam message with the same address in both the From: and
+       the To: headers. How can this happen, and why doesn't Exim reject it?
+
+
+<P>
+A5030: There is an important distinction between the "envelope" from and to and
+       the "header" from and to. The former are sometimes called the "sender"
+       and "recipient". An email message needs an "envelope" for the same
+       reason that paper mail does - the envelope tells the delivery mechanism
+       what to do with *this copy* of the message, whereas the To: header lists
+       all the recipients, including those who have been sent different copies
+       of the message because their mailbox is on some other host.
+
+</P>
+<P>
+       An MTA such as Exim normally works entirely with the "envelope"
+       addresses, not with those in the header lines. However, you can specify
+       that it should do some checking of header addresses by setting a
+       number of options whose names begin with <TT>headers_</TT>.
+
+</P>
+<P>
+       Don't try to block mail where envelope from and the header from differ.
+       There are common legitimate cases where this happens, for example,
+       messages forwarded from mailing lists and delivery failure reports.
+
+</P>
+<A NAME="SEC256" HREF="FAQ.html#TOC256">Q5031</A>: Can (or will) Exim ever handle a message delivery purely in memory,
+       that is, it is handled without it ever hitting the disc?
+
+
+<P>
+A5031: It doesn't, and never will. Accepting and delivering a message are two
+       entirely separate, independent processes, which communicate only by
+       writing/reading the message on the disc.
+
+</P>
+<A NAME="SEC257" HREF="FAQ.html#TOC257">Q5032</A>: If I am using dbm files for data that Exim reads, can I rebuild them
+       on the fly, or do I need to restart Exim every time I make a change?
+
+
+<P>
+A5032: Exim re-reads the file every time it consults it, so if you are using a
+       cdb or a DBM library that uses just a single file (i.e. NOT ndbm) then
+       you can just build the new file with a temporary file name, and use "mv"
+       to rename it into the correct place on the fly. If there are two files
+       to rename, there is a window of time during which the DBM database is
+       inconsistent. On lightly loaded systems this may not matter.
+
+</P>
+<A NAME="SEC258" HREF="FAQ.html#TOC258">Q5033</A>: What are the main differences between using an Exim filter and using
+       procmail?
+
+
+<P>
+A5033: Exim filters and procmail provide different facilities. Exim filters run
+       at directing time, before <EM>any</EM> deliveries are done. A filter is like a
+       <B>".forward</B> file with conditions". One of the benefits is de-duplication.
+       Another is that if you forward, you are forwarding the original message.
+
+</P>
+<P>
+       However, this does mean that pipes etc. are not run at filtering time,
+       nor can you change the headers, because the message may have other
+       recipients and Exim keeps only a single set of headers.
+
+</P>
+<P>
+       Procmail runs at delivery time. This is for one recipient only, and so
+       it can change headers, run pipes and check the results, etc. However, if
+       it wants to forward, it has to create a new message containing a copy
+       of the original message.
+
+</P>
+<P>
+       It's your choice as to which of these you use. You can of course use
+       both.
+
+</P>
+<A NAME="SEC259" HREF="FAQ.html#TOC259">Q5034</A>: I need an option that is the opposite of <B>-bpa,</B> that is, a listing of
+       those addresses generated from a top-level address that have not yet
+       been delivered.
+
+
+<P>
+A5034: Exim does not keep this information. It saves only the top-level
+       addresses and the list of addresses that are finished with. At each
+       delivery attempt, generated addresses are recomputed from scratch. This
+       makes it possible to correct errors in <B>.forward</B> and alias files that are
+       causing delivery delays. However, there is an option you can set on an
+       <B>aliasfile</B> or <B>forwardfile</B> director that changes things. It is called
+       <TT>one_time</TT>, and if it is set, the list of generated addresses gets added
+       to the top-level list at the first delivery attempt, and is never
+       regenerated. Because top-level address lists must be real email
+       addresses, this option cannot be used if any of the generated addresses
+       are pipes, files, or autoreplies.
+
+</P>
+<A NAME="SEC260" HREF="FAQ.html#TOC260">Q5035</A>: I am getting complaints from a customer who uses my EXIM server for
+       relaying that they are being blocked with a "Too many connections"
+       error.
+
+
+<P>
+A5035: See <TT>smtp_accept_max</TT> and related options such as <TT>smtp_accept_reserve</TT>.
+
+</P>
+<A NAME="SEC261" HREF="FAQ.html#TOC261">Q5036</A>: When I try "exim <B>-bf"</B> to test a system filter, I received the following
+       error message: "Filter error: unavailable filtering command "fail" near
+       line 8 of filter file".
+
+
+<P>
+A5036: Use the <B>-bF</B> option to test system filters. This gives you access to the
+       freeze and fail actions.
+
+</P>
+<A NAME="SEC262" HREF="FAQ.html#TOC262">Q5037</A>: How can I make Exim receive incoming mail, queue it, but NOT attempt to
+       deliver it? I want to be in this state while moving some mailboxes.
+
+
+<P>
+A5037: (1) Set <TT>queue_only</TT> in the Exim configuration. (2) Kill off your daemon,
+       and restart it <EM>without</EM> the <B>-q</B> option (i.e. with just the <B>-bd</B> option),
+       so that it does not spawn any queue runners. This stops all deliveries,
+       remote as well as local. To stop just local deliveries, assuming that
+       none of your routers are configured to send messages directly to a local
+       transport, make this your first director:
+
+</P>
+<PRE>
+         defer_all:
+           driver = smartuser
+           new_address = :defer:</PRE>
+<P>
+       When you are ready to go again, remove that director and do a <B>-qf</B> run to
+       override the retry times. This solution works from release 3.10 onwards.
+       In earlier releases an <B>aliasfile</B> director must be used because :defer:
+       was not available for use in <B>smartuser</B>.
+
+</P>
+<A NAME="SEC263" HREF="FAQ.html#TOC263">Q5038</A>: What does the rejection message "reject all recipients: 3 times bad
+       sender" mean?
+
+
+<P>
+A5038: See the section of the manual entitled "Sender verification". Exim has
+       failed to verify a sender from the same host 3 times within a period of
+       24 hours.
+
+</P>
+<A NAME="SEC264" HREF="FAQ.html#TOC264">Q5039</A>: The menu in Eximon isn't working. It displays, but I can't select
+       anything from it.
+
+
+<P>
+A5039: On some X implementations, if the numlock key is pressed (so that the
+       numeric keypad is working) then the menu didn't work properly in
+       versions of Eximon before Exim release 3.10. The problem is an
+       infelicity in the particular implementation of X. A workaround was
+       introduced at release 3.10, so this problem should no longer be
+       encountered.
+
+</P>
+<A NAME="SEC265" HREF="FAQ.html#TOC265">Q5040</A>: What does "ridiculously long message header" in an error report mean?
+
+
+<P>
+A5040: There has to be some limit to the length of a message's header lines,
+       because otherwise a malefactor could open an SMTP channel to your host,
+       start a message, and then just send characters continuously until your
+       machine ran out of memory. (Exim stores all the header lines in main
+       memory). For this reason a limit is imposed on the total amount of
+       memory that can be used for header lines. The default is 1MB, but this
+       can be changed by setting HEADER_MAXSIZE in <B>Local/Makefile</B>. Exceeding
+       the limit provokes the "ridiculous" error message.
+
+</P>
+<P>
+       Prior to release 3.022 Exim used two separate limits, one on the length
+       of an individual header line and one on the total number of header
+       lines. A header line longer than 8192 used to provoke the error "Header
+       line is ridiculously overlong". In subsequent releases there is no limit
+       on individual header lines; only the total matters.
+
+</P>
+<A NAME="SEC266" HREF="FAQ.html#TOC266">Q5041</A>: What does Exim use for POP as a default?  Do I have to install anything
+       else?
+
+
+<P>
+A5041: Yes. Exim provides MTA functionality. That is, it delivers mail. POP is
+       one of several ways of reading previously-delivered mail. Exim does not
+       provide that functionality.
+
+</P>
+<BR><H2><A NAME="SEC267" HREF="FAQ.html#TOC267">93. HP-UX
+
+</A></H2>
+<A NAME="SEC268" HREF="FAQ.html#TOC268">Q9301</A>: I'm trying to compile on an HP machine and I don't have gcc there. So I
+       put <TT>CC=cc</TT> in the <B>Local/Makefile</B>, but I got this error:
+
+
+<PRE>
+       (Bundled) cc: "buildconfig.c", line 54: error 1705: Function prototypes
+         are an ANSI feature.</PRE>
+<P>
+A9301: The bundled compiler is not an ANSI C compiler. You either have to get a
+       copy of gcc from the HPUX Software Porting Archives or buy the ANSI cc
+       from HP. The advice given by one user of HP systems on the Exim
+       mailing list was as follows:
+
+</P>
+<P>
+         "Personally, I wouldn't use anything but the ANSI C compiler. gcc
+         works for compilation, but it doesn't know squat about PA-RISC chips
+         past the 1.0 rev. Since then, HP has come out with PA-RISC 1.1, 2.0,
+         and 2.1, each with better features. gcc will compile for them, but it
+         doesn't produce anywhere near the optimization that HP's compiler
+         does.
+
+</P>
+<P>
+         I took the gcc road when we moved from FreeBSD to HP-UX because I was
+         familiar with it. After 6 months, I had to go and re-port everything
+         over when we realized that gcc wasn't going to do it for us long-term.
+         If I could give advice to any new HP-UX admin: don't use gcc if you
+         can afford the ANSI C compiler.  Based on the cost of even the lowest
+         HP workstation, that usually isn't a problem."
+
+</P>
+<BR><H2><A NAME="SEC269" HREF="FAQ.html#TOC269">94. BSDI
+
+</A></H2>
+<A NAME="SEC270" HREF="FAQ.html#TOC270">Q9401</A>: On BSDI 4.0, Exim built with Perl support exits with the error message
+       <B>"./exim:</B> can't load library <B>'libperl.so'".</B>
+
+
+<P>
+A9401: You probably compiled perl5 yourself, without looking into
+
+</P>
+<PRE>
+         /usr/src/contrib/perl5/perl5.004_02/hints/bsdos.sh</PRE>
+<P>
+       first. The problem is that the command
+
+</P>
+<PRE>
+         perl5 -MExtUtils::Embed -e ldopts</PRE>
+<P>
+       doesn't give you sufficient flags to link something with libperl.
+       Since 5.004_02 the <B>hints/bsdos.sh</B> file has changed to adapt to the
+       changes between BSDI 3.1 and 4.0, but it is still not entirely right.
+
+</P>
+<P>
+       The solution is, when you compile perl, change the "ccdlflags"
+       variable in <B>config.sh</B> to:
+
+</P>
+<PRE>
+         -rdynamic -Wl,-rpath,/usr/local/lib/perl5/5.00502/i386-bsdos/CORE</PRE>
+<P>
+       (or something similar). Alternatively, you can run ./Configure and
+       answering the question "Any special flags to pass to cc to use dynamic
+       loading?" with the above line. It is not known what <B>-rdynamic</B> means
+       (it's not apparently documented in any man page), but that's what BSDI
+       guys did to compile perl5 which comes with BSDI 4.0 distribution.
+
+</P>
+<BR><H2><A NAME="SEC271" HREF="FAQ.html#TOC271">95. IRIX
+
+</A></H2>
+<A NAME="SEC272" HREF="FAQ.html#TOC272">Q9501</A>: I'm running IRIX 6.2 with a number of alias IP addresses set up, but
+       Exim doesn't seem to recognize them as local addresses.
+
+
+<P>
+A9501: This problem was fixed in Exim release 2.03. If you are running an
+       earlier version you should use the <TT>local_interfaces</TT> option to specify
+       all your IP addresses explicitly.
+
+</P>
+<A NAME="SEC273" HREF="FAQ.html#TOC273">Q9502</A>: The IP addresses for incoming calls are all being given as
+       255.255.255.255.
+
+
+<P>
+A9502: If you used the gcc compiler 2.8.x there is a known bug with the
+       "gethost" function under Irix. SGI recommends using either their cc
+       compiler in Irix 6.5, or a lesser version of the gnu compiler (2.6.x).
+
+</P>
+<P>
+       Alternatively, there is an Inst-able port of exim for Irix at
+       <B><A HREF="http://freeware.sgi.com">http://freeware.sgi.com</A>,</B> but it is not likely to be the latest release.
+
+</P>
+<BR><H2><A NAME="SEC274" HREF="FAQ.html#TOC274">96. LINUX
+
+</A></H2>
+<A NAME="SEC275" HREF="FAQ.html#TOC275">Q9601</A>: Exim is mysteriously crashing, usually when forking to send a delivery
+       error message.
+
+
+<P>
+A9601: This has been seen in cases where Exim has been incorrectly built with
+       a muddled combination of an <B>ndbm.h</B> include file and a non-matching
+       DBM library.
+
+</P>
+<P>
+       Faults like this have also been seen on systems with faulty motherboards.
+       You could try to compile the Linux kernel 10 times - if the compile
+       process stops with signal 11, your hardware is to blame.
+
+</P>
+<A NAME="SEC276" HREF="FAQ.html#TOC276">Q9602</A>: Exim has created a directory called <B>build-Linux-libc5-i386</B> but is
+       trying to reference <B>build-Linux-libc5-i386-linux</B> while building.
+
+
+<P>
+A9602: You have several shells installed, which are setting conflicting values
+       in the HOSTTYPE environment variable that is used to construct the name
+       of the build directory. One way round this is to run this command:
+
+</P>
+<PRE>
+         ln -s build-Linux-libc5-i386-linux build-Linux-libc5-i386</PRE>
+<P>
+       This problem should no longer be encountered in release 3.10 or later.
+       Exim has been changed to get the host type from the "uname" command
+       preferentially.
+
+</P>
+<A NAME="SEC277" HREF="FAQ.html#TOC277">Q9603</A>: I want to use logrotate which is standard with <B>RH5.2</B> Linux to rotate
+       my mail logs. Anyone worked out the logrotate config file that will
+       do this?
+
+
+<P>
+A9603: Here's one suggestion:
+
+</P>
+<PRE>
+         /var/log/exim/main.log {
+             create 644 exim exim
+             rotate 4
+             compress
+             delaycompress
+         }</PRE>
+<P>
+       The sleep is added to allow things to close the log file prior to
+       compression. You also need similar entries for the panic log and the
+       reject log, of course.
+
+</P>
+<A NAME="SEC278" HREF="FAQ.html#TOC278">Q9604</A>: I'm seeing the message "<B>inetd</B>[334]: imap/tcp server failing (looping),
+       service terminated" on a RedHat 5.2 system, causing imap connections to
+       be refused. The imapd in use is Washington Uni vers 12.250. Could this
+       be anything to do with Exim?
+
+
+<P>
+A9604: No, it's nothing to do with Exim, but here's the answer anyway: there
+       is a maximum connection rate for <B>inetd</B>. If connections come in faster
+       than that, it thinks a caller is looping. The default setting on RedHat
+       5.2 is 40 calls in any one minute before <B>inetd</B> thinks there's a problem
+       and suspends further calls for 10 mins. This default setting is very
+       conservative. You should probably increase it by a factor of 10 or 20.
+       For example:
+
+</P>
+<PRE>
+         imap stream tcp nowait.400 root /usr/sbin/tcpd /usr/local/etc/imapd</PRE>
+<P>
+       The rate setting is the number following "nowait". This syntax seems to
+       be specific to the Linux version of <B>inetd</B>. Other operating systems
+       provide similar functionality, but in different ways.
+
+</P>
+<A NAME="SEC279" HREF="FAQ.html#TOC279">Q9605</A>: I get the "too many open files" error especially when a lot of messages
+       land for majordomo at the same time.
+
+
+<P>
+A9605: The problem appears to be the number of open files the system can
+       handle. This is changable by using the proc filesystem. To your
+       <B><B>/etc/rc.d/rc.local</B></B> file append something like the following:
+
+</P>
+<PRE>
+         # Now System is up, Modify kernel parameters for max open etc.</PRE>
+<PRE>
+         if [ -f /proc/sys/kernel/file-max ]; then
+                echo 16384 &#62;&#62; /proc/sys/kernel/file-max
+         fi
+         if [ -f /proc/sys/kernel/inode-max ]; then
+                echo 24576 &#62;&#62; /proc/sys/kernel/inode-max
+         fi
+         if [ -f /proc/sys/kernel/file-nr ]; then
+                echo 2160 &#62;&#62; /proc/sys/kernel/file-nr
+         fi</PRE>
+<P>
+       By echoing the value you want for file-max to the file file-max <B>etc.,</B>
+       you actually change the kernel parameters.
+
+</P>
+<A NAME="SEC280" HREF="FAQ.html#TOC280">Q9606</A>: I'm having a problem with an Exim RPM.
+
+
+<P>
+A9606: Normally the thing to do if you have a problem with an RPM package is
+       to contact the person who built the package first, not the person who
+       made the software that's in the package.  You can usually find out who
+       made a package using the following command:
+
+</P>
+<PRE>
+         rpm --query --package --queryformat '%{PACKAGER}\n' &#60;rpm-package-file&#62;</PRE>
+<P>
+       where &#60;rpm-package-file&#62; is the actual file, e.g. <B>`exim-3.03-2.i386.rpm'.</B>
+       Or, if the package is installed on your system:
+
+</P>
+<PRE>
+         rpm --query --queryformat '%{PACKAGER}\n' &#60;package-name&#62;</PRE>
+<P>
+       where &#60;package-name&#62; is the name component of the package, e.g. `exim'.
+       If the packager is unable or unwilling to help, only then should you
+       contact the actual author or associated mailing list of the software.
+
+</P>
+<P>
+       If you discover through the querying process that you can't tell who
+       the person (or company or group) is who built the package, or that they
+       no longer exist at the given address, then you should reconsider
+       whether you want a package from an unknown source on your system.
+
+</P>
+<P>
+       If you discover through the querying process that you yourself are the
+       person who built the package, then you should either (a) contact the
+       author or associated mailing list, or (b) reconsider whether you ought
+       to be building and distributing RPM packages of software you don't
+       understand.
+
+</P>
+<P>
+       Similar rules of thumb govern other binary package formats, including
+       debs, tarballs, and POSIX packages.
+
+</P>
+<BR><H2><A NAME="SEC281" HREF="FAQ.html#TOC281">97. SUN SYSTEMS
+
+</A></H2>
+<A NAME="SEC282" HREF="FAQ.html#TOC282">Q9701</A>: Exim builds fine with gcc on SunOS 4 but crashes inside <B>sscanf()</B>.
+
+
+<P>
+A9701: Make sure you are liking with the GNU <B>ld</B> linker and not the system
+       version of <B>ld</B>.
+
+</P>
+<A NAME="SEC283" HREF="FAQ.html#TOC283">Q9702</A>: How can I get rid of spurious ^M characters in messages sent from
+       CDE <B>dtmail</B>?
+
+
+<P>
+A9702: CDE <B>dtmail</B> passes messages to Exim via the command line interface with
+       lines terminated by CRLF, instead of the Unix convention of just LF. As
+       Exim is an 8-bit clean program it treats the CR as just another data
+       character. Exim has a command line option called <B>-dropcr</B> which causes
+       it to ignore <EM>all</EM> CR characters in an incoming non-SMTP message. You
+       should configure <B>dtmail</B> to add this option to the command it uses to
+       call Exim (using the path <B>/usr/lib/sendmail</B>). However, it has been
+       reported that it isn't possible to change this call from <B>dtmail</B> by any
+       official means. An alternative approach is to replace <B>/usr/lib/sendmail</B>
+       by a filtering script which removes the spurious CRs from the input
+       before passing it to Exim.
+
+</P>
+<A NAME="SEC284" HREF="FAQ.html#TOC284">Q9703</A>: On SunOS 4 Exim crashes when looking up domains in the DNS that have
+       more than 10 A records.
+
+
+<P>
+A9703: There are Sun library patches to fix this. It is not Exim's problem.
+       For 4.13_U1 the patch is 101558<I>-xx</I>; for 4.1.3 the patch is 100891<I>-xx</I>.
+       From the README: 1054748 ftp, ping dump core when connecting to a host
+       with multiple DNS A records.
+
+</P>
+<P>
+       An alternative is to build another resolver library - such as the ones
+       that are part of the bind distribution - and explicitly link against
+       those.
+
+</P>
+<A NAME="SEC285" HREF="FAQ.html#TOC285">Q9704</A>: The menu in Eximon isn't working on my Sun system.
+
+
+<P>
+A9704: With OpenWindows, if the numlock key is pressed (so that the numeric
+       pad is working) then some menus don't work. This appears to be true for
+       the console and (some) remote X-window servers. A workaround for this
+       problem was introduced in the 3.10 Exim release, so it should no longer
+       be encountered.
+
+</P>
+<A NAME="SEC286" HREF="FAQ.html#TOC286">Q9705</A>: I am experiencing mailbox locking problems with Sun's <B>mailtool</B> used
+       over a network.
+
+
+<P>
+A9705: Under the "Expert" settings of mailtool is a option to turn on "Use
+       network aware mail file locking". By default <B>dtmail</B> has this set, but
+       mailtool doesn't. You should set it. The help info on <B>dtmail</B> has this
+       to say about it:
+
+</P>
+<P>
+       "Mailer tries to prevent two different instances of itself from opening
+       the same mail file at the same time through a technique that detects
+       this access when both instances of Mailer and the file are all on the
+       same machine. A network-aware mail file locking protocol is available
+       that uses ToolTalk to coordinate instances of Mailer running from more
+       than one machine, or mail files accessed over the network. Mailer can
+       only change this option when first opening a mail file."
+
+</P>
+<P>
+       If you are using the SunOS4 version of <B>mailtool</B>, this apparently
+       doesn't work. The only thing which does seem to work it getting the user
+       to hit the "done" button to make it release the lock.
+
+</P>
+<A NAME="SEC287" HREF="FAQ.html#TOC287">Q9706</A>: Exim has been crashing on my Solaris x86 system, apparently while
+       running DBM functions.
+
+
+<P>
+A9706: The use of ndbm with gcc has caused problems on x86 Solaris systems.
+       Try changing one or the other; using either db 1.85 with gcc, or Sun's
+       WS compiler with ndbm, has fixed this in the past.
+
+</P>
+<A NAME="SEC288" HREF="FAQ.html#TOC288">Q9707</A>: The exiwhat utility isn't working for me on a Solaris 2 system.
+
+
+<P>
+A9707: Have you got <B>/usr/ucb</B> on your path? If so, it is probably picking up the
+       wrong version of the <B>ps</B> command. The exiwhat script is built on
+       Solaris to expect the normal Solaris version of <B>ps</B>.
+
+</P>
+<A NAME="SEC289" HREF="FAQ.html#TOC289">Q9708</A>: How do I stop Sun's <B>dtcm</B> from hanging?
+
+
+<P>
+A9708: From qmail's FAQ: "There is a novice programming error in <B>dtcm</B>, known as
+       ``failure to close the output side of the pipe in the <B>child.''</B> Sun has,
+       at the time of this writing, not yet provided a patch."
+
+</P>
+<A NAME="SEC290" HREF="FAQ.html#TOC290">Q9709</A>: I want Exim to use only the resolver (i.e. ignore <B>/etc/hosts</B>), but don't
+       want to alter the <B>nsswitch.conf</B> file in Solaris 2.
+
+
+<P>
+A9709: You need to rebuild Exim after fiddling with <B>OS/os.h-SunOS5:</B>
+
+</P>
+<PRE>
+       #define gethostbyaddr res_gethostbyaddr
+       #define gethostbyname res_gethostbyname
+       #define endhostent res_endhostent
+       #define endnetent res_endnetent
+       #define gethostent res_gethostent
+       #define getnetbyaddr res_getnetbyaddr
+       #define getnetbyname res_getnetbyname
+       #define getnetent res_getnetent
+       #define sethostent res_sethostent
+       #define setnetent res_setnetent</PRE>
+<P>
+       Exim uses gethostbyname and gethostbyaddr only, but may use others in
+       the future. Note that <B>-lnsl</B> is still needed in the Makefile as it
+       contains code used by the NIS lookup and also the <TT>inet_addr</TT> function
+       that Exim uses.
+
+</P>
+<BR><H2><A NAME="SEC291" HREF="FAQ.html#TOC291">98. COOKBOOK
+
+</A></H2>
+<A NAME="SEC292" HREF="FAQ.html#TOC292">Q9801</A>: How do I configure Exim as part of TPC <B>(<A HREF="http://www.tpc.int">http://www.tpc.int</A>)?</B>
+
+
+<P>
+A9801: (1) add <B>partial-lsearch;/etc/mail/tpc.domains</B> to <TT>local_domains</TT>;
+           <B><B>/etc/mail/tpc.domains</B></B> is a text file with lines in this format:
+
+</P>
+<PRE>
+             9.3.5.1.0.8.1.tpc.int.</PRE>
+<P>
+           This sample line indicates that we accept faxes destined for
+           1(801)539-*.
+
+</P>
+<P>
+       (2) Set up the following transport:
+
+</P>
+<PRE>
+             tpc:
+               driver = pipe
+               command = "/usr/local/tpc/tpcmailer.pl ${local_part}@${domain} \
+                  ${sender_address}"
+               pipe_as_creator</PRE>
+<P>
+           <B><B>/usr/local/tpc/tpcmailer.pl</B></B> is the mail processing script that can
+           be obtained from the TPC distribution.
+
+</P>
+<P>
+       (3) Set up the following director:
+
+</P>
+<PRE>
+             tpc_director:
+               driver = smartuser
+               transport = tpc
+               domains = "partial-lsearch;/etc/mail/tpc.domains"</PRE>
+<P>
+       Of course, there are other things to do as well before your system is
+       a functioning TPC server.
+
+</P>
+<A NAME="SEC293" HREF="FAQ.html#TOC293">Q9802</A>: How do I configure Exim so that it sends mail to the outside world only
+       from a restricted list of our local users?
+
+
+<P>
+A9802: There are several possible ways that this can be done.
+
+</P>
+<P>
+       (A) You can restrict the senders directly by putting a setting such as
+           this one on all the drivers that route to the outside (usually this
+           is just the final <B>lookuphost</B> router):
+
+</P>
+<PRE>
+             senders = ":^[^@]+@(?!${rxquote:your.domain}\\$):\
+                       lsearch;/permitted/senders"</PRE>
+<P>
+           The first item in this list is empty, to match the empty sender.
+           This is necessary because bounce messages have null senders. The
+           second item is a regular expression that matches any address whose
+           domain is <EM>not</EM> your domain. This caters for cases when mail from
+           an external user has arrived for a local user who has forwarding
+           set up to some outside address.
+
+</P>
+<P>
+           If the first two items do not match (that is, the address is in your
+           domain) the sender is looked up in a file of permitted senders; each
+           item in the file must be a complete address, including the domain.
+           If the sender is unacceptable, an "unrouteable mail domain" error
+           will occur because the router won't run, and there are no more to
+           try.
+
+</P>
+<P>
+       (B) If your local users are in many domains, it may be easier to use a
+           <TT>condition</TT> option to test the domain and local part independently,
+           along these lines:
+
+</P>
+<PRE>
+             condition = "\
+               ${lookup{${domain:$sender_address}}lsearch{/domain/list}\
+               {\
+                 ${lookup{${local_part:$sender_address}}lsearch\
+                 {/permitted/senders}{yes}{no}}\
+               }\
+               {yes}}"</PRE>
+<P>
+           Obviously other means of testing the domain and local part could be
+           substituted, for example, by having separate files of valid local
+           parts for each local domain.
+
+</P>
+<P>
+       (C) If your local users are logged in to your host, you could use a
+           special group for those that are permitted to mail to the world.
+           Assuming your groups are defined in <B>/etc/group</B> you could arrange to
+           look up the group in that file and then check that the sender was in
+           the group,using something along these lines:
+
+</P>
+<PRE>
+             condition = "\
+               ${lookup{groupname}lsearch{/etc/group}\
+               {${if match {$value}\
+               {[:,]${rxquote:${local_part:$sender_address}}(,|\\\$)}\
+               {yes}{no}}}{no}}"</PRE>
+<P>
+           This is checking the local part of the sender; a alternative might
+           be to check <B><B>$sender_ident.</B></B> However, you should really also check
+           that <B>$sender_host_address</B> is either unset or set to 127.0.0.1 or
+           your IP address, so you check only locally-originated mail.
+
+</P>
+<P>
+           A block like this does not prevent a logged in user from sending
+           mail by telnetting to another host's SMTP port, or indeed from
+           installing a private version of Exim to do the job for her.
+
+</P>
+<P>
+       (D) On a gateway server that has no local users and so receives all the
+           mail via SMTP from client hosts, you could use a rewriting rule to
+           rewrite sender addresses in your local domain from a table of legal
+           local parts, replacing any illegal addresses with an address such as
+           <B><B>unknown@your.domain</B>.</B> If this is combined with <TT>sender_verify=true</TT>
+           it causes messages from users that are not in the table to be
+           refused, assuming that the gateway is capable of verifying the local
+           part of <B><B>user@your.domain</B>.</B>
+
+</P>
+<A NAME="SEC294" HREF="FAQ.html#TOC294">Q9803</A>: How do I configure Exim to run with SmartList?
+
+
+<P>
+A9803: This is what was done for Exim's own mailing list, using SmartList/
+       procmail 3.11pre7. It runs as its own user - trying to manage mailing
+       lists under your own ID can be hard work. Smartlist is installed into
+       <B>/var/spool/slist</B>, and there is an slist user defined. Each list appears
+       as a directory under <B>/var/spool/slist</B> (as per usual for Smarlist).
+       Exim is configured like this:
+
+</P>
+<PRE>
+         # slist added to list of trusted users so it can
+         # manipulate sender addresses</PRE>
+<PRE>
+         trusted_users = exim:slist</PRE>
+<PRE>
+         # in transports, a list transport is defined:</PRE>
+<PRE>
+         list_transport:
+           driver = pipe
+           command = "/var/spool/slist/.bin/flist \
+                     ${local_part}${local_part_suffix}"
+           current_directory = /var/spool/slist
+           home_directory = /var/spool/slist
+           user = slist
+           group = slist</PRE>
+<PRE>
+         # in directors a list director is defined:</PRE>
+<PRE>
+         list_director:
+           driver = smartuser
+           suffix = -request
+           suffix_optional
+           local_parts = !.bin:!.etc
+           require_files = /var/spool/slist/${local_part}/rc.init
+           transport = list_transport</PRE>
+<P>
+       and thats it - no aliases, no special handling of out lists etc.
+       What you do need is to ensure that choplist is used for distribution
+       (that is, do not uncomment the <TT>alt_sendmail</TT> entry which is blank).
+
+</P>
+<P>
+       A couple of other things are forced - for example since the list runs in
+       its own domain the domain value is forced to <B>exim.org.</B>
+
+</P>
+<P>
+       Then everything else is basic SmartList configuration - and that's
+       moderately well documented. A confirmation stage on signup was added -
+       now when you subscribe you are sent a confirmation which you must
+       return before the system subscribes you (this prevents people
+       subscribing their "friends" and makes sure that the addresses really do
+       work). The confirm package is available at:
+
+</P>
+<PRE>
+          <A HREF="ftp://ftp.fatfree.com/confirm-1.1.tar.gz">ftp://ftp.fatfree.com/confirm-1.1.tar.gz</A></PRE>
+<P>
+       and was written by Michelle Dick.
+
+</P>
+<A NAME="SEC295" HREF="FAQ.html#TOC295">Q9804</A>: How do I configure Exim to minic PP's "tripnote" facility?
+
+
+<P>
+A9804: See C005.
+
+</P>
+<A NAME="SEC296" HREF="FAQ.html#TOC296">Q9805</A>: How do I configure Exim to handle local parts with extensions?
+
+
+<P>
+A9805: See C010.
+
+</P>
+<A NAME="SEC297" HREF="FAQ.html#TOC297">Q9806</A>: How do I configure Exim so that only a restricted list of users can
+       receive mail from external domains?
+
+
+<P>
+A9806: See C013.
+
+</P>
+<A NAME="SEC298" HREF="FAQ.html#TOC298">Q9807</A>: I have <B><B>someuser@mydomain.com</B></B> that I only want certain users to be able
+       to mail to. How do I accomplish this?
+
+
+<P>
+A9807: This is a transport:
+
+</P>
+<PRE>
+         bounce:
+           driver  = autoreply
+           from    = postmaster@mydomain.com
+           to      = $sender_address
+           user    = exim
+           subject = "Re: Your mail to ${local_part}"
+           text    = "You are not allowed to mail to ${local_part}."</PRE>
+<P>
+       This is a director that should come before all the others:
+
+</P>
+<PRE>
+         special_user:
+           driver = smartuser
+           local_parts = someuser
+           transport = bounce
+           senders = !: !lsearch;/list/of/permitted/senders</PRE>
+<P>
+       Note that leading "!:" in senders. It allows the null sender &#60;&#62; to be
+       valid (i.e. not to match this director). This is necessary, since bounce
+       messages have null senders. All other permitted senders must be in the
+       file as complete addresses, including a domain.
+
+</P>
+<A NAME="SEC299" HREF="FAQ.html#TOC299">Q9808</A>: A site for which I provide secondary MX is down for some time. Is there
+       a way to run the queue for that destination separately from the main
+       queue?
+
+
+<P>
+A9808: No, because Exim does not have the concept of "the queue for that
+       destination". It simply has a single pool of messages awaiting delivery
+       (and some of them may have several destinations). The best approach to
+       this is to arrange for all messages for the site to be saved somewhere
+       other than the main spool, either on a separate dedicated MTA, or in
+       BSMTP files. There is an example of the latter approach in C014.
+
+</P>
+<A NAME="SEC300" HREF="FAQ.html#TOC300">Q9809</A>: How do I implement VERP (Variable Envelope Return Paths) in Exim?
+
+
+<P>
+A9809: See C017.
+
+</P>
+<A NAME="SEC301" HREF="FAQ.html#TOC301">Q9810</A>: I'd like to make a copy of all outgoing messages to a local mailbox. Is
+       there a solution for this using an Exim filter?
+
+
+<P>
+A9810: The following filter makes a copy of every message, except for delivery
+       failure reports:
+
+</P>
+<PRE>
+         # Exim filter</PRE>
+<PRE>
+         # Ignore error messages
+         if error_message then finish endif</PRE>
+<PRE>
+         # Copy if this is the first delivery attempt
+         if first_delivery then
+           unseen deliver copy@your.domain errors_to postmaster@your.domain
+         endif</PRE>
+<P>
+       The keyword "unseen" stops this being a "significant delivery", so that
+       the message goes on to be delivered as normal. The <TT>errors_to</TT> setting
+       changes the envelope sender on the copy so that if there is a problem
+       delivering it, the bounce message is sent to postmaster.
+
+</P>
+<P>
+       You can add to the condition setting to select specific messages.
+       To make a copy of outgoing messages only requires a definition
+       of "outgoing". Because a message may have many recipients, simply
+       testing for your own domain in both the From: and the To: headers is not
+       enough. You can craft your own conditions, but here is one suggestion:
+
+</P>
+<PRE>
+         if $h_from: contains your.domain and
+             foranyaddress $h_to:,$h_cc:
+               ($thisaddress does not contain your.domain)
+         then
+           unseen deliver copy@your.domain errors_to postmaster@your.domain
+         endif</PRE>
+<P>
+       This takes copies of messages whose From: header contains <B>your.domain</B>
+       and whose To: and Cc: headers contain at least one address that does not
+       contain <B>your.domain.</B> See also 
+        <A HREF="FAQ.html#SEC308">Q9817</A>.
+
+</P>
+<A NAME="SEC302" HREF="FAQ.html#TOC302">Q9811</A>: I want to make a copy of outgoing messages to a specific file for each
+       user in a specific directory, using a "save" command in a system filter.
+       How can I arrange for Exim to write to these files under the correct
+       UID/GID?
+
+
+<P>
+A9811: You need to set up a special transport and tell Exim to use it for
+       file deliveries from the system filter. Add the following setting to
+       your configuration:
+
+</P>
+<PRE>
+         message_filter_file_transport = copy_transport</PRE>
+<P>
+       Then define <TT>copy_transport</TT> like this
+
+</P>
+<PRE>
+         copy_transport:
+           driver = appendfile
+           delivery_date_add
+           envelope_to_add
+           user = ${local_part:$sender_address}</PRE>
+<P>
+       This assumes that you want to run the delivery under the uid associated
+       with the local part of the sender address. Alternatively, you could just
+       use <TT>user=exim</TT> and do all the writing under the same UID/GID.
+
+</P>
+<A NAME="SEC303" HREF="FAQ.html#TOC303">Q9812</A>: How can I keep an archive of all mail for some specific local email
+       addresses?
+
+
+<P>
+A9812: You could use a system filter, along the lines of
+
+</P>
+<PRE>
+         if
+           first_delivery and &#60;tests for appropriate addresses&#62;
+         then
+           unseen save
+             /mail/archive/${substr_0_10:$tod_log}
+         endif</PRE>
+<P>
+       That would create a new file for each day. However, in order to use
+       this, you will need to set <TT>message_filter_file_transport</TT> to point to an
+       appropriate transport which includes a setting of "user" to specify
+       which uid to run the saving under, as is described in 
+        <A HREF="FAQ.html#SEC302">Q9811</A>.
+
+</P>
+<A NAME="SEC304" HREF="FAQ.html#TOC304">Q9813</A>: How can I configure Exim to provide a vacation message when there are
+       no local users on my mail hub?
+
+
+<P>
+A9813: See C019.
+
+</P>
+<A NAME="SEC305" HREF="FAQ.html#TOC305">Q9814</A>: We want to be able to temporarily lock out a user by disabling the
+       password and moving the home directory to another place. How can we
+       arrange to reject mail for users in this state?
+
+
+<P>
+A9814: Change the home directory pointer in the passwd file to something
+       distinctive. For example, we use <B>/home/CANCELLED</B> for cancelled users.
+       Then you can pick up such users with this director, which is placed
+       immediately after <TT>system_aliases</TT>:
+
+</P>
+<PRE>
+         cancelled_users:
+           driver = localuser
+           transport = cancelleduser_pipe
+           fail_verify
+           match_directory = /home/CANCELLED</PRE>
+<P>
+       This sends messages for cancelled users to the following special
+       transport:
+
+</P>
+<PRE>
+         cancelleduser_pipe:
+           driver = pipe
+           command = "/opt/exim/util/cancelleduser.sh"
+           ignore_status
+           return_output
+           user = nobody</PRE>
+<P>
+       The script simply generates a message saying that the user is cancelled
+       on its standard output. This gets returned to the original message
+       sender in an error report.
+
+</P>
+<P>
+       If you don't want to change the home directory in the passwd file,
+       an alternative is to check for the non-existence of the home directory
+       with
+
+</P>
+<PRE>
+         require_files = +!$home</PRE>
+<P>
+       instead of setting <TT>match_directory</TT>.
+
+</P>
+<A NAME="SEC306" HREF="FAQ.html#TOC306">Q9815</A>: I need an alias, say "fakeaddress" that should receive a message,
+       strip all reply-to: headers present, substitute another one pointing to
+       "otheraddress" and forward a message to "realaddress".
+
+
+<P>
+A9815: Add this director:
+
+</P>
+<PRE>
+         fakeaddress_director:
+           driver = smartuser
+           domain = (if necessary to restrict the domain)
+           local_parts = fakeaddress
+           headers_remove = reply-to
+           headers_add = reply-to: otheraddress
+           new_address = realaddress</PRE>
+<P>
+       If there are several of these aliases then you could list them in a file
+       along with the corresponding other addresses, and use lookups instead of
+       the fixed values shown above.
+
+</P>
+<A NAME="SEC307" HREF="FAQ.html#TOC307">Q9816</A>: How can I set up Exim to work with Listar?
+
+
+<P>
+A9816: See <B><A HREF="http://www.cs.huji.ac.il/~vadik/listar-exim/.">http://www.cs.huji.ac.il/~vadik/listar-exim/.</A></B>
+
+</P>
+<A NAME="SEC308" HREF="FAQ.html#TOC308">Q9817</A>: I need to take copies of all incoming and outgoing mail for certain
+       users. For each user there may be a different monitoring address.
+
+
+<P>
+A9817: You can adapt the filter solution given in 
+        <A HREF="FAQ.html#SEC301">Q9810</A> by adding a test for
+       the relevant local parts. Create a file containing lines like this:
+
+</P>
+<PRE>
+         user1@domain1:   monitor1@monitor.domain1
+         user2@domain2:   monitor2@monitor.domain2</PRE>
+<P>
+       and then use the following command in a system filter:
+
+</P>
+<PRE>
+         if ${lookup{$sender_address}lsearch{/some/file}{$value}{}} is not ""
+         then
+           unseen deliver ${lookup{$sender_address}lsearch{/some/file}{$value}}
+             errors_address = postmaster@your.domain
+         else
+           if foranyaddress $recipients
+             (${lookup{$thisaddress}lsearch{/some/file}{$value}{}} is not "")
+           then
+             unseen deliver ${lookup{$thisaddress}lsearch{/some/file}{$value}}
+               errors_address = postmaster@your.domain
+           endif
+         endif</PRE>
+<P>
+       It is messy to have to repeat the lookups, but it won't be inefficient,
+       because Exim caches the results of successful lookups.
+
+</P>
+<A NAME="SEC309" HREF="FAQ.html#TOC309">Q9818</A>: How can I add a disclaimer to the end of every message?
+
+
+<P>
+A9818: This isn't as easy as it appears. You cannot just add text to the bottom
+       of messages because of the possibility of MIME attachments. In any case,
+       it is not the job of an MTA to mess with the contents of messages. You
+       can perhaps do things with Exim's transport filters if you really have
+       to, but if the messages originate locally, it would be better to do
+       what you want in the MUA (e.g. force all your local users to have it in
+       their .sig files).
+
+</P>
+<A NAME="SEC310" HREF="FAQ.html#TOC310">Q9819</A>: I would like to append a simple advertisement text to all outgoing
+       and local mails.
+
+
+<P>
+A9819: See 
+        <A HREF="FAQ.html#SEC309">Q9818</A>.
+
+</P>
+<A NAME="SEC311" HREF="FAQ.html#TOC311">Q9820</A>: How can I configure Exim so that all mails adressed to
+       <B><B>something@username.domain.net</B></B> get delivered to <B>/var/spool/mail/username</B>?
+
+
+<P>
+A9820: There are several possibilities, depending on exactly how you are set
+       up. Here is one approach: First, arrange that all the domains you are
+       interested in are local domains, for example, by listing them in a file:
+
+</P>
+<PRE>
+         local_domains = /list/of/domains</PRE>
+<P>
+       If there are lots of them, a DBM or cdb file should be used for a faster
+       lookup. Assuming that "username" is set up as a user on your system, and
+       you have a configuration that can handle <B><B>username@domain.net</B></B> in the
+       normal way, all you have to do is to arrange to convert the recipient
+       address by means of a <B>smartuser</B> director like this:
+
+</P>
+<PRE>
+         user_in_domain:
+           driver = smartuser
+           domains = /list/of/domains
+           new_address = ${if match{$domain}{^([^.]+)\\.domain\\.net\$}{$1}fail}@domain.net</PRE>
+<P>
+       This should be the first director.
+
+</P>
+<A NAME="SEC312" HREF="FAQ.html#TOC312">Q9821</A>: How do I get exim not to add a Sender: header to locally originated
+       mail?
+
+
+<P>
+A9821: It only adds it if the From: header doesn't correspond to the user
+       sending the message. You can't remove it in general (but this may be
+       possible in a future release). However:
+
+</P>
+<P>
+       (1) You can get it removed later, by putting
+
+</P>
+<PRE>
+         headers_remove = Sender</PRE>
+<P>
+       on all your transports. This doesn't test for locally originated mail,
+       but you could use a more complicated expansion string to make that test.
+       For example
+
+</P>
+<PRE>
+         headers_remove = ${if eq{$sender_host_address}{}{Sender}}</PRE>
+<P>
+       which removes it only if there is no sending host address.
+
+</P>
+<P>
+       (2) If your <EM>real</EM> question "how do I submit mail from UUCP
+       without it adding Sender:?" Then see 
+        <A HREF="FAQ.html#SEC154">Q0603</A>.
+
+</P>
+<A NAME="SEC313" HREF="FAQ.html#TOC313">Q9822</A>: How can I get Exim to work with mailman?
+
+
+<P>
+A9822: The Exim mailing list uses the configuration that is given in the "how
+       to" information at <B><A HREF="http://www.exim.org/howto/mailman.html.">http://www.exim.org/howto/mailman.html.</A></B>
+
+</P>
+<A NAME="SEC314" HREF="FAQ.html#TOC314">Q9823</A>: Is there any way to have messages sent to a specific local address
+       delayed by - say - 24 hours?
+
+
+<P>
+A9823: Using Exim 3.10 or later, the answer is "yes". Set up a <B>smartuser</B>
+       director like this:
+
+</P>
+<PRE>
+         delay:
+           driver = smartuser
+           domains = the.domain
+           local_parts = thelocalpart
+           condition = ${if &#60; ${$message_age}{86400}{yes}{no}}
+           new_address = :defer: message not old enough</PRE>
+<P>
+       Of course, this will also have the effect of setting a retry time for
+       the address. You may want to set a special retry rule for it.
+
+</P>
+<BR><H2><A NAME="SEC315" HREF="FAQ.html#TOC315">99. LIST OF SAMPLE CONFIGURATIONS
+
+</A></H2>
+<P>
+Each sample configuration is held in a separate file in the <B>config.samples</B>
+directory. Those with names of the form Cnnn are Exim configurations; those
+with names of the form Fnnn are filter file fragments.
+
+</P>
+<P>
+<a href="config.samples/C001">C001:</a>  "This config will support delivery across multiple systems using NIS to
+       look up delivery addresses from the <B>mail.aliases</B> database."
+
+</P>
+<P>
+<a href="config.samples/C002">C002:</a>  "Although exim not intended for use in UUCP environment (it doesn't
+       know anything about bang!path addresses), I'm successfully using it for
+       delivering mail to UUCP clients."
+
+</P>
+<P>
+<a href="config.samples/C003">C003:</a>  "I've read down through 
+        <A HREF="FAQ.html#SEC152">Q0601</A> and your request for UUCP examples. Here's
+       how I'm doing it." (This example uses routers.)
+
+</P>
+<P>
+<a href="config.samples/C004">C004:</a>  "Here's a BSMTP over UUCP [configuration] - the transport is Taylor/GNU
+       UUCP - which takes the long option types." (This example uses
+       directors.)
+
+</P>
+<P>
+<a href="config.samples/C005">C005:</a>  "I am using a virus scanner program that is invoked by a pipe, scans the
+       mail and re-invokes Exim to do the delivery. The pipe is invoking a perl
+       script that tries to unpack and MIME, zip and other archives and then
+       applies the McAfee scanner on the results."
+
+</P>
+<P>
+<a href="config.samples/C006">C006:</a>  "This is how I have configured a PP-inspired vacationnote, there is
+       (was?) such a feature in PP. The user makes a file "tripnote" in his/her
+       home directory, the message is passed to the sender once with a short
+       leading text."
+
+</P>
+<P>
+<a href="config.samples/C007">C007:</a>  "If I host a domain <B>foo.dom</B> on my machine as a virtual domain I expect
+       it to be completely virtual and separate from other mail domains that
+       end up on my machine."
+
+</P>
+<P>
+<a href="config.samples/C008">C008:</a>  "And of course it is possible to do a very interesting solution to
+       this [virtual domains] using LDAP."
+
+</P>
+<P>
+<a href="config.samples/C009">C009:</a>  "These are suggested parts of a configuration for looking up users in
+       <B><B>/etc/passwd.domain</B></B> rather than in <B>/etc/passwd</B> ..."
+
+</P>
+<P>
+<a href="config.samples/C010">C010:</a>  "One of our customers is looking for us to support addresses of the form
+       <B><B>username+extension@domain.com</B>,</B> primarily for use with procmail."
+
+</P>
+<P>
+<a href="config.samples/C011">C011:</a>  "Thanks to Philip and others I now have my ISP style config built and
+       therefore am posting the final configuration fragments to the list in
+       case anyone else wants to do a similar thing."
+
+</P>
+<P>
+<a href="config.samples/C012">C012:</a>  "I've written a small chapter how-to configure Exim for use with UUCP
+       (mostly condensed from the exim-user mailing list plus some
+       experimenting) and would be glad if it could be included in the Exim
+       documentation."
+
+</P>
+<P>
+<a href="config.samples/C013">C013:</a>  "I've take some tips from the FAQ about permitting only certain users
+       to send to external mail and came up with my own for the receiving
+       part."
+
+</P>
+<P>
+<a href="config.samples/C014">C014:</a>  "If I have a situation where a site I MX for has a known outage I stash
+       all their mail into a directory in BSMTP format."
+
+</P>
+<P>
+<a href="config.samples/C015">C015:</a>  "This approach to virtual domains has helped me a great deal, and is so
+       easy to maintain (add and modify as appropriate)."
+
+</P>
+<P>
+<a href="config.samples/C016">C016:</a>  "Herewith my configuration." (A complete configuration, including simple
+       virtual domains, along the lines of C015).
+
+</P>
+<P>
+<a href="config.samples/C017">C017:</a>  "I have gotten the new VERP feature of Exim 2.054 working in test, along
+       with some supporting programs to handle bounces that do come back."
+
+</P>
+<P>
+<a href="config.samples/C018">C018:</a>  "This Majordomo configuration removes a lot of the aliases, and
+       automates a lot of the other functions based on whether the files or
+       directories exist."
+
+</P>
+<P>
+<a href="config.samples/C019">C019:</a>  "The following configuration file entries can be used to provide a
+       'vacation'-style function for a mailhub which has no local users."
+
+</P>
+<P>
+<a href="config.samples/C020">C020:</a>  "I was asked for a copy of the programs we were using to mail
+       everybody."
+
+</P>
+<P>
+<a href="config.samples/C021">C021:</a>  "Here is some sample code that might be useful for handling
+       X-Failed-Recipients headers generated by Exim, with mailing lists."
+
+</P>
+<P>
+<a href="config.samples/C022">C022:</a>  "This is the Exim configuration file of a machine which delivers mail to
+       several local domains where the mail is delivered locally, several hairy
+       domains, handled as described below, and a half-virtual domain, which is
+       first processed by its special alias file, then processed as other local
+       domains (including the processing by the global alias file)."
+
+</P>
+<P>
+<a href="config.samples/C023">C023:</a>  A Perl script and instructions for hooking it into Exim in order to
+       handle disposition-notification-to and return-receipt-to by using a
+       shadow transport to send copies of delivered messages to the script.
+
+</P>
+<P>
+<a href="config.samples/C024">C024:</a>  "In case anybody wants to use a MySql database to store aliases this is
+       how I managed to get my site working."
+
+</P>
+<P>
+<a href="config.samples/C025">C025:</a>  "As promised here is the way I got Exim to delver to Cyrus mailboxes if
+       the user exists in the MySql database."
+
+</P>
+<P>
+<a href="config.samples/C026">C026:</a>  "The following configuration and program will allow messages going to
+       AOL only, to be filtered thru a Perl script. This Perl script will
+       convert any URL's to the HTML syntax. In addition, the transport will
+       use VERP to send a unique envelope sender with each message."
+
+</P>
+<P>
+<a href="config.samples/C027">C027:</a>  "This is an FYI to demonstrate how to have exim work with SSL using the
+       stunnel wrapper and its underlying OpenSSL libraries and toolkit."
+
+</P>
+<P>
+<a href="config.samples/C028">C028:</a>  "This Python script reads from stdin and writes to stdout. It strips all
+       the MIME attachments from a mail message that are one of the mime types
+       listed on the command line. Exim can use it in its configuration file,
+       for example, as follows:"
+
+</P>
+<P>
+<a href="config.samples/C029">C029:</a>  "The standard way to connect one's MTA to a list manager seems to be to
+       add a set of aliases for <EM>every</EM> list one creates. Once upon a time, I
+       crufted a set of configs from Smail to work with majordomo, to
+       automaticaly recognize the standard patterns, for all lists in
+       existence...I have setup a set of transports and directors for Exim,
+       which will do the same thing for mailman."
+
+</P>
+<P>
+<a href="config.samples/C030">C030:</a>  "I am currently configuring an exim for a site that will to mail
+       hosting for several domains. I want the domain holders to have control
+       over 'their' alias files, being able to create their own aliases.
+       However, I don't want them to have postmaster, abuse and other role
+       accounts under their control."
+
+</P>
+<P>
+<a href="config.samples/C031">C031:</a>  "These are config file snippets for handling certain remote addresses as
+       local, and making only real external addresses visible to users."
+
+</P>
+<P>
+<a href="config.samples/C032">C032:</a>  "This is the Exim Nervous Mailbox Quota Suite.  It does not impose
+       hard quotas on users' mailboxes, but it makes a user nervous by
+       putting all his mail in a secondary mailbox, inaccessible to the
+       user, when he is over his quota.  When the user clears his
+       mailbox (i.<B>e.,</B> deletes mail to make his mailbox below the quota
+       again), mail from his secondary mailbox is transferred back to
+       his primary mailbox, in FIFO order."
+
+</P>
+<P>
+<a href="config.samples/C033">C033:</a>  "Here's our current automatic vacation recipe".
+
+</P>
+<P>
+<a href="config.samples/C034">C034:</a>  "This is a HOW-TO for setting up Exim to support SMTP authentication
+       under different environments, including regular password files, PAM
+       and NIS."
+
+</P>
+<P>
+<a href="config.samples/F001">F001:</a>  "I thought that the rest of the list may be interested in reviewing our
+       filter as a starting point for their own system message filter."
+
+</P>
+<P>
+<a href="config.samples/F002">F002:</a>  "... program which refused mail from unknown addresses until they mailed
+       me promising not to spam me ... since I'd already thought through how
+       to do it in Exim, and knew it'd be slightly easier than falling out of
+       bed, I went ahead and did it."
+
+</P>
+<P>
+<a href="config.samples/F003">F003:</a>  "Here's four checks installed in our system wide filter that knock out
+       a lot of otherwise hard to detect rubbish."
+
+</P>
+<P>
+<a href="config.samples/F004">F004:</a>  "This is an Exim filter snippet to change locally-generated Message-Id:
+       and Resent-Message-Id: headers to world-unique values."
+
+</P>
+<HR>
+
+</BODY>
+</HTML>
diff --git a/NewStuff.html b/NewStuff.html
new file mode 100644 (file)
index 0000000..46e1bb9
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>New Features in Exim</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>New Features in Exim</h1>
+
+    <p>This file contains descriptions of new features that have been
+    added to Exim, but have not yet made it into the main manual
+    (which is most conveniently updated when there is a relatively
+    large batch of changes). The ChangeLog file contains a brief
+    listing of <b>all</b> changes, including bug fixes.</p>
+
+    <p>When the manual is up-to-date with the code and there have been
+    a lot of recent changes, the more important ones may be listed
+    here for convenient reference.  Otherwise this file will contain
+    just these two introductory paragraphs.</p>
+
+
+<h2>Version 1.90: Short list of some of the new things</h2>
+<ol>
+<li> New expansion operators ${local_part:<string>}, ${domain:<string>}, and
+${hash_<n>_<m>:<string>} and the "extract" operator has been extended to a new
+form: ${extract {number} {separators} {string}}.
+
+<li> There's a new testing option -bh which must be followed by an IP address.
+This runs a fake SMTP session as if from that IP address, using stdin and
+stdout. Additional comments as to what is going on are written to stderr. These
+include lines beginning with "LOG" for anything that would have been logged.
+This facility is for testing configuration options for blocking hosts and/or
+senders and for checking on relaying control.
+
+<li> If there is only a single recipient address in an incoming message, then
+when the Received: header line is being built, the expansion variable
+$received_for is set to contain that address. Otherwise that variable is always
+empty. The default setting of received_header_text has been changed to include
+the use of this new variable when set.
+
+<li> The filtering facilities now include 10 variables with names n0 - n9. These
+start out at zero and can be incremented by the "add" command. After the system
+filter has run, a copy of the variables is taken, and made available in user
+filters as the expansions $sn0 - $sn9. Thus a system filter can, for example,
+do "scoring" which users' filters can make use of.
+
+<li> The freeze and fail filter commands can now be followed by the word "text"
+and a string giving an error message.
+
+<li> The amount of disc space available is checked whenever SIZE is received on
+a MAIL FROM command.
+
+<li> There is a facility for looping through a list of addresses in mail
+filters. It uses a new "foranyaddress" condition.
+
+<li> A facility for local "shadow transports" has been added. This is somewhat
+experimental and may change in future.
+
+<li> There is a new defaulting option that can be used with single-key search
+types. If the type name is followed by "*@" (e.g. lsearch*@) then, if the
+initial lookup fails and the key contains an @ character, a second lookup is
+done with everything before the last @ replaced by *.
+
+<li> Directors and routers now have generic options headers_add and
+headers_remove.
+
+<li> If an SMTP greeting line contains ESMTP, Exim now sends EHLO instead of
+HELO, and if it is told the SIZE parameter is supported, it adds SIZE=xxx to
+each MAIL FROM command.
+
+<li> Customization of error messages generated by Exim is now supported.
+
+<li> Delivery failure messages now contain an X-Failed-Recipients header,
+listing all failed addresses, for the benefit of programs that try to analyse
+such messages automatically.
+
+<li> If /dev/null is generated by an aliasfile or forwardfile, arrange to skip
+its delivery at top level, thus avoiding the need for a uid/gid on the
+transport.
+
+<li> When a delivery is not part of a queue run (typically an immediate delivery
+on receipt of a message), the directors are always run for local addresses, and
+local deliveries are always attempted, even if retry times are set for them.
+
+<li> The smtp_etrn_serialize option (default TRUE) prevents the simultaneous
+execution of more than one queue run for the same argument string as a result
+of an ETRN command.
+
+<li> The "errors_to" option is now a generic option that is available for all
+directors and routers, instead of just aliasfile and forwardfile.
+
+<li> For sendmail compatibility, if an incoming, non-smtp message has a From:
+header containing just the unqualified login id of the calling user, stick it
+in angle brackets, with the gecos field in front.
+
+<li> There's a new variable called sender_rcvhost, for use in Received headers,
+to allow them easily to be strictly compatible with RFC 822. The default header
+now uses it.
+
+<li> The domainlist router has a option called host_find_failed, which tells it
+what to do if a host which it tries to look up does not exist.
+
+<li> Several new rewrite flags have been added.
+
+<li> Alias files can now contain the items :defer: and :fail:.
+
+<li> Support for LDAP.
+</ol>
+<p>End</p>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: NewStuff.html,v 1.2 2000/04/09 22:02:32 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/branding/branding.html b/branding/branding.html
new file mode 100644 (file)
index 0000000..5a98e55
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Provider Branding</title>
+    <base target="branding">
+  </head>
+
+  <body bgcolor="white" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <center>
+    <!-- Add your branding in here - like the one below -->
+    <!-- <A HREF="http://www.theplanet.net/"><img src="http://www.exim.org/images/planico.png" border=0></a> -->
+    </center>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+</html>
diff --git a/changelogs/ChangeLog-2.10.html b/changelogs/ChangeLog-2.10.html
new file mode 100644 (file)
index 0000000..febf349
--- /dev/null
@@ -0,0 +1,417 @@
+Version 2.10
+------------
+
+1. The log message for a skipped syntax error in a filter file needed tidying.
+
+2. After a "foranyaddress" condition succeeds in a filter file, the value of
+$thisaddress is available in the commands. It holds whatever what the last
+value tested.
+
+3. Another adjustment to the FreeBSD makefile to make it work in ports and
+non-ports environments.
+
+4. scripts/Configure-Makefile was testing for PERL_COMMAND in the local
+configuration without anchoring the check to the start of a line.
+
+5. Give the error "no local part" instead of "missing colon in route" for
+addresses like <@abcd>.
+
+6. Nested ${lookup} and ${if} items in expanded strings were not working
+correctly if "fail" was present in one of the internal items.
+
+7. A macro expansion at the start of a continuation line of a string was
+getting ignored.
+
+8. Escapes such as \n are now handled conventionally in string expansions.
+
+9. Added numeric comparisons to string expansions.
+
+10. Changed the space checking to use the f_bavail field returned by the
+stat(v)fs function instead of f_bfree, thus testing non-superuser space only.
+Also, for those OS which have it, changed from f_ffree to f_favail for checking
+the number of inodes.
+
+11. Errors in expanding the name of a perl function or its arguments were not
+being passed back correctly.
+
+12. The count of lines in a message (which is used for computing the value for
+the SIZE option on outgoing messages) was not being correctly set for incoming
+non-local SMTP mail.
+
+13. If no_smtp_check_spool_space is set, Exim refrains from checking that there
+is enough space in the spool partition when it receives a SIZE setting on an
+incoming message.
+
+14. Added message_size_limit_count_recipients.
+
+15. Implemented quota_warn_threshold in appendfile.
+
+16. Running exim with -q but without -bd could cause it to crash.
+
+17. In the delivery log line, don't print the original address in <> if the
+only difference from the original address is in the case of the domain(s).
+
+18. Removed the "debug" transport as I haven't used it for years and it is
+simply clutter.
+
+19. Write a log line when a message is abandoned because of a ridiculously long
+header line.
+
+20. If an error is detected while receiving a batch SMTP message (using -bS)
+the error message that is sent now contains information about the sender and
+recipients, and a copy of the headers, when such information has been read
+before the error was detected.
+
+21. If errors_to was set in forwardfile, and a headers_add option used
+$local_part or any other address-specific expansion, the expansion went wrong.
+(The verification of the errors_to address was clobbering the values.) This
+could have applied to other directors and routers too.
+
+22. The smtp_log_connections option should really be called
+log_smtp_connections to fit in with other naming. Added the "correct" name as
+a synonym, and hide the old one in displays.
+
+23. If daemon_smtp_service was set to a named service on a machine with a byte
+order different to network byte order, Exim listened on the wrong port. This
+might have been introduced by change 12 of 2.03.
+
+24. helo_verify wasn't working in the case where the helo argument was a valid
+(but incorrect) host name.
+
+25. Missing information in log for failures from multiple remote hosts.
+
+26. If a malformed response to an SMTP command contained newlines, they were
+written verbatim to the log. They are now converted to \n (and other
+non-printing characters are also escaped).
+
+
+Version 2.054
+-------------
+
+1. Insert missing fflush() if starting an SMTP session is rejected.
+
+2. In the default configuration, changed the retry specification to
+
+ *  *  F,2h,15m; G,16h,1h,1.5; F,4d,8h
+
+The difference is that after trying every 15 minutes for 2 hours, it next tries
+one hour later rather than two hours later.
+
+3. Remove the definition of os_strsignal from the FreeBSD os.h, as it seems it
+doesn't have it (ditto BSDI) and also from OpenBSD, just in case. My assumption
+that it's on all BSD systems (based on NetBSD) is clearly false.
+
+4. Updated exim_tidydb so that with the -f flag, it checks for the continued
+presence of a message that has a message-specific retry record.
+
+5. Fix exiqsumm so that it correctly recognizes domain literals in recipient
+addresses.
+
+6. The install script should now install the Texinfo documentation if
+INFO_DIRECTORY is defined, and the source is available.
+
+7. If a screwed-up host sent an SMTP response that contained LF characters,
+they got left as LFs when included in the retry database. This could mess up
+the format of the output from exim_dumpdb. They are now converted into \n.
+
+8. Multiline responses from a remote host are better formatted when -d is set
+for the smtp transport.
+
+9. Fixed a very low-probability file descriptor leak in eximon; if a -J file
+existed and reading the -H file failed, the -J file didn't get closed.
+
+10. Added to the FreeBSD makefile, on Sheldon Hearn's recommendation:
+
+.if ${PORTOBJFORMAT} == "elf"
+XLFLAGS+=-Wl,-rpath,${X11BASE}/lib
+.endif
+
+It allows eximon to be built on FreeBSD ELF systems.
+
+11. Fixed bug in libident/support.c causing crashes on malformed ident data.
+Also fixed another typo bug in libident.
+
+12. If headers_sender_verify was set and there was a syntax error in a header,
+the error message just said "no valid sender". Now it gives details of the
+syntax error.
+
+13. If the expansion of headers_add for pipe and smtp transports failed, the
+reason for the failure was not included in the error message (it was for
+appendfile).
+
+14. Added the "check_local_user" magic to {current,home}_directory in
+forwardfile.
+
+15. Changed the way the Makefile works when embedding Perl. The user need now
+specify only EXIM_PERL=perl.o. The Makefile builder sets default values for the
+other parameters at the top of the file, using the setting of PERL_COMMAND to
+run Perl, when EXIM_PERL is set.
+
+16. When an alias lookup defers because no addresses generated, include the
+syntax error message in the message.
+
+17. In the forwardfile director, the skip_syntax_errors option now applies to
+filter files as well as to conventional .forward files. Added
+syntax_errors_text option to forwardfile and aliasfile.
+
+18. Fixed potential segfault crash in MBX delivery (while computing the
+timestamp).
+
+19. Added $parent_domain, $parent_local_part, $address_file, $address_pipe.
+
+20. The router and director options "domains", "local_parts", "senders", and
+their matching "except_" partners are now expanded.
+
+21. The -bp option wasn't reading messages' -J files, and so wasn't marking
+addresses "delivered" as early as it could.
+
+22. Added the queue_only_file option.
+
+23. The autoreply transport now has a reply_to option, and the "mail" command
+in filters supports "from" and "reply-to" keywords.
+
+24. Pedantic message correction: "all its recipients" => "all of its
+recipients".
+
+25. Added default definition of EX_CONFIG for systems that don't have it.
+
+26. Set no_expn on the forwardfile director in the default configuration.
+
+27. Skip logwrite in filter files when run as a result of EXPN.
+
+28. Allow leading dots in local parts. Exim is already extended to allow null
+components inside or at the end of local parts (e.g. a..b.@xyz) so it doesn't
+seem worth making this extension specifically configurable.
+
+29. Added rbl_log_rcpt_count and rbl_log_headers.
+
+30. The setting of KEEPALIVE on an incoming socket was not being bypassed when
+-bh was in use, leading to a warning message.
+
+31. There was a long-standing problem with queue runners when a delivery that
+was started by a queue runner passed on one or more TCP/IP connections to
+another process. The problem was that the queue runner did not know this, and
+went on to start more deliveries. If there were a large number of messages
+queued for one host, this could cause too many delivery processes to be
+running. The queue runner process is now told about additional descendent
+processes, and it waits for them all to finish before moving on to the next
+message.
+
+
+
+Version 2.053
+-------------
+
+1. Reword message for not-found driver to emphasize which kind of driver.
+
+2. Give pid and ppid in message about process creation failure.
+
+3. If addresses on the command line for a -t message cause all included
+addresses to get deleted, give a special "no recipients" error, mentioning the
+cause. (Previously the message just never got delivered to anybody.)
+
+4. If a user's filter file has "seen finish" with no significant deliveries,
+write a log line of the form "=> discarded <address> D=director" to indicate
+what has happened.
+
+5. Added match_directory to forwardfile.
+
+6. If match_directory was set on localuser, and it was an expanded string, and
+the resulting pattern was a regular expression, and more than one address was
+processed by this director such that the expansions gave differing patterns,
+then things went wrong because the first pattern was used every time owing to
+caching of the compiled regular expression.
+
+7. When doing a 2-stage queue run (using the -qq option) a message about
+queue_smtp was written to each individual message log (though suppressed on the
+main log).
+
+8. If the log level is set less than 5, messages about retry time not reached
+are no longer written to individual message logs.
+
+9. If the replacement string for a rewrite rule is "*" then addresses matching
+the patterns and the flags are not rewritten, and no further rules are tried.
+
+10. Added -bpr, -bpru, -bpra which are like the versions without the 'r', but
+display the list in random order.
+
+11. Added log_smtp_syntax_errors.
+
+12. Added ${uc:} operator.
+
+13. Added ignore_fromline_nets and ignore_fromline_local.
+
+14. After SMTP transport errors such as "connection reset by peer" the text of
+the error appeared twice in the log line.
+
+15. Added :unknown: for use in alias files.
+
+16. Give full search_type in debugging info for aliasfile.
+
+17. Added generic transport option message_size_limit.
+
+18. Added quota_filecount to appendfile, to apply when delivering into a
+directory.
+
+19. When delivering into a directory and quota was exceeded, the "time since
+last read" field, which applies to individual mailboxes, was getting set to to
+junk values, and could cause a retry record to time out prematurely.
+
+20. Show sender address in debugging output.
+
+21. Allow non-trusted users to use -f when running -bt or -bv.
+
+22. If a transport returns PANIC, Exim used to panic log and die. Now it just
+panic logs - so other addresses do get processed.
+
+23. In aliasfile and forwardfile, the *_transport options can now be expanded
+strings. If the result isn't a named transport, the address gets deferred, and
+the message gets frozen.
+
+24. Expanded transport names on directors and routers are now checked only if
+the driver handles the address.
+
+25. Bug introduced in new SMTP temporary problem handling meant that the
+wait-smtp database wasn't always updated when it should have been.
+
+26. Added support for MBX mailboxes (a) the format and (b) the locking.
+Upgraded exim_lock.
+
+27. Added body_only and headers_only generic transport options.
+
+
+Version 2.052
+-------------
+
+1. Added return_path generic option to the transports. This can re-expand the
+return path at transport time and do things like sticking in the recipient's
+address (i.e. it makes VERP support possible).
+
+2. If, during a remote parallel delivery in a subprocess, an SMTP error
+response had a humongously long text associated with it, Exim crashed.
+
+3. When there are no deferred addresses, convert any message-specific retry
+record updates into deletes. This does some useful tidying in cases when one
+host produces such an error and a subsequent one succeeds or fails hard.
+
+4. If retry_include_ip_address was set false in an SMTP transport, then the
+retrying was not searching for a rule keyed on the domain in addition to a rule
+keyed on the host.
+
+5. Added "rewrite" option to smartuser, cf aliasfile and forwardfile.
+
+6. When verifying or testing an address, if both a director and router are set,
+show both in the output, as is done on log lines for deliveries.
+
+7. Implemented lookup_open_max for controlling the maximum number of cached
+lookup opens for lookup types that use real files.
+
+
+Version 2.051
+-------------
+
+1. Added bsdi4.0 as an os-type, equivalent to BSDI.
+
+2. Removed definition of DN_EXPAND_ARG4_TYPE as u_char * for IRIX 6.5, as that
+release of IRIX is now compatible with most other OS so the default is OK.
+
+3. The exiwhat script no longer uses "cut" to fish the process numbers out of
+"ps" output because it doesn't work on all systems. (IRIX 6.5 has longer pids.)
+It now uses awk instead, to get the first field, whatever length it is.
+
+4. Installed PCRE version 2.01 (Perl 5.005 compatible).
+
+5. Revamped the way the working makefile in the build directory is created.
+This also involved some modification to some of the files in the scripts
+directory. At the top level one still runs "make" on its own, but this no
+longer involves a nested call to "make" in order to create the lower-level
+makefile (which is now called Makefile with a capital M). If run from within
+the build directory, it is no longer capable of re-building itself. Further
+revampings were done to ensure that the behaviour is the same on IRIX as on
+other systems with regard to rebuilding. The "make" program on IRIX behaves
+differently in regard to targets that are forced but don't actually rebuild the
+file of that name.
+
+6. The source has been tidied in places as a result of a -fullwarn run on the
+IRIX 6.5 compiler. In Exim itself, one set of warnings, in store.c, remains; I
+haven't been able to find a way to write the code so that it doesn't generate
+them. In the Exim monitor, there are warnings for the modified StripChart and
+TextPop modules taken from the Athena widgets.
+
+7. LFLAGS has been set to -Wl,-LD_MSG:off=85 for IRIX 6.5. This suppresses the
+warning about StripChart and TextPop overriding those in the Xaw library when
+linking eximon.bin.
+
+8. Unwanted \n at end of log message for too many message in one connection
+removed.
+
+9. Log entries for queued messages on a single SMTP connection other than the
+first such message were incorrectly given as if the queueing was for too many
+SMTP connections, instead of for too many messages or load average too high.
+
+10. Changed the OS/Makefile-FreeBSD setting to X11=$(X11BASE) instead of
+X11=/usr/X11.
+
+11. Improved the output for host testing with the -bh option; more detail of
+the order of testing accept/reject lists etc. is now given.
+
+12. The pipe transport now gives the signal name in the log message when its
+child is ended by signal. For Solaris 2, BSD-derived systems, and Linux, the
+strsignal() function is called. For the rest, there is a built-in function that
+covers the most important signals.
+
+13. The pipe transport now attempts to give a possible explanation when its
+child is ended by a non-zero exit code. As these aren't standardised, it has to
+use the uncertain phrase "could mean".
+
+14. Helo_accept_junk_hosts wasn't allowing the junk to start with [.
+
+15. Remove trailing spaces from Local/Makefile when building Makefile, as
+they can cause trouble in some of the sed commands for building scripts.
+
+16. A new test for options settings threw up two obscure ones that were out of
+alphabetical order in the source. Also some poorly worded configuration error
+messages.
+
+17. The domainlist router wasn't accepting the route_queries option if
+route_list wasn't set, complaining "either route_list or route_file or
+route_query required".
+
+18. The queryprogram router had options called "user" and "group" which
+conflicted with the generic options of the same name (which got invented
+later, for 1.929). The options for queryprogram have been renamed
+"command_user" and "command_group".
+
+19. When the -t option was set, Exim was barfing at header lines like
+
+  To: Recipient list not shown:;
+
+and complaining about "empty address", even if there were valid addresses in
+the Cc or Bcc headers.
+
+20. The second part of change 10 for 2.05 was a disaster in the case of
+temporary errors after MAIL FROM, DATA, and ".", because it meant that one
+dodgy message could hold up other mail for the recipients involved. Backed it
+out. However, the action after RCPT TO is OK, and remains.
+
+21. If a listening daemon was run without a -q option to start queue-runners,
+it could occasionally crash when a message-accepting process ended.
+
+22. Added smtp_accept_max_per_host. Required smtp_accept_max to be set if this
+or smtp_accept_queue is set.
+
+23. Added keepalive options for incoming and outgoing SMTP.
+
+24. Reworded the message that is output at the end of filter testing, as it was
+confusing to users. (It wasn't clear that 'delivered is false' meant that the
+message would be delivered normally.)
+
+25. Bug in handling exceedingly long configuration lines fixed.
+
+26. Added Malcolm Beattie's patch for calling Perl from string expansion.
+
+27. A new approach to handling temporary errors in the smtp transport. Details
+documented in NewStuff.
+
+28. Bug in exiqsumm showed up under Perl 5.005; the sorting wasn't working
+correctly.
diff --git a/changelogs/ChangeLog-2.11.html b/changelogs/ChangeLog-2.11.html
new file mode 100644 (file)
index 0000000..3cce25d
--- /dev/null
@@ -0,0 +1,112 @@
+Version 2.11
+------------
+
+1. Adjustment of code for catching over-long multi-line SMTP responses to
+do a better job in the case of packets not ending in \r\n.
+
+2. Ignore any user-supplied whitespace (in particular, newlines) at the end of
+smtp_banner; previously it was starting a continuation response, and then never
+completing it, as there was nothing left.
+
+3. Eximstats: computed incorrect total size of local deliveries.
+
+4. If NO_SYSEXITS is set, don't make assumptions about the existence of exit
+definitions in the strexits() function in os.c.
+
+5. Tweak DGUX os.h file for strsignal and add HAVE_MMAP.
+
+6. If a bounce message was constructed without any directing/routing having
+occurred, Exim crashed. This could be provoked by -Mg, or if routing/directing
+was deferred until the message retry time was exceeded. The bounce message
+could be sent multiple times in the latter case, and did not contain a copy of
+the original.
+
+7. Don't insist on a transport for the domainlist router if verify_only is set.
+
+8. The count of lines in messages read from stdin with the -i option (ended
+only by EOF) was not getting set correctly.
+
+9. When calling itself to send an error or a warning message, Exim wasn't
+setting the -oi option, thus causing truncation of any enclosed text such as a
+copy of the incoming message or the output of a pipe if it contained a line
+with only a full stop in it.
+
+10. Added dns_check_names_pattern to provide control over the syntax check.
+
+11. If a DNS MX lookup fails the syntax check, don't go on to look for an A
+record; and if called from lookuphost, don't go on to try widening the name.
+
+12. Add the identity of the RBL domain to the log when in RBL warning mode,
+and also to the messages output during -bh testing.
+
+13. Do not stop scanning the list of RBL domains when one matches in warning
+mode; ensure that X-RBL-Warning headers are added for all that match.
+
+14. When testing with -bh, output a reminder after the final 250 after "." that
+this is not for real.
+
+15. Added max_username_length.
+
+16. The log phrase "Error while handling error message" has been made more
+accurate by changing it to "Error while reading a message with no usable sender
+address", and a reference to the generating message added if there is one.
+
+17. If -oee was set and the sender of a malformed incoming message was <>, so
+that no error message could be sent, the return code was zero rather than 1
+(i.e. it wasn't noticing it hadn't sent an error message).
+
+18. If a non-SMTP message contains no recipients and error reporting is by mail
+and no error message can be sent, the return code from Exim is now 2 instead of
+1. This is so it can detect this case in the autoreply transport.
+
+19. If the autoreply transport detects return code 2 for the message it has
+submitted (no recipients) it no longer defers delivery. This means that
+autoreplies to $sender_address when that is <> just get ignored (but there is
+an entry on the log for the error).
+
+20. Improved the error message that is given when an alias file or route list
+file has the wrong mode, since this seems to confuse people.
+
+21. Treat disconnection after end of data as a message error rather than a host
+error.
+
+22. Expanded the "file has wrong uid/gid" message to include the uids or gids
+which don't match.
+
+23. Installed PCRE 2.02 (minor tidies).
+
+24. If a system filter discarded a message (by "seen finish" or similar) then
+the log said "original recipients ignored", but had no => line. Now it contains
+"=> discarded (message_filter)" instead, to be like the logging that happens
+when a user filter discards a message.
+
+25. Exinext was not displaying routing delays for specific addresses if the
+domain successfully routed to a remote host. These can now exist in these
+circumstances after temporary recipient-specific errors. Likewise it was not
+capable of picking out message-specific retry data when given a message id.
+
+26. Pipe delivery timeouts were not working if the writes to the pipe got
+blocked (they only worked while waiting for the process to complete after doing
+all the writing). Furthermore, after a timeout Exim just killed the process it
+had created; if that process created further subprocesses they got left
+running. It now makes the created process a process group leader, and kills the
+whole process group, which will catch simple cases that don't themselves start
+new process groups. Also, after detecting a timeout and killing the subprocess,
+the third process that was reading from the output pipe didn't always die
+immediately. The reading process is now forcibly killed along with the timed
+out process group.
+
+27. If a queryprogram process timed out, Exim wasn't killing it. It now kills
+the whole process group, as for pipes (see 26 above).
+
+28. If a pipe produced output, any error message was omitted from the bounce
+message (this was to avoid "output message generated"), but this omitted
+information about timeouts. The error information is now included except for
+DEFER and OK returns.
+
+29. Added "hosts_override" to the smtp transport.
+
+30. Fixed two code infelicities in mailstore format delivery: (a) after opening
+RDONLY, a stream of type "w+" was made (this fails on Linux), and the call to
+fdopen() was not checked for errors; (b) the fd was closed directly, instead of
+the stream.
diff --git a/changelogs/ChangeLog-2.12.html b/changelogs/ChangeLog-2.12.html
new file mode 100644 (file)
index 0000000..e72337e
--- /dev/null
@@ -0,0 +1,61 @@
+Version 2.12
+------------
+
+1. Adjusted scripts/os-type to cope with IRIX 6.5.2m which annoyingly has to be
+treated as a different OS.
+
+2. Removed #define SYSCTL_IP_INTERFACES from OS/os.h-IRIX, because this feature
+is only in IRIX versions greater than or equal to 6.2.
+
+3. Removed the optimization for copying routing from one address to another
+with the same domain. This should have been cut out as soon as the possibility
+of using $local_part in router configurations was recognized. Also, using
+"unseen" on a router causes problems as well.
+
+4. The use of "unseen" on a router or director was not working properly if
+there was a deferment of delivery. Whichever of the unseen/real deliveries
+deferred did not get tried again because Exim thought it had delivered the
+original address.
+
+5. Error message when remote closed connection had spurious ": NULL" on the end
+of it.
+
+6. Eximon: if a message had no undelivered addresses, Eximon was omitting it
+from its queue listing.
+
+7. The name of a driver was not being macro-expanded.
+
+8. Remove the old "expiring address" code from smartuser, as it hasn't been
+compiled for a long time, and was throwing up comments in Y2K testing.
+
+9. Added USE_DB=yes to the FreeBSD Makefile, since all versions come with
+Berkeley DB.
+
+10. Added /usr/include/mit in the XINCLUDE for Ultrix, since some versions need
+it.
+
+11. Modified the arch-type script to call uname -m if uname -p returns
+"unknown", which apparently happens on some Linux systems.
+
+12. If a forward file contained an unterminated quote or comment, it caused the
+address not to be terminated at the end of the line, thus swallowing subsequent
+lines.
+
+13. Split the HP-UX configuration files into HP-UX-9 for release 9 and HP-UX
+for the current release, which is more POSIX compliant. This has been tested on
+release 11.00. Anybody using release 10 may have to fiddle with them.
+
+14. Changed tests on __hpux in the libident library to tests on hpux. This
+picks out the pre-POSIX releases of HP-UX where different argument types are
+required for select(). In the current release, hpux is, quite correctly, not
+defined (__hpux is defined).
+
+15. Fiddled with the dummy functions in various places to stop the picky HP-UX
+ANSI compiler from complaining that they were infinite loops.
+
+16. Fixed problem which occurred when a source-routed address was routed to the
+local host. It should get rewritten with the first host stripped off; this was
+screwing up the original address, causing problems with (a) logging and (b) the
+contents of the header file if the delivery was deferred.
+
+17. Added qualify_single and search_parents options to domainlist router.
diff --git a/changelogs/ChangeLog-3.00.html b/changelogs/ChangeLog-3.00.html
new file mode 100644 (file)
index 0000000..93faa7e
--- /dev/null
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim changelogs - Version 3.00 (previous main release 2.12)</title>
+  </head>
+
+  <body bgcolor="#FFFFBF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <h1>Exim changelog for Version 3.00 (previous main release 2.12)</h1>
+
+    <h2>Version 3.00</h2>
+
+    <ol>
+      <li>
+       The documentation has been brought up-to-date for release
+       3.00.
+      </li>
+      <li>
+       The -oMr option is documented as working for non-SMTP and
+       batch SMTP input.  It was being ignored for batch SMTP. This
+       has been fixed.
+      </li>
+      <li>
+       Add #define DN_EXPAND_ARG4_TYPE u_char * to OS/os.h-SCO
+       because it seems that it is one of the operating systems that
+       defines the fourth argument of dn_expand this way.
+      </li>
+    </ol>
+
+
+    <h2>Version 2.954</h2>
+
+    <ol>
+      <li>
+       Log reception of the SMTP "debug" command.
+      </li>
+      <li>
+       Bug introduced by 2.950/15: Exim was incorrectly assuming a
+       dropped SMTP call if the message's data contained a byte with
+       the value 255. (Signed character problem in the private
+       "getc()" code. Sigh.)
+      </li>
+    </ol>
+
+
+    <h2>Version 2.953</h2>
+
+    <ol>
+      <li>
+       Typo in filter.c fixed; some compilers didn't like it, while
+       others were happy.
+       </li><li>
+       Make "fail_soft" for the "self" and host_find_failed domainlist
+       options override a generic setting of no_more.
+      </li><li>
+       Set $self_hostname when self=fail_soft in a router.
+      </li><li>
+       Added /warn and /reject to rbl_domains.
+      </li><li>
+       Reject messages with too many headers instead of just silently
+       pushing the rest into the body.
+      </li><li>
+       Recoded handling of multiple headers in expansion to be
+       (hopefully) more efficient in store usage.
+      </li><li>
+       Restrict the amount of store used by a $h_ expansion to 64K (to
+       catch lunatic messages with a zillion To: headers).
+      </li><li>
+       Add the operator "escape" to string expansions: it escapes all
+       non-printing characters in its argument.
+      </li><li>
+       Make HEADER_MAXHEADERS into a config.h macro to match
+       HEADER_MAXLENGTH so it can be changed easily.
+      </li><li>
+       If Exim reads EOF on an incoming SMTP connection, it assumes a
+       broken connection, but neverthless writes an error response. This
+       was erroneously using a 554 error code instead of 421.
+      </li><li>
+       The private "getc()" code for TCP/IP inputs had the feof and
+       ferror tests the wrong way round (but it shouldn't have mattered
+       much).
+      </li><li>
+       Blank lines were getting written to the log after some "no
+       immediate delivery" messages.
+      </li><li>
+       Increase the maximum length of RBL TXT record data that Exim reads
+       from 127 to 511.
+      </li><li>
+       Include IP address in RBL rejection message.
+      </li><li>
+       To aid in debugging "unexpected disconnection" errors, if the
+       result of read() is negative, the errno message is now added to
+       the logged error.
+      </li>
+    </ol>
+
+    <h2>Version 2.952</h2>
+
+    <ol>
+      <li>
+       White space was not being ignored after a search type ending in
+       "*" or "@*" in a lookup expression in an expansion.
+      </li><li>
+       If the smtp waiting database failed to open, the error message
+       wasn't printing out the interpretation of the value of errno.
+      </li><li>
+       The negative item "!@" was not being correctly handled in a host
+       list.
+      </li><li>
+       Changed the expansion of $tod_full so that the day number is
+       always given as two digits (to match the times, and it helps for
+       regression testing).
+      </li>
+    </ol>
+
+    <h2>Version 2.951</h2>
+
+    <ol>
+      <li>
+       Installed PCRE 2.05 (anchoring bug fix).
+      </li><li>
+       Retrying was not timing out properly when a message suffered a
+       temporary address error. This could result in retrying every queue
+       run after the time when it should have bounced.
+      </li><li>
+       Implemented once_repeat option for the autoreply transport, and a
+       corresponding "once_repeat" option for the mail and vacation
+       commands in mail filters. The vacation command now defaults
+       once_repeat to 7 days.
+      </li><li>
+       Added $message_body_size.
+      </li>
+    </ol>
+
+    <h2>Version 2.950</h2>
+
+    <ol>
+      <li>
+       Big, INCOMPATIBLE re-arrangement of the handling of
+       domain/host/net/address lists by adding negation and reducing the
+       number of options.
+      </li><li>
+       Remove a number of obsolete features; another INCOMPATIBLE change.
+       <ol>
+         <li>
+           Obsolete options - see README.UPDATING.
+         </li><li>
+           No longer allow for pre-0.57 spool files without their names 
+           at the top.
+         </li><li>
+           No longer cater for spool files that don't have a -body_linecount
+           setting. This came in at 1.91, but affects only SIZE for 
+           smtp output, so older spool files might still work.
+         </li><li>
+           No longer ignore commas and semicolons for driver options.
+         </li>
+       </ol>
+      </li><li>
+       Installed PCRE 2.04 - bug fixes and tidies.
+      </li><li>
+
+       The API of DB 2 changed at release 2.5.x by adding an
+       additional option field to the function for starting a
+       cursor. Fixed dbfn.h to cope with both styles - luckily the
+       version number is defined by macros.
+      </li><li>
+       The LDAP library in Solaris 7 has yet another way of handling
+       errors from the search functions - different from either UMich
+       LDAP or the Netscape LDAP SDK. (A pity, since everything else
+       appears to be source-compatible.) It does not seem to be
+       possible to detect the differences automatically. There was a
+       previous fudge to distinguish UMich and Netscape, but I
+       haven't found out how to extend it. Anyway, it gets messier
+       and messier. Instead, there is now a configuration option
+       LDAP_LIB_TYPE which the builder of Exim must set. (If not, the
+       current heuristic still applies.)
+      </li><li>
+       Some tidies in the smtp transport; some error status
+       information might have got lost when debugging was turned on
+       (failing to preserve errno).
+      </li><li>
+       Host names used as part of keys in the retry database were not
+       getting lower cased; consequently if a host appeared in two
+       differently-cased forms (e.g. in MX records, or in a
+       domainlist rule), separate retry records were being created.
+      </li><li>
+       Improve wording of some expansion errors.
+      </li><li>
+       Exim now takes note of the list of alias host names when it
+       uses gethostbyaddr() to look up a host name. Host checks for
+       relaying etc. now check against the alias list as well as
+       against the primary name.
+      </li><li>
+       In the smtp transport, Exim was relying on errno remaining
+       zero after a valid read() call, though one shouldn't really
+       look at its value except in cases of error. It was getting set
+       on at least one OS.
+      </li><li>
+       Because "service" is not what people expect, add "port" as a
+       synonym to all the relevant options.
+      </li><li>
+       The -bh option wasn't giving any commentary on the testing of
+       the sender address (or any other address testing).
+      </li><li>
+
+       Lower case local parts as well as domains when doing tests of
+       address lists, but allow for exception with +caseful.
+      </li><li>
+
+       Make scripts/os-type recognize "sunos4*" instead of just
+       "sunos4".
+      </li><li>
+
+       When reading from an incoming SMTP call, Exim was always
+       flushing the output after every command. This causes an
+       unnecessary number of TCP/IP packets to be used when the
+       remote client is using pipelining. Instead of using the
+       standard C library functions (getc() etc.) in this case, Exim
+       now reads directly from the socket, and flushes the output
+       only when it needs to refill its input buffer.
+
+16. Re-vamp of the handling of incoming batch SMTP, as suggested by Ian
+Jackson: (i) sender_verify_batch defaults false. (ii) Always give up entirely
+on encountering any error while receiving, writing to stdout/stderr and setting
+a return code. (iii) EOF is now an error.
+
+17. Make -R[f] and -qf skip frozen messages by default, and implement -Rff
+etc to force thawing.
+
+18. Log ETRN from hosts that are not in the permitted list.
+
+19. The use of log_level to cut out "retry time not reached" from the message
+log file now applies only to second and subsequent delivery attempts. This
+means that during the first attempt, something gets written to the file for all
+addresses, both toplevel ones and generated ones.
+
+20. Added START_SMALL to monitor build-time configuration to start up with
+small sized window.
+
+21. Added $interface_address to hold the incoming interface address, and -oMi
+to force it.
+
+22. Cast uids and gids to long int when [s]printf-ing them.
+
+23. Typo in source: if an alias file used :fail: for an address that was being
+verified, a 450 rather than a 550 error was given.
+
+24. Log (main and reject logs) when a VRFY or EXPN command is rejected on
+policy grounds. Also log (on main log) when an accepted VRFY command fails to
+verify the address - this is already done for failing verification of RCPT.
+
+25. For RBL rejections, if prohibition_message is set, use it, with the RBL
+text in $rbl_text. Otherwise show the text as before.
+
+26. Implemented $message_body_end. In the process, fixed a possible bug
+involved with $message_body - the data was being put into non-permanent store,
+so if the variable was used more than once, there could have been problems.
+
+27. If the pattern in a route_list item in the domainlist router is a lookup,
+the data looked up is now available as $value in the hostlist item.
+
+28. Added the "environment" option to the pipe transport.
+
+29. If -odi is set (synchronous delivery), pass it on to any re-execs or other
+calls of Exim (e.g. to send error messages). This helps with automatic testing.
+
+30. The converter to Texinfo format was turning @sc{xxx} into actual capital
+letters in section headings, but not in menu items that refer to them. The
+latest version of Texinfo picks this up. Menu items are now also capitalized.
+
+31. The change that forces euid=uid when Exim is called by root broke the
+special processing when CONFIGURE_FILE_USE_EUID is set. This has been fixed.
+
+32. If an LDAP lookup found an entry, but it had no attributes, it was
+returning junk. Now it behaves as if the entry was not found.
+
+33. During a -qq run, delay warnings were being sent after the first pass.
+
+34. Access to headers in expansion strings is documented only via the syntax
+$h_name: or $header_name: but *not* using {}. For example, ${h_to} is not
+documented as legal; by accident it used to work, but ${h_to:} did not because
+it was taken as an invalid abbreviation for ${hash_to:}. The "accident" has
+been undone.
+
+35. Patch to scripts/os-type to cater for Unixware 7 and 7.1.
+
+36. Changed SCO_SV configuration (for SCO 5) using Tony Earnshaw's information.
+
+37. Created a Unixware7 configuration using James FitzGibbon's information.
+
+****
+      </li>
+    </ol>
+    <hr>
+    <h6>$Id: ChangeLog-3.00.html,v 1.2 1999/05/25 20:46:06 nigel Exp $</h6>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+</html>
diff --git a/changelogs/ChangeLog-3.01.html b/changelogs/ChangeLog-3.01.html
new file mode 100644 (file)
index 0000000..729cfe1
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim changelogs - Version 3.01</title>
+  </head>
+
+  <body bgcolor="#FFFFBF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <h1>Exim changelog for Version 3.01</h1>
+
+    <ol>
+      <li>
+       Exim wasn't always handling (i.e. ignoring) white space
+       following an exclamation mark introducing a negative item in a
+       domain, host, or address list.
+      </li>
+      <li>
+       Exim was failing to compile under SunOS4 because on that OS
+       getc, ungetc, feof, and ferror are defined only as macros and
+       not as assignable functions (which Exim now needs). A suitable
+       lash-up has been provided for this operating system.
+      </li>
+    </ol>
+    <hr>
+    <h6>$Id: ChangeLog-3.01.html,v 1.2 1999/05/25 20:46:06 nigel Exp $</h6>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+</html>
diff --git a/changelogs/ChangeLog-3.10.html b/changelogs/ChangeLog-3.10.html
new file mode 100644 (file)
index 0000000..a992b8c
--- /dev/null
@@ -0,0 +1,660 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim changelogs - Version 3.10</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <h1>Exim changelog for Version 3.10 - last non-testing release was 3.03</h1>
+
+<h2>New Features and user visible changes</h2>
+
+<ol>
+
+<li>The option log_queue_run_level specifies the log level for the
+messages "Start queue run" and "End queue run". The default is 0.</li>
+
+<li>Addition of forbid_lookup, forbid_existstest and forbid_perl to
+the forwardfile director.</li>
+
+<li>All directors except smartuser had current_directory and
+home_directory options, to set values used at transport time. These
+options have now been made generic, so now apply to all
+directors.</li>
+
+<li>If SUPPORT_MOVE_FROZEN_MESSAGES is set at compile time, the new
+option move_frozen_messages causes frozen messages and their message
+logs to be moved from the input and msglog directories on the spool to
+Finput and Fmsglog.  There is currently no support in Exim or the
+standard utilities for handling such moved messages and they won't
+show up in lists generated by -bp or eximon.</li>
+
+<li>If no transport is specified for a smartuser director, the
+new_address field may now specify a comma-separated list of new
+addresses, and :blackhole:, :defer: and :fail: can also be used
+there. In otherwords, new_address is like a line from an alias file
+(except that :include: is not supported).</li>
+
+<li>The exigrep utility now automatically zcats any log file whose
+name ends in COMPRESS_SUFFIX, using ZCAT_COMMAND, as defined in
+Local/Makefile.</li>
+
+<li>The expansion condition first_delivery is true for the first
+delivery attempt on a message; queue_running is true when a delivery
+attempt is caused by a queue runner.</li>
+
+<li>When log_refused_recipients is set, each log line now has a reason
+for refusal such as "(RBL)" or "(sender_reject_recipients)".</li>
+
+<li>The magic string "+warn_unknown" behaves like "+allow_unknown",
+but it writes a log line every time it lets through a host whose name
+can't be looked up.</li>
+
+<li>If EXIMON_LOG_FILE_PATH is set in the environment when eximon
+starts up, it overrides the configuration setting. This makes it
+possible to have eximon tailing log data that is written to syslog,
+provided that MAIL.INFO messages are routed to a separate file.</li>
+
+<li>Policy rejections of recipients can now be overridden for certain
+senders by setting recipients_reject_except_senders.</li>
+
+<li>When all deferred addresses have the same domain, it is set in
+$domain during the expansion of delay_warning_condition. For pipes,
+files, or autoreplies, this is the domain of the parent.</li>
+
+<li>-Rr (and -Rrf, -Rrff) treat the string as a regular
+expression.</li>
+
+<li>Added -S (with all variations), which works like -R except that it
+checks the message's sender instead of the undelivered recipients. If
+both -R and -S are given, both conditions must be satisfied.</li>
+
+<li>The new expansion variable $message_age contains the length of
+time since the message was received as a number of seconds.</li>
+
+<li>The syntax of LDAP queries has been extended to allow the passing
+of more information than is available in the LDAP URL. An LDAP query
+may now consist of a URL preceded by any number of "name=value"
+settings, separated by spaces. If a value contains spaces it must be
+enclosed in double quotes, and when double quotes are used, backslash
+is interpreted in the usual way inside them. The following names are
+recognized:
+<dl>
+<dt>USER</dt>    <dd>set the DN for authenticating the LDAP bind</dd>
+<dt>PASS</dt>     <dd>set the password </dd>
+<dt>SIZE</dt>    <dd>set the limit for the number of entries returned</dd>
+<dt>TIME</dt>    <dd>set the maximum waiting time for a query</dd>
+</dl>
+</li>
+
+<li>Callers whose gid is Exim's gid are now automatically trusted
+(only the uid was looked at previously).</li>
+
+<li>There's a new option called admin_groups. If the current or any of
+the supplementary groups of the caller is in this list, the caller has
+admin user privileges.</li>
+
+<li>There is now support for PAM (Pluggable Authentication Modules), a
+facility which is available in the latest releases of Solaris and in
+some GNU/Linux distributions (see
+       <a href="http://ftp.at.kernel.org/pub/linux/libs/pam/">http://ftp.at.kernel.org/pub/linux/libs/pam/</a>).</li>
+
+<li>The file that the exiwhat mechanism uses for process status
+information is no longer bundled with the log files. Instead,
+"exim-process.info" in the spool directory is used.</li>
+
+<li>Exim can now be configured to log to syslog as well as or instead
+of to local log files. </li>
+
+<li>There's a new expansion operator called "mask" which converts an
+IP address to binary, masks off the least significant bits, and
+converts the result back to text, with mask appended. For example:
+${mask:10.111.131.206/28} returns the string
+"10.111.131.192/28". </li>
+
+<li>There exist some rare networking situations (for example, packet
+radio) where it is helpful to be able to translate IP addresses
+generated by normal routing mechanisms into other IP addresses, thus
+performing a kind of manual IP routing. This should be done only if
+the normal IP routing of the TCP/IP stack is inadequate or
+broken. Exim now has this capability.</li>
+
+<li>A new option called retry_data_expire (default 7d) specifies that
+retry data older than this should be ignored. This means that if, for
+example, a host hasn't been tried for 7 days, Exim will behave as if
+it had no knowledge of past failures.</li>
+
+<li>To help with formulating lookup queries, there is a new expansion
+operator
+
+<tt>${quote_<lookup-type>:<string>}</tt>
+
+which quotes the characters of the string in a lookup-specific way. For 
+example, the safest way to write a NIS+ query is
+
+<tt>[name="${quote_nisplus:$local_part}"]</tt>
+</li>
+
+<li>The from_hack option in the appendfile and pipe transports has
+been replaced by two string options, check_string and
+escape_string. When set, the start of each line is tested for matching
+check_string, and if it does, those characters are replaced by the
+contents of escape_string.</li>
+
+<li>The appendfile transport has a new option called file_format,
+defaulting unset. If set, it requests the transport to check the
+format of an existing file before adding to it.</li>
+
+<li>There is a new expansion condition called crypteq, which is
+automatically available if Exim is built to support any authentication
+mechanisms.  Otherwise, it is necessary to define SUPPORT_CRYPTEQ to
+get it included in the binary. The crypteq condition has two
+arguments. The first is encrypted and compared against the second,
+which is already encrypted. Two encryption types are currently
+supported:
+<ul>
+         <li>md5 first computes the MD5 digest of the string, and
+         then expresses this as printable characters by means of the
+         base64 encoding.</li>
+
+         <li>crypt calls the crypt() function as used for encrypting
+         login passwords.</li>
+</li>
+
+<li>There is now support for the AUTH extension to SMTP (RFC 2554),
+both as a client and as a server.</li>
+
+<li>The -bv option now runs interactively, like -bt, if no addresses
+are given on the command line.</li>
+
+<li>There is a new option called -be which is for testing string
+expansion. If no arguments are given it runs interactively. It simply
+does a string expansion on arguments (or data lines) and outputs the
+result.</li>
+
+<li>The GNU/Hurd operating system is now supported.</li>
+
+<li>If quota is specified on an appendfile transport, then
+quota_warn_threshold may optionally be specified as a percentage.</li>
+
+<li>There's an alternative hashing function for expanded strings,
+called "nhash" for "numeric hash". An item of the form
+${nhash_<n>:string} produces a number in the range 0-n, while an item
+of the form ${nhash_<n>_<m>:string} produces two numbers, separated by
+a '/', in the ranges 0-n and 0-m respectively, using a div/mod
+hash.</li>
+
+<li>The expansion variable $host_lookup_failed contains "1" if there
+has been an attempt to look up the sending host's name from its IP
+address, and this has failed to find the name. Otherwise
+$host_lookup_failed contains "0".</li>
+
+<li>The exim_dbmbuild utility now warns if it encounters a duplicate
+key. By default, only the first of a set of duplicates is used - this
+is a change from the previous state, but it does make it compatible
+with lsearch lookups.  There is an option -lastdup which causes it to
+use the last instead, which is compatible with what it did
+before. There is also an option -nowarn, which stops it listing
+duplicate keys to stderr. If any duplicates are encountered, the
+return code is 1. For other errors, where it doesn't actually make a
+new file, the return code is 2.</li>
+
+<li>There is a new option called ldap_default_servers which can be
+used to supply a colon-separated list of replicated LDAP servers. If
+an LDAP lookup has no server mentioned in the URL, that is, the URL
+begins "ldap:///...", and ldap_default_servers is set, then the query
+is passed to each of the listed servers in turn.</li>
+
+<li>There is now a variant of the dbm lookup type called dbmnz, which
+does not include a trailing binary zero in the keystring that is
+looked up.</li>
+
+<li>Support for MYSQL is now available when LOOKUP_MYSQL is
+defined.</li>
+
+<li>In a system filter file (but not in a user filter) a "deliver"
+command may now be followed by "errors_to <some address>" in order to
+change the envelope sender (and hence the error reporting) for that
+delivery.</li>
+
+<li>The number can now be omitted from host list net searches, in
+which case the IP address is looked up without masking and without any
+additional text.  For example, if an item in a host list is
+net-lsearch;/some/file and the calling host has IP address 10.9.8.7
+then the key that is used in the lookup is "10.9.8.7".</li>
+
+<li>When IPv6 addresses are used in net lookups, the separator between
+the components is "." rather than the conventional ":" because colon
+is the key terminator in lsearch files. The full, unabbreviated IPv6
+address is always used.</li>
+
+<h1>Changelogs</h1>
+
+<h2>Version 3.10</h2>
+<pre>
+
+1. Exim was crashing when lookup_open_max was exceeded if the type of file
+being closed was different to the type of file being opened.
+
+2. Some further tidies of the os-type and arch-type scripts.
+
+3. ENOSPC is not treated in the same way as a quota error for the purposes of
+retrying.
+
+4. The revised exigrep (3.091/26) had "gz" and "Z" built in. Change it to check
+for COMPRESS_SUFFIX.
+
+5. If a reverse lookup done within a message failed because the name looked up
+had no matching forward lookup, the error text for this got obliterated at the
+end of the message, and so if it was needed for a subsequent message on the
+same SMTP connection, junk got logged.
+
+
+Version 3.093
+-------------
+
+1. The -bP option wasn't recognizing "authenticator xxx". It was recognizing
+"auths" and "auth_list", but this abbreviation seems unexpected, so changed
+those to use the full word.
+
+2. Removed a now (since 2.12/3) useless optimization in the code for checking
+whether two addresses have the same list of hosts.
+
+3. After some calls to execv() the failure code wasn't being output.
+
+4. Increased field widths in eximstats, as the numbers can be quite big on busy
+systems.
+
+5. Arrange for X-RBL-Warning: headers to be inserted when recipients are
+allowed through by an exception list from an RBL domain that is set to reject.
+
+6. Tidied error messages from -brw. Also, if an SMTP rewrite happens and the
+source address isn't syntactically valid, just skip the other rewrites. Skip
+them in any case if there are no rules with non-S flags. If there are no rules
+at all, say so.
+
+7. Reworded "no valid sender in message headers" error message, because it has
+confused people. Tidied some related messages as well.
+
+8. Added USE_DB=yes to the OpenBSD configuration.
+
+9. Ignore check_log_space if log_file_path just contains "syslog".
+
+10. Add closelog() to the function that closes all log files. The important
+case of this is the call just before the daemon closes all file descriptors,
+because otherwise it is closing the syslog one behind the system's back.
+
+11. Two "frozen" messages were getting written to the message log in some
+circumstances.
+
+12. Bug in 3.091/23 (fixing an earlier bug) caused a crash if a list of MX
+records with some identical host names came in a specific order (so it only
+showed now and again).
+
+13. In the arch-type script, when uname -p gives something containing spaces,
+try uname -m. (Previously it did this only for "" or "unknown".)
+
+14. Recognize i686 in scripts/arch-type.
+
+15. Re-organize the os-type and arch-type scripts so that $OSTYPE and $ARCHTYPE
+are now tried after uname rather than before, as many shells set silly values
+in them. Manual overrides are now provided by EXIM_OSTYPE and EXIM_ARCHTYPE.
+
+
+Version 3.092
+-------------
+
+1. Serious bug caused by 1-character typo: In very long messages, characters
+could occasionally be lost (e.g. 3 lost in a 1.5M file). This bug was
+introduced in the changes made for 3.033, so it was never in a main release.
+
+
+Version 3.091
+-------------
+
+1. Exim was not reporting the actual error if there was an I/O error while
+reading a message or writing the spool file during message reception. Nor was
+it logging anything.
+
+2. Some reorganization and tidying up of code for handling errors while writing
+the spool header file.
+
+3. When showing log messages for debugging, display the DIE flag when set.
+
+4. Add logging of SMTP AUTH information to the "message received" log line.
+
+5. Added forbid_lookup, forbid_existstest, forbid_perl to forwardfile (later
+changed to better names forbid_filter_lookup etc.).
+
+6. create_file = belowhome in appendfile could be defeated by the use of /../
+in the name. Sigh. I'm not devious enough... Symbolic links could also defeat
+it. These are now checked for by means of realpath(), which all the Unixes I've
+checked do have. Also, Exim was creating any necessary directories before
+checking create_file. It now creates directories only if it is permitted to
+create the file.
+
+7. Add more code to ldap to remember when a bind was done and with what
+credentials so that it doesn't repeat the bind for a subsequent lookup with the
+same credentials.
+
+8. If create_directory was set on appendfile and the directory creation failed
+for some reason, the error was not reported, so it appeared as if
+create_directory had been ignored.
+
+9. All directors except smartuser had current_directory and home_directory
+options, to set values used at transport time. These options have now been made
+generic, so now apply to all directors.
+
+10. If a local delivery failed and created message longer than 256 characters,
+it got truncated when logged.
+
+11. Change "all" to "one or more" in bounce and delay messages.
+
+12. The convert43t conversion utility didn't work for driver names containing
+capital letters.
+
+13. Change autoreply and other generated messages to use "Reply-To" instead of
+"Reply-to" because that's the "suggested" form in RFC 822.
+
+14. Pulled some common code out of aliasfile and forwardfile and made it into a
+separate function which they each call.
+
+15. The function for writing the -H file tried to create the directory if it
+didn't exist, but it always will, because the -H file isn't written until the
+-D file has been successfully written. So we can save a bit of code (which in
+fact was buggy because it didn't support sub-directories).
+
+16. Added move_frozen_messages, but only if SUPPORT_MOVE_FROZEN_MESSAGES
+is defined. There is no current support for handling such messages.
+
+17. If queue_smtp or queue_remote got set via queue_only_file for an incoming
+SMTP message received by the daemon, the flag was not being passed on to the
+delivery process.
+
+18. An explanation to the long-standing problem of eximon menus not working
+when num-lock is set has been received, and a workaround implemented.
+
+19. Address rewrites that happened during delivery (typically on new addresses
+from forward or filter files) were causing an X-rewrote-address dummy header to
+be added to the message each time it happened. This could get embarrassing if
+retrying went on for a long time.
+
+20. Only write "children all complete" to the msglog file if the address has no
+parent address with the same original address. Otherwise (e.g. in cases where
+xxx is aliased to xxx and other things, and the new xxx gets further aliased by
+another director) it can be confusing.
+
+21. After successful directing, the debugging line showed the transport field
+from the original address, which could be misleading if copied address had been
+queued (e.g. by smartuser). As the general queuing function now outputs this
+info, remove it at top level.
+
+22. Smartuser was showing the old rather than the new address in its debugging
+output.
+
+23. If a broken MX list contained the same host more than once, Exim was coded
+to keep only the lowest precedence, but if it saw a lower value after a higher
+one, and had seen precedences between the two values, it screwed up the
+sorting.
+
+24. The revision of RFC 822 increases the encouragement for collapsing source
+routed addresses from the MAY of RFC 1123 to SHOULD. I have therefore cut out
+all the source route handling code, with the exception of parsing and
+collapsing. The option collapse_source_routes now has no effect - they are
+always collapsed. This has made it possible to make some tidies in various
+places.
+
+25. Rewrote the smartuser director - if no transport is specified, the
+new_address option may now specify a list of addresses, and it may also specify
+:blackhole:, :defer:, or :fail:.
+
+26. Upgraded exigrep so that it automatically zcats compressed file.
+
+27. Added expansion conditions first_delivery and queue_running.
+
+28. When log_refused_recipients is set, give a reason in each log line.
+
+29. Implemented +warn_unknown.
+
+30. Allow EXIMON_LOG_FILE_PATH to override in eximon - useful when syslog is in
+use.
+
+31. -Mg was not forcing a thaw of frozen messages (an unwanted side effect of
+change 17 in version 2.950).
+
+32. -M and other delivery forcers (e.g. -qf) were not overriding
+queue_remote_domains and queue_smtp_domains.
+
+33. Added recipients_reject_except_senders.
+
+34. When all deferred addresses have the same domain, it is set in $domain
+during the expansion of delay_warning_condition. For pipes, files, or
+autoreplies, this is the domain of the parent.
+
+35. Changed the default configuration file to lock out domain literal support.
+This is strictly contrary to the RFCs, but people don't understand about it and
+it has been abused by spammers seeking open relays.
+
+36. -Rr (and -Rrf, -Rrff) treat the string as a regular expression.
+
+37. Added -S, which works like -R except that it checks the message's sender.
+
+38. Added $message_age.
+
+39. Make Exim ignore -n (no aliasing), and make -oitrue the same as -oi.
+
+40. Typo in ldap code could cause junk to appear in the error message if a
+search call failed (which it normally doesn't).
+
+41. Source tidies to get rid of compiler warnings for possibly uninitialized
+variables.
+
+
+Version 3.040
+-------------
+
+1. Added additional parameters to LDAP lookups.
+
+
+Version 3.039
+-------------
+
+1. Callers who have exim's gid as the current gid are now trusted.
+
+2. Added new option admin_groups.
+
+3. There was a bug in store handling for expansions involving very large
+strings, e.g. if message_body_size was set large and was the subject of a
+"match" filter condition. The symptom was a bus error.
+
+4. Exim wouldn't build if LOG_FILE_PATH was set to any of the new syslog
+variations.
+
+5. A couple more compile-time tweaks for netBSD (default USE_DB=yes and look
+for chown in /usr/sbin).
+
+
+Version 3.038
+-------------
+
+1. Added support for PAM authentication.
+
+
+Version 3.037
+-------------
+
+1. When forwardfile defers because it doesn't like the file's permissions,
+include the offending bits in the error message.
+
+2. General tidy of error messages from directors to remove duplicated
+information. (e.g. director names, because they are also shown in the D= item
+of log lines).
+
+3. Pulled some general outgoing SMTP code out of transports/smtp.c and put it
+in functions in smtp_out.c. This is also used by client authenticator code; the
+interface is now cleaner.
+
+4. Added log_queue_run_level.
+
+5. When a message with very long headers was rejected, and the reflection of
+the headers to the rejectlog filled up the log buffer, the terminating
+separator line got lost, and the entry didn't necessarily end with \n. It now
+always puts in the separator, and adds "*** truncated ***" if something has
+been chopped off.
+
+6. Updated eximon to cope with cases when syslog is being used. If only syslog
+is being used, eximon cannot tail a log - omit that part of its window.
+
+7. Updated exicyclog to cope with cases when syslog is being used. If only
+syslog is being used, exicyclog can't cycle anything.
+
+8. Fixed bug in base64 decoding function that was messing up CRAM-MD5
+authentication for certain lengths of user name.
+
+
+Version 3.036
+-------------
+
+1. Moved the logging of a message's freezing to just before the -H file is
+updated, to minimize cases when the logging happens but the file doesn't get
+updated (an incident was observed when a system was being shut down).
+
+2. Ignore SIGTERM during the tidying-up phase at the end of a delivery, to
+minimize the chances of things being half done.
+
+3. Don't bother doing an RBL lookup if the host has already matched
+host_reject_recipients.
+
+4. Added "sort | uniq" into the exiwhat script, to cut out duplicates, which
+sometimes happen in "ps" output.
+
+5. Changed the file exiwhat uses to spool/exim-process.info instead of a log
+file. This is so that it will continue to work when syslog logging is used.
+
+6. Added support for syslog, configured in log_file_path.
+
+
+Version 3.035
+-------------
+
+1. The debug_print option wasn't working for the smtp transport.
+
+2. The responses to AUTH commands weren't being copied to debug output.
+
+3. Changed the condition handling in the plaintext authenticator to allow for
+forced DEFER returns ("", "0", "no", "false" => FAIL, "1"; "yes", "true" => OK;
+anything else defers, text is message).
+
+4. Added ${mask:} expansion operator.
+
+5. Added translate_ip_address.
+
+
+Version 3.034
+-------------
+
+1. When a header syntax check failed, a humungously long address that was too
+much for string_sprintf to fit in the error message caused a panic exit. This
+could happen, for example, if a double quote was omitted in a very long list of
+addresses in a header. It now reflects just the first 1K of the address. Put a
+similar limit on sender addresses in verify failed messages.
+
+
+Version 3.033
+-------------
+
+1. Arrange for crypt.h to be included only on those OS that have it (Solaris,
+IRIX 6, modern Linux), and for -lcrypt to be set up for those OS that need it
+(FreeBSD, NetBSD, modern Linux).
+
+2. Made MAXINTERFACES changeable in Local/Makefile.
+
+3. When sending a delay warning message, quote the top-level original address
+only, saying "an address generated from" if the actual problem is with a child.
+
+4. Set a default for delay_warning_condition to skip precedence bulk/list/junk.
+
+5. Allow for spaces around colons in temp_errors setting in smtp transport.
+
+6. The "personal" test in filter files now checks for "list" and "junk" as well
+as "bulk" in the Precedence: header.
+
+7. Added retry_data_expire.
+
+8. If a key in a partial match was very long (longer than the buffer for
+string_sprintf()), Exim couldn't handle it.
+
+9. Added expansion operator ${quote_xxx:} where xxx is a search type. Each
+search type has its own (optional) quoting function. Added suitable functions
+for NIS+, LDAP, and MYSQL.
+
+10. Internal revision of the way the "From hack" and SMTP dot escaping is done
+in preparation for extending appendfile. They are now unified, and are
+therefore mutually exclusive.
+
+11. The "From hack" was failing if the string "From " happened to be split
+between two buffers when transporting the message.
+
+12. If a non-SMTP message that was being read without -oi ended with "\n."
+(no following NL) then the "." got lost.
+
+13. Ensure that all non-SMTP messages have a final NL at input time, instead of
+testing at delivery time. This simplifies the delivery code.
+
+14. Replaced from_hack in appendfile and pipe by check_string and escape_string.
+
+15. Added file_format to appendfile.
+
+
+Version 3.032
+-------------
+
+1. If remove_headers contained a "fail" expansion, it caused a crash.
+
+2. The generic headers_remove option in transports is now expanded. (Seems to
+have been an oversight.)
+
+3. Changed $host_authenticated to $sender_host_authenticated (oversight).
+
+4. Added server_set_id generic option to authenticators and $authenticated_id
+for accessing it.
+
+
+Version 3.031
+-------------
+
+1. Removed unnecessary #ifdefs from lookups which don't have private header
+files.
+
+2. Added crypteq as a new expansion condition.
+
+3. Make it recognise "netbsd" as equivalent to "NetBSD".
+
+4. Updated the FSF's address in LICENCE and NOTICE files.
+
+5. Code tidies for SMTP input to remove repetition of real and debugging
+output by using a subroutine.
+
+6. Added support for AUTH.
+
+7. Source tidies of a lot of unnecessarily complicated calls to
+string_nextinlist().
+
+8. Source tidies in lookup handling.
+
+9. Set XLFLAGS empty for IRIX6 as it doesn't seem to need anything.
+
+10. Typo in code for decoding quota_<time> fixed; only effect would be to fail
+to diagnose bad syntax.
+
+11. -bv now runs interactively like -bt if no addresses are given.
+
+12. Added -be for string expansion tests with configuration read.
+
+</pre>
+
+    <hr>
+    <h6>$Id: ChangeLog-3.10.html,v 1.3 1999/11/28 21:00:42 nigel Exp $</h6>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+</html>
diff --git a/config.samples/C001 b/config.samples/C001
new file mode 100644 (file)
index 0000000..0adb15d
--- /dev/null
@@ -0,0 +1,377 @@
+Date: Thu, 4 Dec 1997 14:16:22 -0800
+From: Stuart Lynne <sl@poste.com>
+
+This config will support delivery across multiple systems using
+NIS to lookup delivery addresses from the mail.aliases database.
+
+It seems to be working fairly well. I'm including a sample mail.aliases
+file. It shows a setup for four different domains. With mail being
+delivered to three different systems.
+
+Mail is delivered to two different types of mailboxes. If you alias
+mail to user@machine then it gets delivered to mailbox in /var/mail
+as normal. If you alias to user%virtual.domain@machine then it
+gets delivered to /var/mail/virtual.domain/user.
+
+Each of the domains you want to handle should have MX records like:
+
+       IN MX 10 virtual0.fireplug.net
+       IN MX 10 virtual1.fireplug.net
+       IN MX 20 relay.fireplug.net
+
+The two virtualN systems are the ones to use the included config.
+
+
+######################################################################
+#                  Runtime configuration file for Exim               #
+######################################################################
+
+
+# This is a default configuration file which will operate correctly in
+# uncomplicated installations. Please see the manual for a complete list
+# of all the runtime configuration options.
+
+
+# This file is divided into several parts, all but the last of which are
+# terminated by a line containing the word "end". The parts must appear
+# in the correct order, and all must be present (even if some of them are
+# in fact empty). Blank lines, and lines starting with # are ignored.
+
+
+
+######################################################################
+#                    MAIN CONFIGURATION SETTINGS                     #
+######################################################################
+
+# Specify your host's canonical name here. If this option is not set, the
+# uname() function is called to obtain the name.
+# primary_hostname =
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. If this option is not set, the primary_hostname value is used.
+# qualify_domain =
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+# qualify_recipient =
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set, the qualify_recipient value is used as the only local domain.
+# If you do not want to do any local deliveries, uncomment the following line,
+# but do not supply any data for it.
+# local_domains =
+
+# No local deliveries will ever be run under the uids of these users.
+never_users = root
+
+# If you want Exim to support the "percent hack" for all your local domains,
+# uncomment the following line. This is the feature by which mail addressed
+# to x%y@z (where z is one of your local domains) is locally rerouted to
+# x@y and sent on. Otherwise x%y is treated as an ordinary local part.
+# percent_hack_domains=*
+
+# If you are running Exim under its own uid (recommended), then you should
+# set up that uid as a trusted user by de-commenting the following and
+# changing the name if necessary.
+
+trusted_users = uucp
+
+# required to allow customer domains mx'd to here to use us
+relay_domains_include_local_mx
+
+spool_directory = /var/spool/exim
+log_file_path = "/var/log/exim/%slog"
+
+
+# rbl configuration
+prohibition_message = contact postmaster@fireplug.net for further info
+recipients_reject_except = postmaster@fireplug.net
+rbl_domains = "rbl.maps.vix.com.:rbl.fireplug.net."
+
+end
+
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+###################################
+# 1. These transports are used for local delivery to user mailboxes.
+
+procmail_pipe:
+  driver = pipe
+  from_hack
+  command = "/usr/bin/procmail -t -o -d ${local_part}"
+
+mbox_delivery:
+  driver = appendfile
+  #maildir_format
+  #create_directory
+  file = /var/mail/${domain}/${local_part}
+  user = mail
+  group = mail
+# mode = 0660
+
+###################################
+# 2. This transport is used for delivering messages over SMTP connections.
+smtp:
+  driver = smtp
+
+###################################
+# 3. this is for forwarding uucp mail
+uux_domain:
+  driver =  pipe
+  command = "/usr/bin/uux - -r ${domain}!rmail ${local_part}@${domain}"
+  pipe_as_creator
+  return_output
+
+###################################
+# 4. Misc transports used internally
+
+# This transport is used for handling pipe addresses generated by alias
+# or .forward files. It has a conventional name, since it is not actually
+# mentioned elsewhere in this configuration file.
+address_pipe:
+  driver = pipe
+  ignore_status
+  return_output
+
+# This transport is used for handling file addresses generated by alias
+# or .forward files. It has a conventional name, since it is not actually
+# mentioned elsewhere in this configuration file.
+address_file:
+  driver = appendfile
+
+# This transport is used for handling autoreplies generated by the filtering
+# option of the forwardfile director. It has a conventional name, since it
+# is not actually mentioned elsewhere in this configuration file.
+address_reply:
+  driver = autoreply
+
+end
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+######################################################################
+
+#################################
+# 1. Check for domains aliased to virtual*.fireplug.net
+
+# if local mx was to virtual.fireplug.net, lookup in NIS mail.aliases, eventually ldap
+# partial0 requires fixed exim, allows for per domain wildcard
+virtual_fireplug_net:
+  condition = "${if match{$self_hostname}{virtual..fireplug.net}{$domain}}"
+  driver = aliasfile
+  search_type = partial0-nis*
+  file = mail.aliases
+  expand
+  include_domain
+
+#################################
+# 2. Check for domains aliased to uucp.fireplug.net
+
+# if local mx was to uucp.fireplug.net then forward via uux_domain transport
+uucp_fireplug_net:
+  condition = "${if match{$self_hostname}{uucp.fireplug.net}{$domain}}"
+  driver = smartuser
+  transport = uux_domain
+
+
+#################################
+# 3. Conventional mail processing, may not be required for fireplug
+
+system_aliases:
+  domains = @
+  driver = aliasfile
+  file = /var/etc/aliases
+  search_type = lsearch
+
+userforward:
+  domains = @
+  no_verify
+  driver = forwardfile
+  file = .forward
+
+#################################
+# 4. Deliver local mailboxes
+
+local_mbox:
+  condition = "${if match{$local_part}{.*%.*}{$domain}}"
+  driver = smartuser
+  transport = mbox_delivery
+  new_address = "${if match{$local_part}{(.*)%.*}{$1}{$domain}}@${if match{$local_part}{.*%(.*)}{$1}{$domain}}"
+
+# This director matches local user mailboxes.
+procmail:
+  domains = @
+  driver = localuser
+  transport = procmail_pipe
+
+end
+
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+######################################################################
+
+#################################
+# 1. Check to see if we can get rid of it by sending it to someone lese
+#
+# This router routes to remote hosts over SMTP using a DNS lookup with default options.
+#
+# The self option tells exim to continue looking at additional
+# routers if the MX for a domain points at the local host.
+
+lookuphost:
+  driver = lookuphost
+  self = fail_soft
+  transport = smtp
+
+#################################
+# 2. Special cases here - keep to a bare minimum
+#
+# if domain is nwnet.org && primary_hostname is nero.fireplug.net
+nwnet_org:
+  condition = "${if match{$primary_hostname}{nero.fireplug.net}{$domain}}"
+  domains = "nwnet.org"
+  driver = domainlist
+  transport = smtp
+  route_list = "* nwnet.nwnet.org"
+
+#
+# End of Special cases here - keep to a bare minimum
+
+#################################
+# 3. We have something that seems to be MX'd to here
+#
+# by default, anything that is a local MX will get matched here
+# This must be set to something reasonable.
+#
+# Currently we punt to local director's for further processing
+self:
+  driver = lookuphost
+  self = local
+  transport = smtp
+
+#################################
+# 4. IP literal - required by RFC's
+
+# This router routes to remote hosts over SMTP by explicit IP address
+# given as a "domain literal" in the form [nnn.nnn.nnn.nnn]. The RFCs
+# require this facility, which is why it is enabled by default in Exim.
+literal:
+  driver = ipliteral
+  transport = smtp
+
+end
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
+
+end
+
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+
+# There are no rewriting specifications in this default configuration file.
+
+# End of Exim configuration file
+
+
+Sample mail.aliases file:
+-------------------------
+
+# Record Description: /etc/alias record
+# Record Explanation: aliasname  alias
+# Record Example:     postmaster user@mydomain.com
+#
+#
+# Wildcard record is entered as:      *@domain alias
+#
+# Special expansion values:
+#
+#     @xxx  replace  with original localpart
+#     :FAIL:          message will fail as if user did not exist
+#     :DEFER:         message will be held in mail spool
+#     :DROP:          message will be silently dropped
+#
+
+
+# System Aliases
+#
+abuse root
+postmaster root
+
+# Wildcard Aliases
+#
+* FAIL
+*@fireplug.net FAIL
+*@galarie.bc.ca $local_part@galarie.com
+*@galarie.com FAIL
+*@poste.com FAIL
+
+# Abuse Aliases
+#
+abuse root
+abuse@fireplug.net sl@fireplug.net
+abuse@galarie.bc.ca abuse
+abuse@galarie.com abuse
+abuse@poste.com abuse
+
+# Postmaster Aliases
+#
+postmaster root
+postmaster@fireplug.net sl@fireplug.net
+postmaster@galarie.bc.ca postmaster
+postmaster@galarie.com postmaster
+postmaster@poste.com postmaster
+
+# Domain based aliases
+#
+
+# fireplug.net
+#
+bobe@fireplug.net bobe@webtide.com
+info@fireplug.net richard@fireplug.net, sl@fireplug.net
+jsavage@fireplug.net jsavage%fireplug.net@wilt.fireplug.net
+ken@fireplug.net ken%fireplug.net@wilt.fireplug.net
+lsavage@fireplug.net lsavage%fireplug.net@wilt.fireplug.net
+msavage@fireplug.net msavage%fireplug.net@wilt.fireplug.net
+richard@fireplug.net richard%fireplug.net@nero.fireplug.net
+rshand@fireplug.net rshand%fireplug.net@wilt.fireplug.net
+sales@fireplug.net richard@fireplug.net
+sl@fireplug.net sl@poste.com
+ted@fireplug.net ted@nero.fireplug.net
+webmaster@fireplug.net richard@fireplug.net
+wsavage@fireplug.net wsavage%fireplug.net@wilt.fireplug.net
+
+# galarie.com
+#
+galarie@galarie.com galarie%galarie.com@wilt.fireplug.net
+test@galarie.com test%galarie.com@wilt.fireplug.net
+
+# poste.com
+#
+cl@poste.com cl@whiskey.poste.com
+donna@poste.com donna@whiskey.poste.com
+rl@poste.com rl@whiskey.poste.com
+sl@poste.com sl@nero.fireplug.net
diff --git a/config.samples/C002 b/config.samples/C002
new file mode 100644 (file)
index 0000000..8564f95
--- /dev/null
@@ -0,0 +1,67 @@
+Date: Wed, 14 Jan 1998 15:07:22 +0200
+From: Vladimir Litovka <doka@grunt.vl.net.ua>
+
+ Although exim not intended for use in UUCP environment (it doesn't know
+anything about bang!path addresses), I'm successfully using it for delivering
+mail to UUCP clients. For this purposes I'm using two rewrite rules:
+
+#--------------------- REWRITE CONFIGURATION ------------------------#
+
+# system!system.domain.net!user
+^([^!]+)!((\w+)(\.\w+)+)!(.*)@your\.domain \
+       "${if eq {$1}{$3}{$5@$2}{$2!$5@$1}}"    Tbcrtq
+
+# system*!user
+^([^!]+)!(.*)@your\.domain     $2@$1   Tbcrtq
+
+#--------------------------------------------------------------------#
+
+The first rule check
+  if destination address in form:
+    uuname!system.some.domain!user
+  and
+    uuname == system
+  it rewrites address to user@system.some.domain
+  else it rewrites it to system.some.domain!user@uuname
+  and QUIT.
+
+The second rule check
+  if destination address in form:
+    uuname1!uuname2!FQDN!...!uunameN!user
+  it rewrites it to
+    uuname2!FQDN!...!uunameN!user@uuname1
+  and QUIT.
+
+For successfully delivering mail to uucp domain you must create such
+transport:
+
+#-------------------------------------------------------------------#
+uux:
+  driver = pipe;
+  command = "/usr/bin/uux - -r $host!rmail ($local_part@$domain)",
+  path = "/usr/local/bin:/usr/bin:/bin",
+  return_fail_output,
+  user = uucp,
+#-------------------------------------------------------------------#
+
+and such router:
+
+#-------------------------------------------------------------------#
+force_uucp:
+  driver = domainlist;
+  route_file = /etc/exim/maps/force.uucp,
+  search_type = partial-lsearch,
+#-------------------------------------------------------------------#
+
+and use something similar to this force.uucp:
+
+# Domain               Relay                   Options
+# ------               -----                   -------
+system1                        system1                 uux
+system1.domain         system1                 uux
+#
+system2                        system2                 uux
+system2.domain         system2                 uux
+
+(!) Note, that you need unqualified names (system1, system2) because
+second rewrite rule don't do qualification (it known nothing about this).
diff --git a/config.samples/C003 b/config.samples/C003
new file mode 100644 (file)
index 0000000..6b314ee
--- /dev/null
@@ -0,0 +1,62 @@
+Date: Thu, 23 Jul 1998 01:02:29 -0500 (CDT)
+From: "Steven A. Reisman" <sar@pressenter.com>
+I've read down through Q0601 and your request for UUCP examples.
+Here's how I'm doing it:
+
+  # route via UUCP
+
+  uucp_routing_rmail:
+    transport = uucp_rmail
+    driver = domainlist
+    route_file = /etc/exim/uucp_rmail
+    search_type = dbm
+
+  uucp_routing_rsmtp:
+    transport = uucp_rsmtp
+    driver = domainlist
+    route_file = /etc/exim/uucp_rsmtp
+    search_type = dbm
+
+
+  # This transport delivers via UUCP-rmail
+
+  uucp_rmail:
+    driver = pipe
+    user = nobody
+    command = "/usr/bin/uux --stdin --nouucico --requestor \
+          '${if eq {$sender_address}{}{mailer-daemon}{$sender_address}}' \
+          $host!rmail $pipe_addresses"
+    return_fail_output=true
+    no_retry_use_local_part
+
+
+  # This transport delivers via UUCP-rsmtp
+
+  uucp_rsmtp:
+    driver = pipe
+    batch = domain
+    bsmtp = domain
+    user = nobody
+    command = "/usr/bin/uux --stdin --nouucico --requestor \
+          '${if eq {$sender_address}{}{mailer-daemon}{$sender_address}}' \
+          $host!rsmtp"
+    prefix = ""
+    suffix = ""
+    return_fail_output=true
+    no_retry_use_local_part
+
+
+Files /etc/exim/uucp_rmail and /etc/exim/uucp_rsmtp are of the form:
+
+  domain1.com:    alpha
+  domain2.com:    beta
+  domain3.com:    gamma
+
+where alpha, beta, and gamma are UUCP neighbors.
+
+
+For example, our mail server, hermes, uses UUCP to transport email to my
+laptop, ulysses.  Ulysses can poll hermes on TCP port 520 from anywhere
+on the net.  This is independent of ulysses's IP address, and there's
+no messing with SMTP/ETRN.
diff --git a/config.samples/C004 b/config.samples/C004
new file mode 100644 (file)
index 0000000..20378e9
--- /dev/null
@@ -0,0 +1,55 @@
+From: Nigel Metheringham <Nigel.Metheringham@ThePLAnet.net>
+Date: Tue, 21 Jul 1998 13:41:42 +0100
+
+Here's a BSMTP over UUCP - the transport is Taylor/GNU UUCP - which takes 
+the long option types.  The requestor bit needs a fudge for bounce mail to 
+be handled correctly - a null requestor causes the uux client to write an 
+invalid request file.  The UUCP sys file is set to map their domain to the 
+appropriate machine to call.
+
+#=====================================================================
+#
+# uucp transport
+# ~~~~~~~~~~~~~~
+#
+
+uucp:
+  driver = pipe
+  batch = domain
+  bsmtp = domain
+  command = "/usr/bin/uux --stdin --nouucico --requestor \
+       '${if eq{$sender_address}{}{mailer-daemon}{$sender_address}}' \
+       $domain!rsmtp"
+  log_output
+  prefix = ""
+  suffix = ""
+  no_retry_use_local_part
+  return_fail_output
+  user = exim
+
+####
+#### and the related director (note that all these domains are handled as
+#### local by exim).
+####
+uucp_router:
+  domains = UUCP_DOMAINS
+  driver = smartuser
+  transport = uucp
+  no_panic_expansion_fail
+  new_address = "${quote:$local_part}@$domain"
+
+
+####
+#### and at the top of the config are:-
+####
+EXICONF_DIR    = /var/exim
+UUCP_DOMDB     = EXICONF_DIR/main/uucp_domains.cdb
+UUCP_DOMAINS   = cdb;UUCP_DOMDB
+
+local_domains = ....:UUCP_DOMAINS:...
+
+#########################################
+
+uucp_domains.dat -> uucp_domains.cdb
+Contains list of destination dbs in a standard exim form (ie one per line 
+to be fed to exim_dbmbuild)
diff --git a/config.samples/C005 b/config.samples/C005
new file mode 100644 (file)
index 0000000..bc8af28
--- /dev/null
@@ -0,0 +1,85 @@
+From: Marc.Haber-lists@gmx.de (Marc Haber)
+Date: Sat, 01 Aug 1998 13:05:12 GMT
+
+I am using a virus scanner program that is invoked by a pipe, scans the mail
+and re-invokes Exim to do the delivery. The pipe is invoking a perl script that
+tries to unpack and MIME, zip and other archives and then applies the McAfee
+scanner on the results.
+
+The Exim configuration to handle this was created by Sven Paulus
+<sven@oops.sub.de>. The relevant bits are shown below. The virus scanner scans
+the mail and re-delivers it with
+
+  exim -oMr scanned-ok 
+  
+to stop the mail from being scanned a second time. There was a bug in Exim 
+prior to release 2.00 that stopped this working.
+
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+#                       ORDER DOES NOT MATTER                        #
+#     Only one appropriate transport is called for each delivery.    #
+######################################################################
+
+virscan:
+  driver = pipe
+  bsmtp = all
+  batch_max = 32767
+  bsmtp_helo = true
+  command = "/usr/local/virscan/bin/scanmail \
+    $sender_host_address /var/log/exim_virscan 1"
+  current_directory = "/tmp"
+  from_hack = false
+  freeze_exec_fail = false
+  group = virscan
+  ignore_status = false
+  log_defer_output = false
+  log_fail_output = false
+  log_output = true
+  prefix =
+  return_output = false
+  return_path_add = false
+  timeout = 6h
+  umask = 022
+  use_shell = false
+  user = virscan
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Follows system_aliases and userforward directors, but precedes localuser.
+
+vircheck:
+  condition = "${if or {{eq {$received_protocol}{no-attachment}} \
+                        {eq {$received_protocol}{local-not-scanned}} \
+                        {eq {$received_protocol}{scanned-ok}} \
+                        {match {$sender_host_address}{^192\.168\.10\.}}} \
+                 {0}{1}}"
+  driver = localuser
+  transport = virscan
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+#            Specifies how remote addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#  A remote address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# The first router routes everything to the scanner unless the message
+# has previously been scanned.
+
+vircheck:
+  condition = "${if eq {$received_protocol}{scanned-ok} {0}{1}}"
+  driver = domainlist
+  route_list = "*"
+  transport = virscan
diff --git a/config.samples/C006 b/config.samples/C006
new file mode 100644 (file)
index 0000000..02c78c0
--- /dev/null
@@ -0,0 +1,40 @@
+From: Kind@edb.uib.no
+Date: Sun, 2 Aug 1998 15:24:05 +0200
+
+This is how I have configured a PP-inspired vacationnote, there is (was?)
+such a feature in PP. The user makes a file "tripnote" in his/her
+homedirectory, the message is passed to the sender once with a short
+leading text.
+
+############
+# TRANSPORT
+vacation_reply:
+  driver = autoreply
+  file = ${home}/tripnote
+  file_expand
+  log = ${home}/tripnote.log
+  once = ${home}/tripnote.db
+  from = vacation@yourdomain.org
+  to = $sender_address
+  subject = "Re: $h_subject"
+  text = "\
+  Dear $h_from\n\n\
+  This is an automatic reply.  Feel free to send additional\n\
+  mail, as only this one notice will be generated.  The following\n\
+  is a prerecorded message, sent for ${local_part}@yourdomain.org:\n\
+  ====================================================\n\n\
+  "
+
+# DIRECTOR
+user_vacation:
+  driver = localuser
+  require_files = ${local_part}:${home}/tripnote
+  no_verify
+  except_senders = "^.*-request@.*:^owner-.*@.*:^postmaster@.*:\
+                    ^listmaster@.*:^mailer-daemon@.*"
+  transport = vacation_reply
+  unseen
+
+localuser:
+  driver = localuser
+  transport = local_delivery
diff --git a/config.samples/C007 b/config.samples/C007
new file mode 100644 (file)
index 0000000..42c852b
--- /dev/null
@@ -0,0 +1,27 @@
+Date: Thu, 6 Aug 1998 16:01:25 -0400
+From: Peter Radcliffe <pir@pir.net>
+
+If I host a domain foo.dom on my machine as a virtual domain I expect it
+to be completely virtual and seperate from other mail domains that end
+up on my machine. pir@foo.dom may or may not be me ...
+
+I have separate aliasfiles per domain (because its faster and more
+suitable to my application) and use:
+
+# I move this config between different db implementations that either do
+# or don't expect the .db extension.
+DBEXT = .db
+#DBEXT = 
+
+local_domains = "....:dbm;/usr/local/etc/exim/dbm/virtualDBEXT:..."
+
+As the first director:
+
+# deal with virtual domains.
+virtual:
+  driver = aliasfile
+  domains = dbm;/usr/local/etc/exim/dbm/virtualDBEXT
+  no_more
+  rewrite = false
+  file = /usr/local/etc/exim/domains/${lc:${length_1:${domain}}/${domain}}DBEXT
+  search_type = dbm*
diff --git a/config.samples/C008 b/config.samples/C008
new file mode 100644 (file)
index 0000000..7be8cd0
--- /dev/null
@@ -0,0 +1,147 @@
+Date: Thu, 6 Aug 1998 16:51:07 -0700
+From: Stuart Lynne <sl@poste.com>
+
+And of course it is possible to do a very interesting solution to 
+this [virtual domains] using LDAP. 
+
+Selected portions of my configuration using LDAP:
+
+    # Routers entries
+    # ensure we don't attempt delivery unless MX points to this host
+    lookuphost:
+      driver = lookuphost
+      self = fail_soft
+      transport = smtp           
+
+    # punt to director if MX points to this host
+    self:
+      driver = lookuphost
+      self = local
+      transport = smtp                    
+
+    # Director entries
+                                                          
+    # lookup virtual users in directory IFF MX matches "virtual..fireplug.net"
+    virtual_fireplug_net_aliasfile_ldap:
+      condition = "${if match{$self_hostname}{virtual..fireplug.net}{$domain}}"
+      driver = aliasfile
+      search_type = ldap
+      expand
+      errors_to = sl@whiskey.poste.com
+      queries = "ldap:://wilt.fireplug.net/?mailforwardingaddress?sub?(&(mail=$local_part@$domain)(ou=accounts)):\
+           ldap:://wilt.fireplug.net/?mailforwardingaddress?sub?(&(mail=\\\\2a@$domain)(ou=accounts))"
+                                          
+    # specify vacation processing IFF prefix of address is "vacation-"
+    vacation_prefix:
+      condition = "${if match{$local_part}{.*%.*}{$domain}}"
+      driver = smartuser
+      prefix = "vacation-"
+      transport = vacation_delivery
+      new_address = "${if match{$local_part}{(.*)%.*}{$1}{$domain}}@${if match{$local_part}{.*%(.*)}{$1}{$domain}}"
+                                         
+    # specify delivery to pop mailbox IFF prefix of address is "pop-"
+    pop_prefix:
+      condition = "${if match{$local_part}{.*%.*}{$domain}}"
+      prefix = "pop-"
+      driver = smartuser
+      transport = pop_delivery
+      new_address = "${if match{$local_part}{(.*)%.*}{$1}{$domain}}@${if match{$local_part}{.*%(.*)}{$1}{$domain}}"
+
+    # specify delivery to imap mailbox IFF prefix of address is "imap-"
+    imap_prefix:
+      condition = "${if match{$local_part}{.*%.*}{$domain}}"
+      prefix = "imap-"
+      driver = smartuser
+      transport = imap_delivery
+      new_address = "${if match{$local_part}{(.*)%.*}{$1}{$domain}}@${if match{$local_part}{.*%(.*)}{$1}{$domain}}"
+                                           
+                                                                                        
+    # Transport entries
+
+    # perform delivery to pop mailbox 
+    pop_delivery:
+      driver = appendfile
+      #create_directory
+      from_hack
+      file = /var/mail/${domain}/${lc:$local_part}
+      user = mail
+      group = mail                               
+
+    # perform delivery to imap mailbox 
+    imap_delivery:
+      driver = appendfile
+      no_from_hack
+      prefix = ""
+      suffix = ""
+      maildir_format
+      create_directory
+      directory = "/var/imap/${domain}/${length_2:${lc:$local_part}}/${lc:$local_part}/INBOX"
+      user = mail
+      group = mail            
+
+    # perform vacation processing
+    vacation_delivery:
+      driver = autoreply
+      file = /etc/exim/vacation-msg.txt
+      file_optional
+      user = mail
+      group = mail
+      to = $sender_address
+      subject = "Autoreply: Vacation message for ${local_part}@${domain}"
+      headers = "Mime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"m1Stw9KgbdL9/HM9\""
+      text = "--m1Stw9KgbdL9/HM9\nContent-Type: text/plain; charset=us-ascii\n\
+       Content-Disposition: attachment; filename=\"${local_part}@${domain} vacation message\"\n\
+       \n\n${expand:${lookup ldap\
+       {ldap://src.fireplug.net/?mailAutoReplyText?sub?(&(mail=${local_part}@${domain})(ou=accounts))}{$value}{}}}\n\
+       \n--\n${local_part}@${domain}\n\n"
+      log = "/var/mail/${domain}/${local_part}_vlog"
+      once = "/var/mail/${domain}/${local_part}_vdb"
+                                                                           
+
+To use this we have LDAP entries for each user that look something like:
+
+    bjectclass: top
+    objectclass: account
+    objectclass: mailRecipient
+    objectclass: fireMessagingUser
+    objectclass: person
+    objectclass: organizationalPerson
+    objectclass: inetorgPerson
+    objectclass: fireNewsAccess
+    uid: richard@big-cats.com
+    mail: richard@big-cats.com
+    mailforwardingaddress: richard@poste.com
+    mailforwardingaddress: vacation-richard%fireplug.net@popserver.fireplug.net
+    mailforwardingaddress: richard%fireplug.net@popserver.fireplug.net
+    userpassword: abcedfg
+    cn: richard
+    sn: richard
+    mailautoreplytext: I'm on vacation
+
+The exim ldap lookup simply finds the entry based on the mail attribute
+and returns the mailforwardingaddress attribute value.
+
+This can take several forms and is multi-valued. For example:
+
+    richard@poste.com
+               deliver somewhere else, in this case to another
+               address on another server
+
+    pop-richard%big-cats.com@popserver.fireplug.net
+               deliver into pop mailbox in virtual host directory
+               for big-cats.com on server popserver.fireplug.net
+
+    vacation-richard%big-cats.com@popserver.fireplug.net
+               perform vacation processing for user
+
+This setup has the interesting property that we can setup multiple
+mailbox servers with identical configuration files that will all
+deliver mail to mailboxes they are told to deliver to or will forward
+to the correct server for the mailbox. All of the interesting 
+information about where to deliver mail for a user is in the LDAP
+server database. 
+
+In other words, not only can a single host act as a server for
+multiple virtual domains, but all of the virtual domains can have
+mailboxes spread across a number of physical servers.
diff --git a/config.samples/C009 b/config.samples/C009
new file mode 100644 (file)
index 0000000..836b26c
--- /dev/null
@@ -0,0 +1,44 @@
+Date: 6 Oct 1998
+From: Philip Hazel
+
+These are suggested parts of a configuration for looking up users in 
+/etc/passwd.domain rather than in /etc/passwd, with a separate alias file for 
+each domain as well. Delivery takes place into a mailbox within a per-domain 
+directory, though a different transport could of course be substituted. The
+delivery process is run as user exim, group mail. The list of domains is kept
+in /etc/customer/domains.
+
+# Transport: Place this in the "transports" section of the configuration.
+
+virtual_localdelivery:
+  driver = appendfile
+  file = /var/spool/mail/${domain}/${local_part}
+  user = exim 
+  group = mail
+  mode = 660
+  
+# Directors: Place these two directors in the "directors" section of the
+# configuration. DO NOT put them immediately after the transport driver
+# just defined - that's the wrong part of the configuration file. 
+# This director handles aliases. Because it has no transport setting, it
+# just expands local parts that it recognizes into new addresses.
+virtual_alias:
+   driver = aliasfile
+   domains = lsearch;/etc/customer/domains
+   file = /etc/customer/${domain}.aliases
+   search_type = lsearch
+   qualify_preserve_domain 
+
+# This director checks local parts. It *does* have a transport setting, so
+# if it finds a local part in the file, the message is directed to that
+# transport. The data following the local part in the file is not used.
+virtual_localuser:
+   driver = aliasfile
+   transport = virtual_localdelivery
+   domains = lsearch;/etc/customer/domains
+   file = /etc/passwd.$domain
+   search_type = lsearch  
+   no_more
diff --git a/config.samples/C010 b/config.samples/C010
new file mode 100644 (file)
index 0000000..a53407e
--- /dev/null
@@ -0,0 +1,119 @@
+Date: Tue, 22 Sep 1998 23:21:58 -0400
+From: Peter Radcliffe <pir@pir.net>
+
+Philip Hazel <ph10@cus.cam.ac.uk> probably said:
+> On Fri, 18 Sep 1998, Tabor J. Wells wrote:
+> > One of our customers is looking for us to support addresses of the form
+> > username+extension@domain.com, primarily for use with procmail.
+
+> Look up the "prefix" and "suffix" options of directors. A smartuser 
+> director with options along the lines of
+> 
+>   suffix = +extension
+>   new_address = some kind of lookup to get the rewrite, and then 
+>                 manipulation involving the use of $local_part_suffix
+>                 to put the extension back. Depending on your lookup,
+>                 could be messy...
+
+Thats what I was doing before I saw this ;)
+If this isn't clear and you want an explanation, ask ...
+
+Note to Tabor: I added qualify_preserve_domain to the virtual director.
+This is not what you have now and will break things, you'll have to remove
+it and alter the virtual suffix as it says.
+
+# macros
+
+EBASE = /usr/local/etc/exim
+DSUFFIX = -
+# DSUFFIX = +
+DBEXT = .db
+#DBEXT = 
+
+## transports
+
+# delivery by procmail, local users with .procmailrc files only
+procmail_pipe:
+  driver = pipe
+  delivery_date_add = true
+  envelope_to_add = true
+  return_path_add = true
+  path = "/usr/local/bin:/usr/bin"
+  command = "procmail -a ${substr_1:${local_part_suffix}} -d ${local_part}"
+  from_hack
+  user = ${local_part}
+
+
+## directors
+
+# deal with virtual domains - just for virtual domains, look them up
+virtual:
+  driver = aliasfile
+  domains = dbm;EBASE/dbm/virtualDBEXT
+  file = EBASE/domains/${lc:${length_1:${domain}}/${domain}}DBEXT
+  search_type = dbm*
+  forbid_file
+  forbid_pipe
+  qualify_preserve_domain
+
+
+# if the virtual domain has no postmaster or root alias, throw them at
+# the default domain
+virtualpostmaster:
+  driver = smartuser
+  domains = dbm;EBASE/dbm/virtualDBEXT
+  local_parts = "postmaster:root"
+  new_address = ${local_part}@${qualify_recipient}
+
+
+# and if there is a -something suffix, send it to the right place
+virtualsuffix:
+  driver = smartuser
+  domains = dbm;EBASE/dbm/virtualDBEXT
+  no_more
+  suffix = DSUFFIX*
+# if you want this to not do qualify_preserve_domain replace ' {$domain} '
+# with ' {$qualify_recipient} ' in the 7th line.
+  new_address = "\
+    ${lookup{$local_part} dbm \
+      {EBASE/domains/${lc:${length_1:${domain}}/${domain}}DBEXT} \
+      {\
+        ${if !match {$value}{^:(defer|fail|blackhole|include):} \
+          {${local_part:$value}${local_part_suffix}@\
+           ${if eq {${domain:$value}} {} {$domain} {${domain:$value}}}}\
+        fail}\
+      }\
+    fail}"
+
+.
+.
+.
+
+userforward:
+  driver = forwardfile
+  no_verify
+  check_ancestor
+  file = .forward${local_part_suffix}
+  filter
+  suffix = DSUFFIX*
+  suffix_optional
+
+
+# Use procmail only if a ~/.procmailrc file exists, and procmail exists.
+# If sending to a username-suffix and $HOME/.forward-suffix exists,
+# its valid.
+procmail:
+  driver = localuser
+  transport = procmail_pipe
+  require_files = "${local_part}:${home}/.procmailrc:+/usr/local/bin/procmail"
+  suffix = DSUFFIX*
+  suffix_optional
+  
+# I realised that this might pass things to procmail when you have a .forward
+# file and expect it not to happen (if .forward and .procmailrc exist user-foo
+# will still get passed to procmail).
+# To stop this you can change the above to use:
+  require_files = "${local_part}:${home}/.procmailrc:+/usr/local/bin/procmail\
+                    :!${home}/.forward"
diff --git a/config.samples/C011 b/config.samples/C011
new file mode 100644 (file)
index 0000000..eb6eafa
--- /dev/null
@@ -0,0 +1,135 @@
+Date: Thu, 26 Nov 1998 09:39:52 +0000
+From: David M Walker <davidw@datamgmt.com>
+
+Thanks to Philip and others I now have my ISP style config built and
+therefore am posting the final configuration fragments to the list in
+case anyone else wants to do a similar thing
+
+######################################################################
+
+# This configuration fragment is for use with an ISP type solution
+# Each client has their own directory that contains their own
+# editable passwd, alias etc type files. Furthemore if they create
+# a local user then that user can also have a a .forward file and/or
+# a .autoreply file.
+#
+# Files and Directories
+# Password file for a domain
+#      /clients/${domain}/etc/passwd
+# Alias file for a domain
+#      /clients/${domain}/etc/aliases
+# Directory where users mail for a domain is stored
+#      /clients/${domain}/mail/
+# Location of file with a list of domains
+#      /clients/utils/data/domains
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+# This transport is used for local delivery to user mailboxes.
+
+virtual_localdelivery:
+  driver = appendfile
+  file = /clients/${domain}/mail/${local_part}
+  user = ${lookup{$local_part}lsearch{/etc/passwd}{$value}{exim}}
+  group = mail
+  mode = 0660
+
+# This transport is used to handly autoreplys
+
+auto_transport:
+  driver = autoreply
+  from = $local_part@$domain 
+  to = $sender_address
+  subject = "Reply re: $header_subject:"
+  file =
+"${extract{5}{:}{${expand:${lookup{$local_part}lsearch{/clients/${domain}/etc/passwd}{$value}}}}}/.autoreply"
+  user = exim
+      
+# This transport is used for handling pipe addresses generated by alias
+# or .forward files. 
+
+address_pipe:
+  driver = pipe
+  return_output
+
+# This transport is used for handling file addresses generated by alias
+# or .forward files.
+
+address_file:
+  driver = appendfile
+
+# This transport is used for handling file addresses generated by alias
+# or .forward files if the path ends in "/".
+
+address_directory:
+  driver = appendfile
+  no_from_hack
+  prefix = ""
+  suffix = ""
+
+# This transport is used for handling autoreplies generated by the
+filtering
+# option of the forwardfile director.
+
+address_reply:
+  driver = autoreply
+
+# This transport is used for delivering messages over SMTP connections.
+
+remote_smtp:
+  driver = smtp
+  command_timeout = 1m,
+  connect_timeout = 10s
+  
+end
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+######################################################################
+
+# Handles .autoreply files
+
+auto_director:
+  driver = smartuser
+  transport = auto_transport
+  require_files =
+root:${extract{5}{:}{${expand:${lookup{$local_part}lsearch{/clients/${domain}/etc/passwd}{$value}}}}}/.autoreply
+  condition = ${if eq{$sender_address}{}{no}{yes}}
+  unseen
+
+# Handles any .forward files
+
+userforward:
+  driver = forwardfile
+  check_local_user = false
+  #file_directory =
+"${extract{5}{:}{${expand:${lookup{$local_part}lsearch{/clients/${domain}/etc/passwd}{$value}}}}}"
+  #file = .forward
+  file =
+"${extract{5}{:}{${expand:${lookup{$local_part}lsearch{/clients/${domain}/etc/passwd}{$value}}}}}/.forward"
+  user = root
+  no_verify
+  check_ancestor
+  filter
+
+# This director matches local user mailboxes.
+
+virtual_localuser:
+   driver = aliasfile
+   transport = virtual_localdelivery
+   domains = lsearch;/clients/utils/data/domains
+   file = /clients/${domain}/etc/passwd
+   search_type = lsearch
+
+# This director matches anything in the aliases
+
+virtual_alias:
+   driver = aliasfile
+   domains = lsearch;/clients/utils/data/domains
+   file = /clients/${domain}/etc/aliases
+   search_type = lsearch*
+   qualify_preserve_domain 
+
+end
diff --git a/config.samples/C012 b/config.samples/C012
new file mode 100644 (file)
index 0000000..70c9cfb
--- /dev/null
@@ -0,0 +1,89 @@
+Date: Thu, 05 Nov 1998 00:19:46 +0100
+From: David Frey <david@eos.lugs.ch>
+
+I've written a small chapter how-to configure exim for use with UUCP
+(mostly condensed from the exim-user mailing list plus some experimenting)
+and would be glad if it could be included in the exim documentation.
+
+--------------------------------------------------------------------------8<---
+\input texinfo                                               @c -*- texinfo -*-
+@c $Id: C012,v 1.2 2000/01/09 21:33:19 nigel Exp $
+
+@c %** start of header
+@setfilename exim-uucp.info
+@settitle    Exim and @sc{uucp}
+@c %** end of header
+
+@iftex
+@afourpaper
+@end iftex
+
+@section Exim and @sc{uucp}
+
+Configuring exim for use with @sc{uucp} is a bit of manual work, since exim
+wasn't written with @sc{uucp} in mind.
+
+This guide assumes that you use @emph{Internet-addressing} --- i.e. both
+sides use Taylor-@sc{uucp} --- or 1-level deep Bang-paths (the Bang-Path level 
+has to be finite to make address-rewriting feasible). What you have to do is 
+the following:
+
+@enumerate
+@item 
+add a new transports definition
+@item 
+add a new router
+@end enumerate
+
+@subsection Transports
+
+The @emph{transports} does the work: it passes the mail to @sc{uucp}.
+This is the place to do bang-path-conversions and similar things
+(when using Taylor-@sc{uucp}, as my provider does, the Internet-address 
+is simply passed to rmail).        
+
+@example
+uucp_pipe:
+  driver = pipe 
+  batch = all 
+  command = "uux - -a\"$sender_address\" -r $host\!rmail $pipe_addresses" 
+  delivery_date_add = true 
+  pipe_as_creator 
+  restrict_to_path 
+  path = "/usr/bin:/bin" 
+  return_output
+@end example
+
+If you wanted to use bang-paths, you'd use something as (untested):
+@example
+@dots{}
+  command = "uux - -a$sender_address -r $host\!rmail ($domain\!$local_part)" 
+@dots{}
+@end example
+
+@subsection Router
+
+The @emph{router} tells exim that a @sc{uucp}-route is available:
+
+@example
+uucp:
+  driver = domainlist 
+  transport = uucp_pipe 
+  route_list = "* neighbor byname"
+@end example
+
+@var{neighbor} is the upstream @sc{uucp}-neighbor; all outgoing traffic
+is routed over there (leaf node configuration).
+
+@subsection Other
+
+In order to omit the @code{Sender: uucp} line, add @var{uucp} to the
+trusted users:
+
+@example
+trusted_users  = mail:uucp
+trusted_groups = uucp
+@end example
+
+@bye
+--------------------------------------------------------------------------8<---
diff --git a/config.samples/C013 b/config.samples/C013
new file mode 100644 (file)
index 0000000..7f9facb
--- /dev/null
@@ -0,0 +1,59 @@
+Date: Mon, 26 Oct 1998 15:14:04 -0500                                   
+From: Mario Dupuis <Mario.Dupuis@mfg.canadair.ca>                
+
+I've take some tips from the FAQ about permitting only certain users
+to send to external mail and came up with my own for the receiving part.
+
+[I have modified this to cope with the case of a null sender. PH]
+
+#
+# Transports
+#
+reject_remote_user:
+  driver        = autoreply
+  file          = /etc/exim/err_messages/reject_remote_user.txt
+  file_expand
+  user          = exim
+  group         = exim
+  from          = postmaster@${domain}
+  to            = $sender_address
+  subject       = "Re: Your mail to ${local_part}@${domain}"
+
+#
+# Directors
+#
+localuser:
+  driver = localuser
+  transport = local_delivery
+  condition = "${if eq{$sender_address}{}{yes}\
+    {${lookup{$sender_address_domain}lsearch{/exim/perm/domains}{yes}}}}"
+
+localuser_from_external:
+  driver = localuser
+  transport = local_delivery
+  condition ="${lookup{$local_part}lsearch{/exim/permitted/receivers}{yes}}"
+
+localuser_from_external_bounce:
+  driver = smartuser
+  transport = reject_remote_user
+  no_verify
+  unseen
+
+#
+# Routers
+#
+internal_delivery:
+  driver = domainlist
+  route_list = "*our_domain.com  $domain  bydns_mx;\
+                *our_friend.com  $domain  bydns_mx;\
+  transport = remote_smtp
+
+external_delivery:
+        driver = domainlist
+        route_list = "*  internet-gateway.com  bydns_a"
+        transport = remote_smtp
+        require_files = /etc/exim/permitted/senders
+        senders = ":\
+          ^[^@]+@(?!${rxquote:our_domain.com}\\$):\
+          lsearch;/etc/exim/permitted/senders"
+
diff --git a/config.samples/C014 b/config.samples/C014
new file mode 100644 (file)
index 0000000..585d5b4
--- /dev/null
@@ -0,0 +1,53 @@
+From: Nigel Metheringham <Nigel.Metheringham@ThePLAnet.net>
+Date: Wed, 23 Dec 1998 09:30:11 +0000
+
+If I have a situation where a site I MX for has a known outage I stash all
+their mail into a directory in BSMTP format.  This is how I do it -
+another way would be to use a router rather than a director to do this....
+
+ EXICONF_DIR    = /var/exim
+ HELD_DOMDB     = EXICONF_DIR/held_domains.cdb
+ HELD_DOMAINS   = cdb;HELD_DOMDB
+ LOCAL_DOMAINS  = ...:HELD_DOMAINS:...
+ local_domains  = LOCAL_DOMAINS
+
+ #
+ # held_domain transport
+ # ~~~~~~~~~~~~~~~~~~~~~
+ #
+ # This is a transport used to stash held mail into.
+ # Its basically a BSMTP maildir setup.
+
+ held_domain:
+  driver = appendfile
+  directory = /var/spool/mail/held_domains/${lc:$domain}
+  maildir_format
+  user = exim
+  group = exim
+  mode = 0640
+  create_directory
+  bsmtp = domain
+  prefix = ""
+  suffix = ""
+  no_from_hack
+
+.... 
+
+ #
+ # held_domains director
+ # ~~~~~~~~~~~~~~~~~~~~~
+ #
+ # Handles domains that are broken in some way so we hold mail
+ # for them in a bsmtp mail queue
+ #
+ held_domains:
+  domains = "HELD_DOMAINS"
+  driver = smartuser
+  transport = held_domain
+
+When the outage is over I then knock the entry out of the held domains
+cdb, and then cat all the BSMTP files into exim -bS (probably with a few
+extra options to make it route and queue them).
+
+This keeps our queues manageable and prevents piles of extra delay messages
+being sent out.
diff --git a/config.samples/C015 b/config.samples/C015
new file mode 100644 (file)
index 0000000..80fbcc9
--- /dev/null
@@ -0,0 +1,68 @@
+From: Andromeda <andromeda@htmlworkshop.com> 
+Date: Sun, 15 Nov 1998 23:24:05 +0200   
+
+This approach to virtual domains has helped me a great deal, and is so easy
+to maintain (add and modify as appropriate):
+
+Under the main configuration settings (in your configure file):
+
+local_domains = "domain1.com:mydomain.com:\
+              lsearch;/usr/exim/aliases/domains"
+
+Under transports:
+
+local_delivery:
+  driver = appendfile
+  file = /var/spool/mail/${local_part}
+
+Under the directors settings:
+
+system_aliases:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  driver = aliasfile
+  file = /etc/aliases
+  search_type = lsearch
+
+userforward:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  no_verify
+  driver = forwardfile
+  file = .forward
+
+localuser:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  driver = localuser
+  transport = local_delivery
+
+virtual:
+  domains = "lsearch;/usr/exim/aliases/domains"
+  driver = aliasfile
+  no_more
+  file = /usr/exim/aliases/$domain-aliases
+  search_type = lsearch
+
+Voila. Done. This requires the following files from you:
+
+1. domains (contains the domains that you do virtual hosting for. Its format is
+as follows:
+
+domain1.com
+domain2.com
+.
+.
+etc.
+
+2. domain1.com-aliases (contains the addresses in domain1.com that you want
+to redirect). The format is as follows:
+
+bob: bob@ibm.net
+adam: adam@otherdomain.com
+.
+.
+etc.
+
+/usr/exim/aliases/ is my directory where I store those files to make it
+easier for administration.
+
+This way it works just fine, and mail to non-existent aliases gets bounced.
+You can check whether selecting *: allows you to do a catch-all.
diff --git a/config.samples/C016 b/config.samples/C016
new file mode 100644 (file)
index 0000000..ae3c182
--- /dev/null
@@ -0,0 +1,264 @@
+From: Andromeda <andromeda@htmlworkshop.com>
+Date: Sun, 15 Nov 1998 23:24:10 +0200
+
+Herewith my configuration:
+
+######################################################################
+#                  Runtime configuration file for Exim               #
+######################################################################
+
+
+# This is a default configuration file which will operate correctly in
+# uncomplicated installations. Please see the manual for a complete list
+# of all the runtime configuration options.
+
+
+# This file is divided into several parts, all but the last of which are
+# terminated by a line containing the word "end". The parts must appear
+# in the correct order, and all must be present (even if some of them are
+# in fact empty). Blank lines, and lines starting with # are ignored.
+
+deliver_load_max = 5.0
+return_size_limit  =  10k
+auto_thaw = 2h
+message_filter_user = exim 
+exim_user = exim
+exim_path = /usr/exim/bin/exim
+
+# Let's fix this gecos thing -- Siviwe (28/06/97)
+gecos_pattern="([^,]*)"
+gecos_name=$1
+
+# implement complete sender and recipient verification, including fixups.
+
+sender_verify
+sender_verify_reject
+sender_verify_fixup
+receiver_verify
+
+# allow IP addresses to connect
+
+log_ip_options
+no_refuse_ip_options
+
+# implement some anti-spam (RBL) - Andromeda 27/02/98
+
+rbl_domains = rbl.maps.vix.com
+rbl_reject_recipients
+
+# implement virtual domain mail relay - Andromeda 6/10/98
+
+sender_address_relay = "partial-lsearch;/usr/exim/local/localdomains"
+
+# implement customised SMTP welcome banner - Andromeda 10/11/98
+
+smtp_banner = "Welcome! This system does not accept Unsolicited \
+      Commercial Email and will\nblacklist offenders through RBL and our \
+      internal list. Have a nice day!\n\n${primary_hostname} ESMTP Exim \
+      ${version_number} ${tod_full}"
+
+# implement sender blacklisting using rejection lists - Andromeda 11/11/98
+# also implement a feedback mechanism for un-blacklisting
+
+sender_reject_recipients = "@@lsearch;/usr/exim/local/blacklist"
+recipients_reject_except = "@@lsearch;/usr/exim/local/blacklist-except"
+
+sender_host_reject_recipients = "+allow_unknown: \
+                                lsearch;/usr/exim/local/hosts-blacklist"
+
+# future implementations for specific spamming hosts and nets
+#
+#sender_host_reject_except = "/usr/exim/local/hosts-except"
+#sender_net_reject_except = /usr/exim/local/nets-except
+#
+
+# implement customised SMTP error rejection messages
+
+prohibition_message =
+"$prohibition_reason|${lookup{$prohibition_reason}lsearch\
+  {/usr/exim/reject.messages}{$value}}"
+
+######################################################################
+#                    MAIN CONFIGURATION SETTINGS                     #
+######################################################################
+
+# Specify your host's canonical name here. If this option is not set, the
+# uname() function is called to obtain the name.
+
+# primary_hostname =
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. If this option is not set, the primary_hostname value is used.
+qualify_domain = eons.net
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+
+# qualify_recipient =
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set, the qualify_recipient value is used as the only local domain.
+# If you do not want to do any local deliveries, uncomment the following line,
+# but do not supply any data for it.
+
+local_domains = "eons.net:fusion.eons.net:mail.eons.net:\
+              lsearch;/usr/exim/aliases/domains"
+
+# No local deliveries will ever be run under the uids of these users.
+
+#never_users = root
+
+# If you are running Exim under its own uid (recommended), then you should
+# set up that uid as a trusted user by de-commenting the following and
+# changing the name if necessary.
+
+trusted_users = exim:majordom
+
+end
+
+
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+# This transport is used for local delivery to user mailboxes.
+
+local_delivery:
+  driver = appendfile;
+  file = /var/spool/mail/${local_part}
+
+# This transport is used for handling pipe addresses generated by alias
+# or .forward files. It has a conventional name, since it is not actually
+# mentioned elsewhere in this configuration file.
+
+address_pipe:
+  driver = pipe;
+  ignore_status,
+  user = majordom,
+  return_output
+
+# This transport is used for handling file addresses generated by alias
+# or .forward files. It has a conventional name, since it is not actually
+# mentioned elsewhere in this configuration file.
+
+address_file:
+  driver = appendfile;
+  user = majordom
+
+# This transport is used for handling autoreplies generated by the filtering
+# option of the forwardfile director. It has a conventional name, since it
+# is not actually mentioned elsewhere in this configuration file.
+
+address_reply:
+  driver = autoreply
+
+# This transport is used for delivering messages over SMTP connections.
+
+smtp:
+  driver = smtp;
+
+end
+
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+######################################################################
+
+# This director handles aliasing using a traditional /etc/aliases file.
+
+system_aliases:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  driver = aliasfile;
+  file = /etc/aliases,
+  search_type = lsearch
+
+# This director handles forwarding using traditional .forward files.
+# If you want it also to allow mail filtering when a forward file
+# starts with the string "# Exim filter", uncomment the "filter" option.
+# Note the except_domains part - needed for the virtual hosts...
+
+userforward:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  no_verify,
+  driver = forwardfile;
+  file = .forward,
+# filter
+
+# This director matches local user mailboxes.
+
+localuser:
+  except_domains = "lsearch;/usr/exim/aliases/domains"
+  driver = localuser,
+  transport = local_delivery;
+
+# This director matches local virtual hosts
+
+virtual:
+  domains = "lsearch;/usr/exim/aliases/domains",
+  driver = aliasfile,
+  no_more;
+  file = /usr/exim/aliases/$domain-aliases,
+  search_type = lsearch
+
+end
+
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+######################################################################
+
+#route_append:
+#  driver = domainlist,
+#  transport = smtp;
+#
+
+# This router routes to remote hosts over SMTP using a DNS lookup with
+# default options.
+
+lookuphost:
+  driver = lookuphost,
+  transport = smtp;
+
+# This router routes to remote hosts over SMTP by explicit IP address,
+# given as a "domain literal" in the form [nnn.nnn.nnn.nnn]. The RFCs
+# require this facility, which is why it is enabled by default in Exim.
+# If you want to lock it out, set forbid_domain_literals in the main
+# configuration section above.
+
+literal:
+  driver = ipliteral,
+  transport = smtp;
+
+end
+
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 2 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+*                      *           F,2h,2m; G,16h,2h,1.5; F,4d,8h
+
+end
+
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+#   <source pattern>  <replacement>  <flags>
+
+# End of Andromeda Exim configuration file
diff --git a/config.samples/C017 b/config.samples/C017
new file mode 100644 (file)
index 0000000..5760c8e
--- /dev/null
@@ -0,0 +1,290 @@
+Date: Tue, 8 Dec 1998 13:00:00 -0600
+From: mark david mcCreary <mdm@internet-tools.com>
+
+I have gotten the new VERP feature of Exim 2.054 working in test, along
+with some supporting programs to handle bounces that do come back.  The
+routines are included below.
+
+The idea is that each message sent out will have a unique envelope sender,
+and all SMTP engines should return bounces to the machine that sent it,
+based on the envelope information.
+
+The envelope sender is unique in that it contains the mailing list that
+sent the message, as will as the email address of the recipient.  Any
+message sent back to that address should always be a bounce, and thus there
+is no need to decipher the body of the message for clues as to which email
+address bounced.
+
+The supporting procmail and perl program simply read the email address, and
+compose a standard <550> SMTP error message to send to the mailing list.
+The mailing list (at least Smartlist) will then remove addresses that
+bounce more than x times.
+
+I would guess with some fancy regexp parsing and Exim filters to place a
+<550> joe@aol.com in the body, the Procmail and Perl routines could be
+replaced, and the <550> error message generated from within Exim, and then
+sent to the appropriate mailing list.
+
+Please let me know if you figure out how to do that.
+
+
+Part 1 - Exim configuration (needs Exim 2.054 or better)
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+## This transport is called for all mailed sent to bounce-*
+# The comeback procmail will parse it, and create a bounce message
+# to the correct list
+
+bounce_pipe:
+  driver = pipe;
+  command = "/usr/bin/procmail -d comeback",
+  envelope_to_add,
+  user = exim
+
+
+# This transport is used for delivering messages over SMTP connections.
+# One message at a time, so that the address may be placed in the To: line
+# Kludge up a message id, so that receiving hosts do not consolidate on same
+# message id
+
+smtp:
+  headers_remove =
+"To:Message-Id:Resent-To:Resent-Date:Resent-From:Resent-Message-Id:Resent-Bcc",\r
+add_headers = "To: $local_part@$domain\n\
+  Message-Id:
+<EMDM${length_3:$local_part}${substr_17_2:$tod_log}${substr_14_2:$tod_log}${subs
+tr_11_2:$tod_log}${length_3:$domain}\
+  @$primary_hostname>",
+ return_path = "${if match {$return_path}{^(.+?)-request@.*\\$}\
+        {bounce-$1=$local_part=$domain@$primary_hostname}fail}",
+  driver = smtp;
+  max_rcpt = 1
+end
+
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+######################################################################
+
+
+# any mail prefixed with bounce- is probably a bounce message
+# from the owner-hack delivery method
+
+bounce:
+  driver = smartuser,
+  prefix = bounce-;
+  transport = bounce_pipe
+
+
+
+Part 2 - Procmail Routine - Needs Procmail 3.11pre7
+
+#   The mail-list.com front-end for Smartlist Mailing Lists
+#
+#      Copyright (c) 1998 Internet Tools, Inc.
+#
+#      This program is free software; you can redistribute it and/or modify
+#      it under the terms of the GNU General Public License as published by
+#      the Free Software Foundation; either version 2 of the License, or
+#      (at your option) any later version.
+#
+#   Comeback Bounce Error Routine
+#
+#   This routine is used when bounced message come back from the owner-hack
+#   method of delivery.  That is, each envelope sender is unique, containing
+#   the list name and email address in the envelope.
+#
+#   Reads email message bounced back and creates and sends
+#   bounce message back to appropriate list
+#
+#   Calls Perl program comeback.pl to accomplish the bulk of the work
+
+PATH=.:/home/ftp/discuss/.bin:/bin:/usr/bin:/usr/local/bin:/usr/sbin:$PATH
+SHELL=/bin/sh
+
+VERBOSE=yes
+LOGABSTRACT=all
+LOGFILE=$HOME/procmailog
+COMSAT=no
+test=test              # /usr/bin/test
+mkdir=mkdir     # /bin/mkdir
+
+DOMAIN=mail-list.com           # the common domain for all the lists
+SUBDOMAIN=`hostname`           # the fully qualified hostname
+
+$test -d backup  || $mkdir backup
+$test -d bounces || $mkdir bounces
+
+#  save a copy of all incoming files to an existing directory called backup
+#
+:0 c
+backup
+
+#  detect mail loop
+#  save in folder for debugging purposes
+#  terminate
+
+:0
+* $^(X-(Unsubscribe:|Diagnostic:))
+bounces
+
+#  weighted scoring to determine if it's a from a mailer_daemon
+#  The E flag executes only if the preceding receipe did not
+#
+
+#:0 h
+#* -100^0 ^FROM_DAEMON
+#* 1^0
+#{ }
+
+#:0 Eh
+#bounces
+
+SENDER  = `formail -rtzx To:`
+SUBJECT = `formail -zxSubject:`
+TODAY   = `date "+%Y-%m-%d %T"`
+
+
+:0 hwic: log.lock
+|  echo -e $TODAY "\t" $SENDER "\t" $SUBJECT >> log-comeback
+
+
+#  throw away all messages that are warnings, or notices of receipt
+
+:0 h
+* ^Subject: \
+   (Message status - opened| \
+   .*warning| \
+   .*temporarily unable to deliver| \
+   .*Undelivered mail in mailqueue|.*Waiting mail|mail warning)
+/dev/null
+
+
+#  filter the email message
+#  throw away the body, all information is in the headers
+
+:0 fbi
+| /bin/true
+
+#  filter the email message
+#  remove bounce- prefix from envelope-to header
+#  move into from header
+
+:0 fh
+* ^Envelope-to: bounce-\/.*
+| formail -I"To: $MATCH"
+
+
+#  filter the email message
+#  set up the headers for the perl program
+
+:0 fh
+| formail -I"Subject: Bounce from comeback" \
+          -I"Envelope-to:" \
+                 -I"From: mailer-daemon@[127.0.0.1]"
+
+#
+#  pass email message to perl program
+#  which will send out a bounce message to the correct list, from the bouncing
+#  email address
+#
+
+:0 w
+| comeback.pl
+
+
+Part 3 - Perl Program - needs Perl 5.004 with Perl Modules for Internet mail
+
+#!/usr/bin/perl -w
+#
+#   The mail-list.com front-end for Smartlist Mailing Lists
+#
+#      Copyright (c) 1998 Internet Tools, Inc.
+#
+#      This program is free software; you can redistribute it and/or modify
+#      it under the terms of the GNU General Public License as published by
+#      the Free Software Foundation; either version 2 of the License, or
+#      (at your option) any later version.
+#
+#
+#  This program will generate bounce messages, and send them to the
+#  appropriate list-request address.
+#
+#  This program is invoked by a Procmail recipe.  The body of the email
+#  message came back from the owner-hack delivery, and can be ignored.
+#
+#  Exim will stick the envelope address in a special header - Envelope-to:
+#
+#  This program will parse out the offending list and email address from
+#  that Envelope-To address.  Then create a bounce message and send it.
+#
+#  This program uses the Perl Module  Mail::Internet to send each message.
+
+use Mail::Internet;
+
+chop(my $Date = `date "+%Y-%m-%d %T"`);
+
+my $bounce_body = '     550 ';  #  550 is SMTP error code for user unknown
+open(LOG,">>/tmp/comeback.log") || die(" Could not open comeback.log $!");
+
+$ENV{'SMTPHOSTS'} = '[127.0.0.1]';
+
+my $mesg = new Mail::Internet \*STDIN;
+
+# look at mail headers, and grab the data
+
+my $from = $mesg->head->get('From'); chop($from);
+my $to = $mesg->head->get('To'); chop($to);
+my $subject = $mesg->head->get('Subject'); chop($subject);
+
+my @tokens = split(/@/, $to);
+my @parts  = split(/=/, $tokens[0], 2);
+my $long_to     = $parts[0];
+my $bad_address = $parts[1];
+
+$bad_address =~ s/=/@/;                # replace = sign with @ symbol
+
+$to = $long_to . "-request\@[127.0.0.1]";
+
+# make the body of the message a simple bounce message that smartlist can
+handle
+
+my $message_body = $bounce_body . "<" . $bad_address . ">" . "\n";
+
+my $new_mesg = new Mail::Internet(
+       [ ],
+       'Body' => [$message_body]
+       );
+
+# this is who the mail is directed to via SMTP;
+
+$ENV{MAILADDRESS} = $from;
+
+# these are the addresses placed in the header block of the message.
+
+$new_mesg->head()->add('From', $from);
+$new_mesg->head()->add('To', $to);
+$new_mesg->head()->add('Subject', $subject);
+
+#      $new_mesg->print_header(\*LOG);
+#      $new_mesg->print_body(\*LOG);
+
+print LOG  "$Date\t$to\t$bad_address\n";
+
+my @recips =  $new_mesg->smtpsend;
+
+unless (@recips > 0) {
+       print LOG "Failed to deliver ($from,$to,$message_body) \n";
+       }
+
+
+Please send comments or suggestions for improvements to mdm@internet-tools.com
+
+mark david mcCreary
+Internet Tools, Inc.                      1436 West Gray #438
+mdm@internet-tools.com             Houston, Texas 77019
+http://www.internet-tools.com   713.627.9600
diff --git a/config.samples/C018 b/config.samples/C018
new file mode 100644 (file)
index 0000000..17bb2c8
--- /dev/null
@@ -0,0 +1,148 @@
+Date: Mon, 17 May 1999 22:34:10 -0700
+From: Thomas Robinson <roo@marsh.cts.com>
+
+This configuration removes a lot of the aliases, and automates a
+lot of the other functions based on whether the files /
+directories exist. Only three aliases per list are needed:
+
+<list>-approval
+<list>-owner
+owner-<list>
+
+# Lots of stuff snipped . . .
+
+trusted_users = mail:majordomo
+
+end
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+# More stuff snipped . . .
+
+# This transport is used for processing *-request addresses
+# through Majordomo
+majordomo:
+  driver = pipe
+  user = majordomo
+  command = "/usr/local/mail/majordomo/wrapper majordomo -l ${local_part}"
+  return_fail_output = true
+
+
+# This transport is used for processing messages through the
+# majordomo resend mechanism
+resend:
+  driver = pipe
+  user = majordomo
+  command = "/usr/local/mail/majordomo/wrapper resend -l ${local_part} ${local_part}"
+  return_fail_output = true
+
+
+# This transport handles creation of digests for majordomo.
+digestify:
+  driver = pipe
+  user = majordomo
+  command = "/usr/local/mail/majordomo/wrapper digest -r -C -l ${local_part}-digest ${local_part}-digest"
+  return_fail_output = true
+
+
+# This transport handles the archive function
+archivate:
+  driver = pipe
+  user = majordomo
+  command = "/usr/local/mail/majordomo/wrapper archive2.pl -f /usr/local/mail/lists/${local_part}.archive/${local_part} -M -a"
+  return_fail_output = true
+
+end
+
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Local addresses are those with a domain that matches some item
+# in the "local_domains" setting above, or those which are passed
+# back from the routers because of a "self=local" setting (not
+# used in this configuration).
+
+
+# This director handles list processing of *-request addresses.
+# Note that if there is no file, the message will NOT get passed
+# to majordomo.
+
+listrequest:
+  driver = smartuser
+  suffix = -request
+  require_files = +/usr/local/mail/lists/${local_part}.config
+  transport = majordomo
+
+
+# This director handles list processing when sending through the
+# majordomo RESEND mechanism.  If there is no file, the message
+# will NOT get passed to majordomo.
+
+listresend:
+  driver = smartuser
+  suffix = -digest
+  suffix_optional = true
+  require_files = +/usr/local/mail/lists/${local_part}${local_part_suffix}.config
+  transport = resend
+  except_senders = owner-${local_part}@marsh.cts.com:majordomo:owner-${local_part}-digest@marsh.cts.com
+
+
+# This director handles creation of the archive files for a list.
+
+archives:
+  driver = smartuser
+  suffix = -digest
+  suffix_optional = true
+  require_files = +/usr/local/mail/lists/${local_part}.archive:!+/usr/local/mail/lists/${local_part}-digest.config
+  transport = archivate
+  unseen = true
+
+
+# This director handles the list-digest processing.
+
+digests:
+  driver = smartuser
+  require_files = +/usr/local/mail/lists/${local_part}-digest.config
+  transport = digestify
+  unseen = true
+
+
+# This director handles list processing.
+
+listout:
+  driver = forwardfile
+  require_files = +/usr/local/mail/lists/${local_part}.config
+  file = /usr/local/mail/lists/${local_part}
+  modemask = 2
+  user = majordomo
+  no_check_local_user
+  forbid_pipe
+  forbid_file
+  one_time
+  skip_syntax_errors
+  errors_to = owner-${local_part}
+
+
+# This director handles aliasing using a traditional /etc/aliases
+# file.  If any of your aliases expand to pipes or files, you
+# will need to set up a user and a group for these deliveries to
+# run under. You can do this by uncommenting the "user" option
+# below (changing the user name as appropriate) and adding a
+# "group" option if necessary.
+
+system_aliases:
+  driver = aliasfile
+  file = /etc/aliases
+  search_type = lsearch
+  user = mail
+
+# The rest of the file goes here . . .
diff --git a/config.samples/C019 b/config.samples/C019
new file mode 100644 (file)
index 0000000..d4757f2
--- /dev/null
@@ -0,0 +1,72 @@
+From: John Horne <J.Horne@plymouth.ac.uk>
+Date: 20 May 1999
+
+The following configuration file entries can be used to provide a 'vacation'-
+style function for a mailhub which has no local users. (In our case the mail is
+sent from the mailhub to users on file servers.)
+
+The procedure is that the user's local part is added to a lookup file. A
+directory is then created for the user to store a log file and a list of
+sites which have received a reply already (this avoids a sender receiving
+numerous vacation messages).
+
+When a message for a vacation user is received a director lookups up the
+users local part address. If found then a transport is invoked which sends
+either a user supplied message or a default message back to the sender.
+The default message is held in '/usr/local/exim/messages/vacation'; it simply
+states that the user is away (word this to your own needs!).
+
+When the user returns to your site simply remove them from the lookup file,
+and delete the directory created for them. 
+
+Note: The following changes were provided by Richard Gilbert of the
+      University of Sheffield (R.Gilbert@sheffield.ac.uk) -
+  The file lookup could be a simple text file:
+     local_parts = lsearch;/usr/local/exim/vacation-users
+
+  The lookup file may not be necessary since the 'require_files' option
+  is present.
+
+  The condition statement could be further extended:
+    condition = "${if \
+      and{{or{{match{$header_to:}{(?i)${local_part}@shef(field)?\\.ac\\.uk}} \
+            {match{$header_cc:}{(?i)${local_part}@shef(field)?\\.ac\\.uk}}}} \
+                        {!eq{$sender_address}{}} \
+      {!match{$message_precedence}{(?i)bulk|junk|list}}}{yes}{no}}"
+
+  The following exceptions could be included:
+    except_senders = "^.*-request@:^owner-:^postmaster@:^.*daemon@:\
+                      ^.*server@:^root@:^${local_part}@shef(field)?\\.ac\\.uk"
+
+---------------------------------------------------------------------
+The director and transport entries to use are:
+
+Add to the transport section:
+
+vacation_user:
+  driver = autoreply;
+  subject = "${if def:h_Subject: {Re: $h_Subject:} {I am on vacation}}"
+  file = "${if exists {/usr/local/exim/vacation/$local_part/msg} \
+                 {/usr/local/exim/vacation/$local_part/msg} \
+                {/usr/local/exim/messages/vacation}}"
+  log = /usr/local/exim/vacation/${local_part}/log
+  once = /usr/local/exim/vacation/${local_part}/once
+  to = $reply_address
+  from = $local_part
+  user = exim
+
+
+Add to the top of the director section:
+
+vacation:
+  unseen
+  no_expn
+  no_verify
+  condition = "${if or {{match {$h_precedence:} {(?i)junk|bulk|list}} \
+                        {eq {$sender_address} {}}} {no} {yes}}"
+  local_parts = cdb;/usr/local/exim/tables/vacation-users.cdb
+  require_files = /usr/local/exim/tables/vacation/$local_part/
+  transport = vacation_user
+  driver = smartuser;
+  errors_to = postmaster@plymouth.ac.uk
diff --git a/config.samples/C020 b/config.samples/C020
new file mode 100644 (file)
index 0000000..6c033d0
--- /dev/null
@@ -0,0 +1,270 @@
+From: "Rick Williams" <rick@charlesworth.com>
+Date: Wed, 12 May 1999 09:16:02 +0100
+
+I was asked for a copy of the programs we were using to mail 
+everybody and as they are not too big I hope you don't mind me 
+posting them here. There are two programs emailrequest.pl and  
+post_all.pl, they both require Mail.pm which I understand is 
+generally available.
+
+These programs have been completely re-written from scratch by 
+one of our programmers and work <G>. The usual disclaimers 
+apply. 
+
+emailrequest.pl generates a list of all current users from the 
+password list sorted on company, surname and firstname, this is 
+very useful for us here because our staff constantly changes. The 
+other, post_all.pl takes a message and sends it on to all users in 
+the password list as a BCC, there are certain filters in the program 
+to miss out non-human users.
+
+You will need some settings in your aliases file to call these 
+programs (although rather obvious). The first setting is needed.
+
+### Alias File ###
+discard:       :blackhole:
+
+#email list request
+email:         "|/where/you/put/it/emailrequest.pl"
+
+#mail to everyone
+everyone:      "|/where/you/put/it/post_all.pl"
+
+#If you want to send a mass message to one part of your org only
+#and it is defined in the company setting in the password file
+#then use
+company:       "|/where/you/put/it/post_all.pl \"Company Section\""
+
+
+--Message-Boundary-12668
+Content-description: Text from file 'emailrequest.pl'
+
+#!/usr/bin/perl
+#
+#
+#  Internal EMail List Generator
+#
+#  Version 2.0
+#
+#  William F. McCaw  1999
+#
+#
+#  Returns an email containing a sorted list of all valid users on the
+#  system, grouped according to company.
+#
+#  For this program to work properly, the following conditions must be met
+#  for all valid email recipients...
+#
+#  * Their UID must be between 1000 and 60000 (inclusive).
+#  * Their Name must be defined.
+#  * Their Name must not start with a lower case 'x'.
+#  * Their Name must not be 'nobody'.
+#  * Their must be of the following format...
+#
+#       "Forename Surname, Company"
+#
+#    Note... The ", Company" must be present.
+#            Forename is assumed to be the first word.
+#            Surname is assumed to be everything else.
+#
+
+
+#
+# Read the message from standard input
+#
+$MsgSender = '';
+# Extract the required details from the message's header
+while ( defined($Line = <STDIN>) && ($Line =~ /^[^\r\n]/) )
+   {
+   $Line =~ s/[\r\n]//gs;
+   if ( $Line =~ /^Return-Path:\s*<([^>]+)>/i )     # First choice for sender
+      { $MsgSender = $1; }
+   if ( $Line =~ /^From:\s*(.*)/i && !$MsgSender )  # May be no return path
+      { $MsgSender = $1; }
+   }
+# Ensure we have a sender's address
+exit(0) if ( !$MsgSender );
+
+#
+# Read the contents of the system's password file
+#
+open(PASS, '/etc/passwd') || exit(0);
+@Users = <PASS>;
+close(PASS);
+
+#
+# Extract the details of all valid users from the password file and batch
+# them according to the company name associated with them.
+#
+%Companies = ();
+foreach $User ( @Users )
+   {
+# Separate the current user's details and determine whether to include them
+# within the generated email list
+   ( $EMail, $Password, $UID, $GID, $Name, $Home, $Shell ) = split(/:/, $User);
+   next if ( !defined($UID) || ($UID < 1000) || ($UID > 60000) ||
+             !defined($Name) || ($Name =~ /^x/) || ($Name eq 'nobody') );
+# Ensure the name field contains a company name
+   next if ( !($Name =~ /^(.*?)\s*\,\s*(.*?)$/) );
+   $Name = $1;
+   $Company = $2;
+# Get the reference to the members array for this company, creating the
+# company entry as and when required
+   if ( exists($Companies{uc($Company)}) )
+      { $Members = $Companies{uc($Company)}->[1]; }
+   else
+      {
+      $Members = [];
+      $Companies{uc($Company)} = [ $Company, $Members ];
+      }
+# Massage the user's name into the required "Surname, Forename" format
+   if ( $Name =~ /^\s*([^\s]+)\s+(.+)$/ )
+      { $Name = "$2, $1"; }
+# Append the user to the list for the current company
+   push(@$Members, [ $Name, $EMail ]);
+   }
+
+#
+# Generate the email back to the original sender containing the full list
+#
+open(MAIL, "|/usr/bin/exim -t");
+#
+# Output the message headers and leading message body text
+print(MAIL "From: $MsgSender\n",
+           "To: $MsgSender\n",
+           "Subject: Requested EMail List\n\n",
+           "Internal EMail addresses as of: ", scalar(localtime()), "\n");
+#
+# Output the sorted list of companies, and within that, output the sorted
+# list of individuals within that company
+foreach $Company ( sort(keys(%Companies)) )
+   {
+   $Company = $Companies{$Company};
+   print(MAIL "\n", 
+              $Company->[0], "\n",
+              ('~' x (length($Company->[0]) + 1)), "\n");
+   foreach $Member ( sort({ uc($a->[0]) cmp uc($b->[0]) } @{$Company->[1]}) )
+      { printf(MAIL "   %-34s   %s\n", $Member->[0], $Member->[1]); }
+   }
+#
+# Output the trailing message footer
+print(MAIL "\n",
+           "Remember to received an updated email list, just send a blank message to\n",
+           "email\@charlesworth.com and you should get a reply within 30 seconds.\n\n",
+           "For more information or any queries contact sysadmin\@charlesworth.com\n\n");
+close(MAIL);
+
+
+#
+#  End of File
+#
+
+--Message-Boundary-12668
+Content-description: Text from file 'post_all.pl'
+
+#!/usr/bin/perl
+#
+#
+#  "Everyone" EMail Exploder
+#
+#  Version 2.0
+#
+#  William F. McCaw  1999
+#
+#
+#  Sends body of message supplied on STDIN to all valid users listed within
+#  the computer's /etc/passwd file.
+#
+#  * Original headers, apart from the sender and subject are discarded.
+#  * Recipients are batched with up to 60 per email.
+#  * Recipients are specified via 'Bcc:'.
+#
+
+#
+# Function Prototypes
+#
+sub SendMessage();
+
+
+#
+# Determine the target company for sending out the email to
+#
+$TargetCompany = (( defined($ARGV[0]) ) ? $ARGV[0] : '');
+
+#
+# Read the message from standard input
+#
+$MsgSender = '';
+$MsgSubject = '';
+# Extract the required details from the message's header
+while ( defined($Line = <STDIN>) && ($Line =~ /^[^\r\n]/) )
+   {
+   $Line =~ s/[\r\n]//gs;
+   if ( $Line =~ /^Return-Path:\s*<([^>]+)>/i )     # First choice for sender
+      { $MsgSender = $1; }
+   if ( $Line =~ /^From:\s*(.*)/i && !$MsgSender )  # May be no return path
+      { $MsgSender = $1; }
+   elsif ( $Line =~ /^Subject:\s*(.+)/i )           # Preserve the subject
+      { $MsgSubject = $1; }
+   }
+# If we are missing certain information then provide some defaults
+$MsgSubject = '*** Unknown Subject ***' if ( !$MsgSubject );
+# Read in the message body and signature
+@MsgBody = <STDIN>;
+
+#
+# Read the contents of the system's password file
+#
+open(PASS, '/etc/passwd') || exit(0);
+@Users = <PASS>;
+close(PASS);
+
+#
+# Send the message to all the users within the password file
+#
+@MsgRecipients = ();
+foreach $User ( @Users )
+   {
+# Split the current users's details and determine whether to send the
+# message to them or not
+   ( $EMail, $Password, $UID, $GID, $Name, $Home, $Shell ) = split(/:/, $User);
+   next if ( !defined($UID) || ($UID < 1000) || ($UID > 60000) ||
+             !defined($Name) || ($Name =~ /^x/) || ($Name eq 'nobody') );
+   next if ( $TargetCompany && !($Name =~ /\,\s*$TargetCompany/io) );
+# If we have already reached the recipient limit for this message then
+# dispatch it and reset the recipient list ready for the next message
+   if ( scalar(@MsgRecipients) == 60 )
+      {
+      SendMessage();
+      @MsgRecipients = ();
+      }
+# Append the current email address to the recipient list
+   push(@MsgRecipients, $EMail);
+   }
+#
+# Ensure the folk at the end of the user list receive the message
+if ( scalar(@MsgRecipients) )
+   { SendMessage(); }
+
+
+
+#
+#
+#  Routine to send the specified message
+#
+sub SendMessage()
+   {
+   open(MAIL, "|/usr/bin/exim -t");
+   print(MAIL "From: $MsgSender\n") if ( $MsgSender );
+   print(MAIL "To: Everyone <discard>\n",
+              "Subject: TO EVERYONE: $MsgSubject\n",
+              "Bcc: ", join(", ", @MsgRecipients), "\n\n",
+              @MsgBody,
+              "\n");
+   close(MAIL);
+   }
+
+
+#
+#  End of File
+#
diff --git a/config.samples/C021 b/config.samples/C021
new file mode 100644 (file)
index 0000000..dd3d24c
--- /dev/null
@@ -0,0 +1,303 @@
+Date: Thu, 13 May 1999 12:17:03 -0500
+From: mark david mcCreary <mdm@internet-tools.com>
+
+Here is some sample code that might be useful for handling
+X-Failed-Recipients headers generated by Exim, with mailing lists.
+
+It will generate one bounce message for each bad address.  The message
+will be sent back to the mailing list that generated it.
+
+It consists of some procmail routines to decipher which list generated
+the error, with a Perl program to parse and generate the email message
+for each email address in the X-Failed-Recipients: header.
+
+You need Procmail 3.13 or better
+
+You need Perl 5.004 plus the Internet::Mail Perl Module.
+Or you can call your MTA directly from Perl, if you do not have
+Internet::Mail Perl Module.
+
+
+Step 1) Procmail recipe that gets called with bounces that Exim generates.
+
+#   The mail-list.com front-end for Smartlist Mailing Lists
+#
+#      Copyright (c) 1999 Internet Tools, Inc.
+#
+#      This program is free software; you can redistribute it and/or modify
+#      it under the terms of the GNU General Public License as published by
+#      the Free Software Foundation; either version 2 of the License, or
+#      (at your option) any later version.
+#
+#
+#   X-Failed Routine
+#
+#   This code may be useful for deciphering error messages
+#   for mailing lists.
+#
+#      This routine will receive error messages generated by Exim
+#   Those messages will have a special header, called
+#
+#         X-Failed-Recipients:
+#
+#   Up to 50 email addresses can be listed on each header.
+#   There can be multiple X-Failed-Recipients: headers.
+#
+#   This procmail procedure will determine the list name
+#
+#   For example, if mailing list message was sent from
+#
+#       elvis-admin@domain.com
+#
+#   Then elvis would be the name of the list.
+#
+#   Once the list name is determined based on the contents of the message,
+#   a perl program is called to parse the email addresess.
+#
+#   In addition, a bounce error message is sent back to the mailing list,
+#   so it can be removed from the list.
+#
+#
+#
+
+PATH=.:/home/ftp/.bin:/bin:/usr/bin:/usr/local/bin:/usr/sbin:$PATH
+SHELL=/bin/sh
+
+#VERBOSE=yes
+#LOGABSTRACT=all
+VERBOSE=no
+LOGABSTRACT=all
+LOGFILE=$HOME/procmailog
+COMSAT=no
+test=test              # /usr/bin/test
+mkdir=mkdir     # /bin/mkdir
+
+DOMAIN=domain.com              # the common domain for all the lists
+SUBDOMAIN=`hostname`           # the fully qualified hostname
+
+SUFFIX=-admin
+
+#  detect mail loop
+#  save in folder for debugging purposes
+#  terminate
+
+#  strip Reply-to and Sender addresses, as many people screw these up
+#  Then the formail -rtzx will try to grab that address
+
+:0 fh
+| formail -I "Reply-To:" -I "Sender:"
+
+# log requestor email To: From: address
+
+SENDER  = `formail -rtzx To:`
+SUBJECT = `formail -zxSubject:`
+FROM = `formail -zxFrom:`
+TODAY   = `date "+%Y-%m-%d %T"`
+
+#  Figure out the listname being subscribed to
+#  Considered to be the base part, followed by -admin@domain-name.com
+#
+#
+#  If address does not end in -on, or otherwise cannot be determined, send to
+#  dummy-request for handling
+#
+
+BASELIST=dummy
+
+#  locate addresses within <> symbols first
+
+:0
+* ^Envelope-to:.*[<]\/[^ ,@]+
+{
+    STRING = $MATCH
+    TERM = $SUFFIX
+    INCLUDERC = /home/ftp/.etc/rc.rm_term
+    BASELIST = $STRING
+}
+
+# otherwise, if no match above, just look for @ symbol to grab email address
+
+:0 E
+* ^Envelope-to: \/[^ ,@]+
+{
+    STRING = $MATCH
+    TERM = $SUFFIX
+    INCLUDERC = /home/ftp/.etc/rc.rm_term
+    BASELIST = $STRING
+}
+
+#  Exim generates bounce back messages with X-Failed-Recipients Headers
+#  If this email message is one of those, then process by a special
+#  perl program, which will generate a bounce message for each failed
+#  email address.
+
+
+:0 h
+* ^From:.*Mailer-Daemon@.*.domain.com
+* ^X-Failed-Recipients:
+| xfailed.pl $BASELIST-admin@[127.0.0.1]
+
+
+
+
+Step 2)  Procmail Sub routine to recurvisely parse email address
+         by Philip Guenther.
+
+         Place in /home/ftp or tweak script for where you place it.
+
+#
+#   Copyright (c) 1997 Philip Guenther
+#
+#
+#  3/05/97             Philip Guenther
+#
+# Remove a terminating string $TERM from $STRING, returning it in
+# STRING.  $TERM *must* start with a '-', as that's what this
+# routine splits up STRING on.  "found" is a temporary variable that
+# must be empty on entry.  The script will clear it on exit, so things
+# should be fine as long as you don't use it yourself.
+
+# Append the next 'word' in STRING to $found
+
+#  10/15/97  mdm   make result lower case for file name matchups
+#
+
+
+:0
+* STRING ?? $ ^^$\found\/${found+-}[^-]*
+{ found = "$found$MATCH" }
+:0 E
+{
+    # This cannot happen unless found was set on entry!
+    LOG = "*** WARNING ***
+variable 'found' was set to $found on entry to $_
+one of the uses must be renamed for rm_term.rc to work!
+"
+    # Help me, help me!
+    :0:
+    $DEFAULT
+}
+
+# Are we done?
+:0
+* ! STRING ?? $ ^^$\found$TERM^^
+{
+    # Nope
+    INCLUDERC = $_
+}
+:0 E
+{
+    # Return the match, and clear our temporary.
+    STRING = `echo $found | tr 'A-Z' 'a-z'`
+    found
+}
+
+
+
+
+Step 3) Sample Perl Code to parse X-Failed-Recipients: headers, and
+        send email message containing bounce error code.
+
+#!/usr/bin/perl -w
+#
+#   The mail-list.com front-end for Smartlist Mailing Lists
+#
+#    Copyright (c) 1999 Internet Tools, Inc.
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#
+#  When Exim is unable to deliver a message, it generates a bounceback
+#  with X-Failed_Recipients header(s).
+#
+#  Each bad address is listed in these header(s).
+#
+#  This program will generate bounce messages, and send them to the
+#  appropriate list-admin address.
+#
+#  This program is invoked by a Procmail recipe, with the list-request
+#  address in the first and only argument.
+#
+#  This program uses the Perl Module  Mail::Internet to send each message.
+#
+#
+#
+
+($list_address) = @ARGV;
+
+use Mail::Internet;
+
+chop(my $Date = `date "+%Y-%m-%d %T"`);
+
+my $bounce_body = '     550 ';  #  550 is SMTP error code for user unknown
+open(LOG,">>/tmp/xfailed.log") || die(" Could not open xfailed.log $!");
+
+$ENV{'SMTPHOSTS'} = 'localhost';
+
+my $mesg = new Mail::Internet \*STDIN;
+
+# look at mail headers, and grab the data
+
+my $from = $mesg->head->get('From'); chop($from);
+
+# can be more than 1 X-Failed_Recipients header, so put into array
+
+my @xfail = $mesg->head->get('X-Failed-Recipients');
+
+$xfail = "@xfail";        # stick array of headers into scalar
+chop($xfail);             # remove final newline
+
+# turn any newlines from middle of multiple X-Failed-Recipients into commas
+
+$xfail =~ s/\n/,/g;
+
+my @tokens = split(/,\s/, $xfail);        # put email address, minus commas into array
+
+my $email_addr;
+foreach $email_addr (@tokens) {
+
+    unless ($email_addr =~ m/\@/) {
+        next;
+    }
+
+    unless ($list_address =~ m/\@/) {
+        next;
+    }
+
+    # make the body of the message a simple bounce message that smartlist can handle
+
+    my $message_body = $bounce_body . "<" . $email_addr . ">" . "\n";
+
+    my $new_mesg = new Mail::Internet(
+        [ ],
+        'Body' => [$message_body]
+        );
+
+    # this is who the mail is directed to via SMTP;
+
+    $ENV{MAILADDRESS} = $from;
+
+    # these are the addresses placed in the header block of the message.
+
+    $new_mesg->head()->add('From', $from);
+    $new_mesg->head()->add('To', $list_address);
+    $new_mesg->head()->add('Subject', 'bounce from xfailed');
+
+#    $new_mesg->print_header(\*LOG);
+#    $new_mesg->print_body(\*LOG);
+
+    print LOG  "$Date\t$list_address\t$email_addr\n";
+
+    my @recips =  $new_mesg->smtpsend;
+
+    unless (@recips > 0) {
+               print LOG "Failed to deliver ($from,$list_address,$email_addr) \n";
+        next;
+    }
+
+}
+
+exit;
diff --git a/config.samples/C022 b/config.samples/C022
new file mode 100644 (file)
index 0000000..18f6064
--- /dev/null
@@ -0,0 +1,12 @@
+Date: Tue, 14 Sep 1999 00:58:56 +0200
+From: Vadim Vygonets <vadik@cs.huji.ac.il>
+
+This is the Exim configuration file of a machine which delivers mail to several
+local domains, where the mail is delivered locally, several hairy domains,
+handled as described below, and a half-virtual domain, which is first processed
+by its special alias file, then processed as other local domains (including the
+processing by the global alias file).
+
+This contribution consists of a number of files that are in the tar archive 
+C022.tar, which unpacks into a directory called "hairy". See the README file 
+therein for an explanation of the configuration.
diff --git a/config.samples/C022.tar b/config.samples/C022.tar
new file mode 100644 (file)
index 0000000..534c97e
Binary files /dev/null and b/config.samples/C022.tar differ
diff --git a/config.samples/C023 b/config.samples/C023
new file mode 100644 (file)
index 0000000..9c9aa44
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+#
+# Delivery notification for Exim
+# Vladimir Litovka <doka@kiev.sovam.com>, 1999/10/18
+#
+# Use it in such way:
+# 1. Add such entry in transports section:
+#
+# rrc:
+#  driver = pipe;
+#  command = "/usr/local/sbin/rrc.pl \
+#     ${original_local_part}@${original_domain}"
+#  path = "/usr/sbin"
+#  user = mail
+#  prefix =
+#  suffix =
+#
+# 2. Add shadow_transport in local delivery entry (or entries)
+#
+# local_delivery:
+#  ...
+#  shadow_transport = rrc
+#
+# 3. Enjoy :-)
+
+$who = $ARGV[0];
+die "Must be executed from Exim\n" unless ($who);
+
+while (<STDIN>) {
+  chomp $_;
+  last if ($_ eq '');          # Empty row - the end of headers
+  if ( /^\s+/ ) {
+    if ($header) {
+      $headers{$header} .= " " . $_ ; }
+    else {
+      next; }
+   }
+  else {
+    ($header, $content) = split (/: +/, $_, 2);
+    $headers{lc($header)} = $content;
+   }
+ }
+
+if ( !($to = $headers{'disposition-notification-to'}) ) {
+  $to = $headers{'return-receipt-to'};
+ }
+
+if ($too = $to) {      # If there are delivery notification request(s)
+
+  # Strip GECOS from RRC header
+  if ($too !~ s/^.*?<([-=+\.\w\@]+)>.*$/$1/g) {
+    $too =~ s/^([-=+\.\w\@]+)\s+\(.*?\).*$/$1/g;
+   }
+
+  # Check is RRC header valid
+  if ($too !~ /^[-=+\w\.]+\@(\w[-\w]*\.)+[a-z]{2,4}$/io) {
+    $mailto = $headers{'from'};
+    $x_to = "X-Invalid-DSN-To: $to";
+   }
+  else {
+    $mailto = $to; }
+
+  open MAIL, "| sendmail -t";
+  print MAIL <<_EOM_;
+To: $mailto
+Subject: Delivery notification
+$x_to\n
+Your message
+
+  From: $headers{'from'}
+  To: $who
+  Subject: $headers{'subject'}
+  Date: $headers{'date'}
+  Message-ID: $headers{'message-id'}
+
+was successfully delivered. I hope that recipient of your message will
+read it and answer you as soon as possible.
+
+-- 
+Yours sincerely,
+       Mailer-Daemon of Sovam Teleport Ukraine.
+_EOM_
+
+  close MAIL;
+ }
+exit 0;
diff --git a/config.samples/C024 b/config.samples/C024
new file mode 100644 (file)
index 0000000..1902e2d
--- /dev/null
@@ -0,0 +1,24 @@
+From: Patrick Boutilier <boutilpj@ednet.ns.ca> 
+Date: Thu, 23 Sep 1999 17:35:28 +0000
+
+In case anybody wants to use a MySql database to store aliases this is
+how I managed to get my site working.
+
+1.  I added this line to the main section of
+/usr/local/exim/conf/configure (where <password> is the mysql password
+for the exim user)
+
+mysql_servers = localhost/school/exim/<password>
+
+
+2. I then added these lines to the Directors section after the
+system_aliases director.
+
+mysql_system_aliases:
+  driver = aliasfile
+  file_transport = address_file
+  pipe_transport = address_pipe
+  search_type = mysql
+  query = "select userid from user where aliasid='$local_part'"
+  user = exim
+
diff --git a/config.samples/C025 b/config.samples/C025
new file mode 100644 (file)
index 0000000..aa7964f
--- /dev/null
@@ -0,0 +1,39 @@
+Date: Mon, 04 Oct 1999 11:55:46 -0300
+From: Patrick Boutilier <boutilpj@ednet.ns.ca>
+
+As promised here is the way I got Exim to delver to Cyrus mailboxes if
+the user exists in the MySql database.
+
+
+# This transport is for Cyrus
+
+local_delivery_cyrus:
+  driver = pipe
+  command = "/usr/cyrus/bin/deliver -m ${substr_1:${local_part_suffix}}
+-- ${local_part}"
+  user = cyrus
+  group = mail
+  return_output
+  log_output
+  prefix =
+  suffix =
+
+
+# This director checks if the alias is valid
+
+mysql_system_aliases:
+  driver = aliasfile
+  search_type = mysql
+  query = "select userid from user where aliasid='$local_part'"
+
+
+
+# This director matches local Cyrus mailboxes
+
+local_user_cyrus:
+  driver = aliasfile
+  search_type = mysql
+  query = "select userid from user where userid='$local_part'"
+  transport = local_delivery_cyrus
+
+
diff --git a/config.samples/C026 b/config.samples/C026
new file mode 100644 (file)
index 0000000..1271c8e
--- /dev/null
@@ -0,0 +1,104 @@
+Date: Tue, 12 Oct 1999 13:07:25 -0500
+From: mark david mcCreary <mdm@internet-tools.com>
+
+Most modern email readers will now show any URL's in the body of an
+email message as a clickable link.  AOL also does this, but needs the
+URL to be in the HTML syntax.
+
+The following configuration and program will allow messages going to
+AOL only, to be filtered thru a Perl script.  This Perl script will
+convert any URL's to the HTML syntax.
+
+In addition, the transport will use VERP to send a unique envelope
+sender with each message.
+
+It is useful for mailing lists.
+
+
+
+######################################################################
+#                      TRANPORTS CONFIGURATION                       #
+######################################################################
+
+# This transport is used for delivering messages AOL messages one at a time
+# It will put their email address in the To: line
+# It will create a custom sender envelope address that will allow bounces
+# to be easier to track.
+#
+
+aol_smtp:
+  headers_remove =
+"To:Message-Id:Resent-To:Resent-Date:Resent-From:Resent-Message-Id:Resent-Bcc",
+add_headers = "To: $local_part@$domain\n\
+  Message-Id:
+<Epah${length_3:$local_part}${substr_17_2:$tod_log}${substr_14_2:$tod_log}${subs
+tr_11_2:$tod_log}${length_3:$domain}\
+  @$primary_hostname>",
+  transport_filter = "/usr/local/bin/aol_transport_filter.pl",
+  return_path = "${if match {$return_path}{^(.+?)-request@.*\\$}\
+        {bounce-$1=$local_part=$domain@$primary_hostname}fail}",
+  driver = smtp;
+  max_rcpt = 1
+
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+######################################################################
+
+filter_msg_aol_domains:
+   self = defer,
+   driver = lookuphost,
+   transport = aol_smtp,
+   domains = "aol.com"
+
+
+
+
+
+
+
+
+######################################################################
+#          /usr/local/bin/aol_transport_filter.pl
+######################################################################
+
+#!/usr/bin/perl -w
+#
+#  This program will tweak the body of all email messages going to
+#  America On Line (AOL).
+#
+#  It will change a plain text URL clause to an HTML version
+#  since that is how the AOL email reader works.
+#
+#  For example,
+#
+#  http://commerce.internet-tools.com becomes
+#
+#  <A
+HREF="http://commerce.internet-tools.com">http://commerce.internet-tools.com</A>
+#
+#  or also with the https, mailto, and ftp prefix
+#
+#
+
+
+$/ = "";                    # set paragraph mode
+chomp($headers = <STDIN>);  # read a paragraph, remove trailing newlines
+$/ = "\n";                  # unset paragraph mode
+
+printf(STDOUT "%s\n\n", $headers);
+
+while (<STDIN>)
+  {
+
+s%\b((mailto:|((http(s?)|ftp)://)).*?)(?=(\s|:\s|\.\s|;\s|,\s|\?\s|!\s))%<A
+HREF="$1">$1</A>%ig;
+  print(STDOUT $_);
+  }
+
+exit;
+
+
+
+
diff --git a/config.samples/C027 b/config.samples/C027
new file mode 100644 (file)
index 0000000..7c4ad7c
--- /dev/null
@@ -0,0 +1,91 @@
+From: "Paul Makepeace" <Paul.Makepeace@realprogrammers.com>
+Date: Sat, 16 Oct 1999 02:03:04 -0500
+
+Quickstart: do everything following the # signs as root
+
+This is an FYI to demonstrate how to have exim work with SSL using the
+stunnel wrapper and its underlying OpenSSL libraries and toolkit. It's
+intended as a recipe; there are plenty of explanations about the underlying
+technology (start at http://mike.daewoo.com.pl/computer/stunnel/ ) but little
+up-to-date cookbook info (that I could find) and the manpages left me
+guessing.
+
+My goal was not to compile anything. This unfortunately required me moving to
+Debian 2.2, the unstable branch that contained these new packages. This note
+is thus Debian-oriented but not -specific.
+
+Stunnel requires a X.509 certificate to operate and comes with one by default
+in the Debian stunnel package. For my purposes though it was useless since
+Outlook Express (and I'm sure many others) check the Common Name matched the
+hostname it's connecting too.
+
+The certificate generation can be done in this four step process in lieu of
+obtaining a signed one from Thawte or Verisign (not sure why one would do
+that in this instance):
+
+Generate RSA key:
+
+## mkdir -p /etc/ssl/certs
+# cd /etc/ssl/certs
+# cat > README < this-email; # :-)
+
+# openssl genrsa 1024 > exim.rsa
+
+Generate Diffie-Hellman parameters:
+
+# openssl gendh -rand /dev/urandom > exim.dh
+
+Generate certificate using the RSA key without a passphrase (explained in
+docs):
+
+# openssl req -new -x509 -nodes -key exim.rsa -out exim.x509
+
+The important point here is to enter the hostname into the Common Name field
+as it's entered into the mail client. Without this the mail client may
+question you for every connection about this mismatch. The data to this and
+other questions can be set up in /usr/local/openssl/openssl.cnf . The fields
+can be given defaults by adding _default to the attribute name (examples
+already in there).
+
+At this point create the stunnel-ready file by stringing those three
+together:
+
+# cat exim.rsa exim.pem exim.x509 exim.dh > exim.pem
+
+Run exim in daemon mode under stunnel on the ssmtp port (and imapd to
+complete the story):
+
+(suitably hack /etc/init.d/* as follows:)
+
+# cp exim.pem imapd.pem
+# chmod 600 exim.pem imapd.pem
+# chown mail exim.pem
+# stunnel -d 465 -l /usr/sbin/exim -p exim.pem -- exim -bs
+# stunnel -d 993 -l /usr/sbin/imapd -p imapd.pem -- imapd
+
+The name given after the -- on the command line is the name the service is
+run as so using say exim-ssl would, since stunnel can use libwrap (of TCP
+Wrappers fame), allow a separately configured access policy in
+/etc/hosts.(allow|deny)
+
+To run exim in inetd mode (not recommended apparently because of the
+connection cost) requires a adding 127.0.0.1 to the host_accept_relay
+directive in /etc/exim.conf since stunnel invokes it through the loopback
+interface. I suspect this actually would defeat the point of this directive
+in practice if spammers ever figured out how to connect to an SSL MTA thus
+configured...
+
+The magic line in /etc/inetd.conf is (as a single line):
+
+ssmtp stream tcp nowait mail /usr/sbin/stunnel exim -l /usr/sbin/exim -p
+/etc/ssl/certs/exim.pem -- exim -bs
+
+...with in /etc/services:
+
+ssmtp           465/tcp                         # SMTP over SSL
+
+
+Corrections & improvements appreciated!
+
+Enjoy,
+Paul
diff --git a/config.samples/C028 b/config.samples/C028
new file mode 100644 (file)
index 0000000..c2b92c1
--- /dev/null
@@ -0,0 +1,102 @@
+Date: Fri, 5 Nov 1999 02:30:38 +0200 (SAST)
+From: Paul Sheer <psheer@icon.co.za>
+
+there is an FAQ question on this, but no examples.
+
+works with python 1.5.1
+
+enjoy
+
+-paul
+
+
+#!/usr/bin/python
+
+# Usage:
+#      exim-filter-mime.py <mime-type> ...
+#
+# Example:
+#      exim-filter-mime.py audio image/jpg video
+#
+# This script reads from stdin and writes to stdout.
+# It strips all the mime attachments from a mail message
+# that are one of the mime types listed on the command line
+#
+# Exim can use it in its configuration file, for example, as follows:
+#
+#      remote_smtp:
+#        driver = smtp
+#        .
+#        .
+#        .
+#        transport_filter = /etc/exim-filter-mime.py audio video image
+#
+
+# The attachment is replaced with the following:
+def cheeky_response (part):
+    print "[File `%s' of type `%s' is meant to go here]" % (part.getheader('Content-Description'), part.gettype ())
+    print
+    print "This host is restricted from transmitting %s files and" % (part.getmaintype (),)
+    print "hence this attachment was stripped from the mail message."
+    print
+
+import sys
+import mimetools
+
+message = mimetools.Message (sys.stdin, 0)
+
+# Print out the header:
+for l in message.headers:
+    sys.stdout.write (l)
+print
+
+# Not a multipart message, so just dump the whole thing:
+if message.getmaintype () != "multipart":
+    l = " "
+    while l:
+       l = message.fp.readline ()
+       sys.stdout.write (l)
+    sys.exit (0)
+
+# Mime boundaries:
+boundary = "--" + message.getparam ("boundary") + "\n"
+lastboundary = "--" + message.getparam ("boundary") + "--\n"
+
+l = " "
+while l and l != boundary and l != lastboundary:
+    l = message.fp.readline ()
+    sys.stdout.write (l)
+
+while l and l != lastboundary:
+    part = mimetools.Message (message.fp, 0)
+    if part.getmaintype () in sys.argv[1:] or part.gettype () in sys.argv[1:]:
+# If it is of a type on the command-line, do not write the header or body,
+# just skip over till the next boundary...
+       l = " "
+       while l and l != boundary and l != lastboundary:
+           l = part.fp.readline ()
+# ... and then give a cheeky replacement:
+       print "Content-Type: TEXT/plain; charset=us-ascii"
+       print
+       cheeky_response (part)
+# write the boundary:
+       sys.stdout.write (l)
+    else:
+# if it is anything else (like text/plain, application/octet-stream etc.
+# then write the header...
+       p = ""
+       for p in part.headers:
+           sys.stdout.write (p)
+       print
+# ... and then write the body
+       l = " "
+       while l and l != boundary and l != lastboundary:
+           l = part.fp.readline ()
+           sys.stdout.write (l)
+
+l = " "
+while l:
+    l = message.fp.readline ()
+    sys.stdout.write (l)
+
+
diff --git a/config.samples/C029 b/config.samples/C029
new file mode 100644 (file)
index 0000000..e77e752
--- /dev/null
@@ -0,0 +1,78 @@
+Date: Thu, 11 Nov 1999 16:20:13 -0500 (EST)
+From: "Dave C." <davec@pathwaynet.com>
+
+1. The standard way to connect one's MTA to mailman (and for Majordomo
+as well) seems to be to add a set of aliases for *every* list one
+creates. Once upon a time, I crufted a set of configs from Smail to
+work with majordomo, to automaticaly recognize the standard patterns,
+for all lists in existance. I have long since switched to Exim, and
+have recently installed Mailman to test on my personal workstation in
+preparation for installing it on our main system. To get to the point,
+I have setup a set of transports and directors for Exim, which will do
+the same thing.
+
+
+##########################################################
+
+#
+# Transports:
+#
+
+mailman_post:
+ driver=pipe
+ command = "/home/mailman/mail/wrapper post ${local_part}"
+ user = exim
+ group = mail
+
+mailman_owner:
+ driver=pipe
+ command = "/home/mailman/mail/wrapper mailowner ${local_part}"
+ user = exim
+ group = mail
+
+mailman_request:
+ driver=pipe
+ command = "/home/mailman/mail/wrapper mailcmd ${local_part}"
+ user = exim
+ group = mail
+
+##########################################################
+
+#
+# Directors:
+#
+
+mailman_post:
+ domains=lists.whateverdomains.com
+ driver=smartuser
+ condition=${if exists{/home/mailman/lists/${local_part}} {yes}{no}}
+ transport=mailman_post
+
+mailman_request:
+ domains=lists.whateverdomains.com
+ driver=smartuser
+ suffix=-request
+ condition=${if exists{/home/mailman/lists/${local_part}} {yes}{no}}
+ transport=mailman_request
+
+mailman_owner1:
+ domains=lists.whateverdomains.com
+ driver=smartuser
+ prefix=owner-
+ condition=${if exists{/home/mailman/lists/${local_part}} {yes}{no}}
+ transport=mailman_owner
+
+mailman_owner2:
+ domains=lists.whateverdomains.com
+ driver=smartuser
+ suffix=-owner
+ condition=${if exists{/home/mailman/lists/${local_part}} {yes}{no}}
+ transport=mailman_owner
+
+mailman_owner3:
+ domains=lists.whateverdomains.com
+ driver=smartuser
+ suffix=-admin
+ condition=${if exists{/home/mailman/lists/${local_part}} {yes}{no}}
+ transport=mailman_owner
+
diff --git a/config.samples/C030 b/config.samples/C030
new file mode 100644 (file)
index 0000000..5fb2faf
--- /dev/null
@@ -0,0 +1,55 @@
+From: Marc.Haber-lists@gmx.de (Marc Haber)
+Date: Fri, 12 Nov 1999 10:52:21 GMT
+
+I am currently configuring an exim for a site that will to mail
+hosting for several domains. I want the domain holders to have control
+over "their" alias files, being able to create their own aliases.
+However, I don't want them to have postmaster, abuse and other role
+accounts under their control.
+
+Here are my directors:
+
+local_roleaccount_aliases:
+  driver = aliasfile
+  include_domain = yes
+  file = /etc/roleaccount_aliases
+  search_type = lsearch
+
+global_roleaccount_aliases:
+  driver = aliasfile
+  include_domain = no
+  file = /etc/roleaccount_aliases
+  search_type = lsearch
+
+domain_aliases:
+  driver = aliasfile
+  requrie_files = /etc/domain_aliases/$domain
+  file = /etc/domain_aliases/$domain
+  search_type = lsearch
+
+That way, I can have /etc/roleaccount_aliases say
+
+abuse@some_hosted_domain: them@their_address.example.com
+abuse: me@my_address.example.com
+
+If an address is mentioned in /etc/roleaccount_aliases, specifications
+done in a domain alias file are ignored, e-mail to role accounts that
+are not explicitly stated with domain in /etc/roleaccount_aliases goes
+to me, and I can have role accounts for domains that I trust aliased
+to their own administration.
+
+Please note, however, that I use /etc/roleaccount_aliases as aliasfile
+in two directors. One of them has include_domain = yes and the other
+has include_domain = no. I believe this is the only way to have fully
+qualified addresses _and_ unqualified "catch-all-domains" addresses in
+a single alias file (having abuse@* with include_domain=yes doesn't
+catch any addresses).
+
+I don't know how exotic this setup is, but I believe it does what I
+want. If other users need something like that, too, I think it would
+be good to have a new option to the aliasfile director that makes that
+director catch qualified and unqualified addresses.
+
+If the FAQ maintainer finds it useful, I agree to have the setup
+mentioned above put into the FAQ as a recipe.
+
diff --git a/config.samples/C031 b/config.samples/C031
new file mode 100644 (file)
index 0000000..dcdb27d
--- /dev/null
@@ -0,0 +1,84 @@
+Date: Tue, 23 Nov 1999 02:49:32 +0200
+From: Vadim Vygonets <vadik@cs.huji.ac.il>
+
+Something Hans Matzen and I did.
+
+# These are config file snippets for handling certain remote
+# addresses as local, and making only real external addresses
+# visible to users.
+
+
+# Copyright (c) 1999
+#      Hans Matzen <hans@tm.informatik.uni-frankfurt.de>,
+#      Vadim Vygonets <vadik@vygo.net>.  All rights reserved.
+
+#################################################################
+# These are config file snippets for handling certain remote
+# addresses as local, and making only real external addresses
+# visible to users.
+#
+# First, adjust values of the following definitions, which will
+# be used in configuration snippets below:
+
+EXIM_DIR       = /var/exim
+LOCAL_DOM      = home.dom
+LOCAL_NET      = 192.168.0.0/16
+SMART_HOST     = cc.huji.ac.il
+
+
+# The scheme is to use global addresses everywhere, which is done
+# by rewriting envelope sender and all headers, using a dbm file
+# EXIM_DIR/in2ex, which maps internal local parts to external
+# e-mail addresses using entries like:
+#      user:   someone@remote.dom
+#
+# To do this, it good to hide hostnames in all envelope and
+# header addresses first, using this rewriting rule:
+
+*@*.LOCAL_DOM  $1@LOCAL_DOM                                            Eh
+
+# Then, rewrite envelope sender and all headers to external
+# addresses with this rule:
+
+*@LOCAL_DOM    ${lookup{${lc:$1}}dbm{EXIM_DIR/in2ex}{$value}fail}      Fh
+
+
+# This means that envelope recipients must be somehow rewritten
+# back to local addresses, which is done in one of the two
+# proposed ways (you choose).
+#
+# One way to do it is by rewriting, using a dbm file
+# EXIM_DIR/ex2in, which maps external e-mail addresses to
+# internal local parts using entries like:
+#      someone@remote.dom:     user
+#
+# This is done with the rewriting rule:
+#
+# *@*  ${lookup{${lc:$0}}dbm{EXIM_DIR/ex2in}{$value@LOCAL_DOM}fail}    T
+
+
+# The preferred way to do it is by treating certain e-mail
+# addresses on remote domains as local, using route_list and self
+# options to the domainlist routers, looking up e-mail addresses
+# in dbm file EXIM_DIR/ex2in and throwing values away.  This is
+# an example of such router.  It should probably the only router
+# in the configuration.
+
+smart_route:
+   driver = domainlist
+   transport = remote_smtp
+   route_list = "*     ${lookup{$local_part@$domain}dbm\
+                         {EXIM_DIR/ex2in}{@}{SMART_HOST}}      bydns_a"
+   self = local
+
+
+# Then, IF local parts of some of your users are different in
+# their internal and external addresses, it's nice to have the
+# internal_adjust smartuser director to rewrite the address.  It
+# should probably be the first director.
+
+internal_adjust:
+  driver = smartuser
+  new_address = "${lookup{${lc:$local_part@$domain}}dbm{EXIM_DIR/ex2in}\
+                  {$value@LOCAL_DOM}fail}"
+
diff --git a/config.samples/C032 b/config.samples/C032
new file mode 100644 (file)
index 0000000..18939d0
--- /dev/null
@@ -0,0 +1,15 @@
+Date: Wed, 24 Nov 1999 03:06:19 +0200
+From: Vadim Vygonets <vadik@cs.huji.ac.il>
+
+Exim Nervous Mailbox Quota Suite version 1999-11-08
+
+This is the Exim Nervous Mailbox Quota Suite.  It does not impose
+hard quotas on users' mailboxes, but it makes a user nervous by
+putting all his mail in a secondary mailbox, inaccessible to the
+user, when he is over his quota.  When the user clears his
+mailbox (i.e., deletes mail to make his mailbox below the quota
+again), mail from his secondary mailbox is transferred back to
+his primary mailbox, in FIFO order.
+
+The files that make up this configuration sample are contained
+in C032.tar.
diff --git a/config.samples/C032.tar b/config.samples/C032.tar
new file mode 100644 (file)
index 0000000..1cf958f
Binary files /dev/null and b/config.samples/C032.tar differ
diff --git a/config.samples/C033 b/config.samples/C033
new file mode 100644 (file)
index 0000000..525e82b
--- /dev/null
@@ -0,0 +1,49 @@
+Date: Mon, 29 Nov 1999 15:30:27 +0000 (GMT)
+From: Ken Bailey <K.Bailey@rbgkew.org.uk>
+
+>i am still watching for a very conservative vacation recipe.
+
+Anyway, here's our current one - 
+
+######################################################################
+## autoreply/vacation transport
+uservacation:
+  driver =  autoreply
+  user = ${local_part}
+  once = ${home}/vacation-once
+  file = ${home}/vacation.txt
+  log  = ${home}/vacation.log
+  return_message = true
+  text = "\
+ ------                                                           ------\n\n\
+ This message was automatically generated by email software\n\
+ The delivery of your message has not been affected.\n\n\
+ ------                                                           ------\n\n"
+  to = "${sender_address}"
+  subject =  "${if def:h_Subject: {Autoreply: $h_Subject:} {I am on vacation}}"
+##
+
+######################################################################
+## This director handles the automatic return of a vacation message
+## vacation director....##
+
+uservacation:
+  driver = localuser
+  transport = uservacation
+  require_files = ${home}/vacation.txt
+  # do not reply to errors or lists
+  senders = "! ^.*-request@.*:\
+              ! ^owner-.*@.*:\
+              ! ^postmaster@.*:\
+              ! ^listmaster@.*:\
+              ! ^mailer-daemon@.*"
+  # do not reply to errors and bounces or lists
+  condition = "${if or {{match {$h_precedence:} {(?i)junk|bulk|list}} \
+                        {eq {$sender_address} {}}} {no} {yes}}"
+  # carry on checking regardless of the outcome of this  director...
+  unseen
+  no_expn
+  no_verify
+  user = ${local_part}
+######################################################################
+
diff --git a/config.samples/C034 b/config.samples/C034
new file mode 100644 (file)
index 0000000..4ef6ecf
--- /dev/null
@@ -0,0 +1,199 @@
+From: Mark Morley <mark@islandnet.com>
+Date: Sat, 11 Dec 1999 10:45:38 -0800 (PST)
+
+This is a HOW-TO for setting up Exim to support SMTP authentication under
+different environments, including regular password files, PAM and NIS.
+
+The goal is to allow local users to relay without requiring authentication,
+and disallow relaying by remote users UNLESS they authenticate.  If a user
+authenticates then their username is included in the log file entries so
+they can't abuse your server without incurring your wrath.
+
+The first thing you need to do is make sure you enabled the right things in
+the Local/Makefile before compiling.  You will need the following line:
+
+   AUTH_PLAINTEXT=yes
+
+And possibly this line:
+
+   AUTH_CRAM_MD5=yes
+
+If your server uses PAM then you will also need this line:
+
+   SUPPORT_PAM=yes
+
+Next you need to edit your configure file.  To achieve our goals we need
+to set three entries:
+
+   host_accept_relay should list those hosts that are allowed to relay
+   without needing to authenticate.  This is normally a list of your
+   local IP numbers.
+
+   host_auth_accept_relay should list those hosts that are allowed to
+   relay so long as they authenticate first.  We just set this to "*"
+   to allow authentication from anywhere.
+
+   If there are any hosts that you REQUIRE authentication from, even if
+   they are listed in host_accept_relay, then list them in the auth_hosts
+   setting.  In my case I only have one IP listed, and that's the one I'm
+   using to test authentication with (ie: my personal static IP number).
+
+Next comes the potentially tricky part.  You need to edit the AUTH section
+of the configure file (it's the section right after REWRITE).  You need to
+create an entry for each authentication method you wish to support.
+
+The first authentication method we'll create is called AUTH PLAIN.  It is
+the method used by Netscape Messenger for example.  With the PLAIN method
+the client sends a command like this:
+
+   AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk
+
+That third item there is actually three strings, separated by nul characters,
+and then base64 encoded.  The first string is not used here.  The second
+string will be the username, and the third string will be the password.
+
+The entry for AUTH PLAIN will look something like this:
+
+plain:
+  driver = plaintext
+  public_name = PLAIN
+  server_condition = ????
+  server_set_id = $2
+
+The tricky bit is deciding what the server_condition should be, and that
+depends on whether you are using PAM, NIS, plain password files, etc.  The
+server_condition string will be expanded, and if the result is "1" then
+authentication is successful - if it's "0" then authentication failed.
+
+At the point where the string is expanded, the username is stored in $2
+and the password in $3, so we just need to perform whatever lookups and
+comparisons are necessary to validate the user.
+
+For example, here's a server_condition that works for a specific user
+named "bloggs" with the password "freddy":
+
+  server_condition = "${if and{ {eq{$2}{bloggs}} {eq{$3}{freddy}} } {1}{0}}"
+
+But a single hardcoded example isn't all that useful (unless you only want
+a specific user to be able to authenticate).  Here's one that works with a
+non-shadowed NIS based password file:
+
+  server_condition = "${if and {{!eq{$2}{}}{!eq{$3}{}} \
+  {crypteq{$3}{${extract{2}{:} \
+  {${lookup{$2}nis{passwd.byname}{$value}{*:*}}}}}}}{1}{0}}"
+
+That's a tad more complicated!  At the heart of it it performs an NIS lookup
+on the "passwd.byname" map using $2 (the username) as the key.  If the
+lookup is successful then we get a typical passwd file entry, otherwise
+we get the bogus entry "*:*".  From the result it extracts the second field
+using a colon as the delimiter.  This results in either the user's encrypted
+password or "*".  It then encrypts $3 (the plaintext password) and compares
+that against the extracted value.  It also checks both $2 and $3 to ensure
+that neither is a null string.  If the whole condition is true then it
+resolves to "1", otherwise it resolves to "0".
+
+If your server uses a shadow passwd file with NIS, then you simply need to
+change the map from "passwd.byname" to "passwd.adjunct.byname" or whatever
+name your system uses.
+
+If your mail server uses a traditional passwd file, you could probably do
+something like this (untested):
+
+  server_condition = "${if and {{!eq{$2}{}}{!eq{$3}{}} \
+  {crypteq{$3}{${extract{2}{:} \
+  {${lookup{$2}lsearch{/etc/passwd}{$value}{*:*}}}}}}}{1}{0}}"
+
+If you use shadow passwords you could change the "/etc/passwd" to
+"/etc/shadow" or "/etc/security/passwd.adjunct", etc.
+
+If your mail server uses PAM, then the condition is much simpler:
+
+  server_condition = "${if pam{$2:$3}{1}{0}}"
+
+Since Exim has built-in PAM support you don't need such a complicated
+string expansion.
+
+So now we want to add a second authentication method.  This one is called
+AUTH LOGIN and is used by Outlook Express, among others.  This is similar
+to the PLAIN method, except that the client expects the server to prompt
+it for the username and password one at a time.
+
+Here's the basic entry:
+
+login:
+  driver = plaintext
+  public_name = LOGIN
+  server_prompts = "Username:: : Password::"
+  server_condition = ????
+  server_set_id = $1
+
+The primary difference from the PLAIN method is the server_prompts setting,
+which is a colon-separated list of prompts to issue to the client.  According
+to the AUTH LOGIN specification, there should be two prompts and they should
+always be "User Name" and "Password".  But Microsoft is never content to
+leave things be and this will only work with Outlook Express if you use
+"Username:" and "Password:".  The double "::" is needed to escape the
+trailing colons.
+
+After the prompts are issued and the client has submitted it's responses,
+the username will be stored in $1 and the password in $2.  You can use the
+same server condition that you used for the PLAIN method, just change the
+$2's to $1's, and the $3's to $2's.
+
+Both the PLAIN and LOGIN methods transfer unencrypted copies of the username
+and password over the 'net.  This is not the most secure way of doing things
+(although the fact that it's base64 encoded makes it a bit more secure than
+the way the same data is sent for a standard POP session).  So there is a
+third method you may want to support called CRAM-MD5.  This is the method
+used by Eudora for example.
+
+CRAM-MD5 never sends the password at all.  The server issues a challenge,
+which the client encrypts using the user's password, and returns to the
+server.  The server performs the same encryption.  If the two strings
+match then the client must have used the same password and therefore it's
+safe to authenticate them.
+
+The problem with CRAM-MD5 is that in order for it to work, the server must
+have an UNENCRYPTED copy of the user's password.  With most typical servers
+this isn't possible, since the passwords in a UNIX passwd file are normally
+one-way encrypted.
+
+So unless you are willing to maintain a separate database of plaintext
+username/password pairs for those users who want to use CRAM-MD5, it's
+of little value.
+
+In our case we use Qualcomm's POP server software which allows Eudora
+users to send email via the POP server itself (via the POP XMIT command),
+so SMTP authentication isn't really needed for them anyway.
+
+So that's that.  Whether it's via SMTP authentication or POP XMIT, the
+majority of our users can now relay through our mail server regardless
+of where they are connecting from.
+
+Now there is one problem, in my opinion, with this whole setup.  Certain
+email clients (eg: Netscape Messenger) will notice that your server now
+accepts authentication, and will assume that it's required.  That means
+that even users on your local network will suddenly have to enter their
+password whenever they send a message.
+
+While this works, it causes a lot of confusion for people who have never
+had to do that before.  To my way of thinking it would be better to hide
+the fact that authentication is supported when the client is connecting
+from a local IP number.
+
+To do this you must make a simple modification to the Exim source code.
+On line 1943 of src/smtp_in.c (Exim 3.12) you will find the following
+condition:
+
+   if (auths != NULL)
+
+Change it to this:
+
+   if (auths != NULL && (host_must_authenticate ||
+                        !verify_check_host(&host_accept_relay, FALSE)))
+
+And recompile.  Your server will now only advertise the AUTH capability
+to clients that are required to authenticate (ie: they are listed in
+the auth_hosts setting) or those that are NOT listed in host_accept_relay.
+
+mark@islandnet.com
diff --git a/config.samples/F001 b/config.samples/F001
new file mode 100644 (file)
index 0000000..fd21954
--- /dev/null
@@ -0,0 +1,35 @@
+From: Ephraim Silverberg <ephraim@cs.huji.ac.il>
+Date: Tue, 17 Feb 1998 12:55:55 +0200
+
+We're using Exim 1.82 and have written a message filter to intercept spam
+messages that RBL doesn't catch.  Since we have met with reasonable success
+since installing (and refining) the filter -- 566 genuine spam messages
+intercepted during a time period where there were 67 RBL rejections -- I
+thought that the rest of the list may be interested in reviewing our filter
+as a starting point for their own system message filter.
+
+There are a number of caveats, however:
+
+1. The suspected spam is not automatically rejected as RBL hosts are, but
+   is saved to a folder that should be read/writable by the mail
+   administrators.  The reason for this is that the filter catches also
+   some legitimate mail and these messages should be bounced to their
+   originally intended recipient(s) (ala X-Envelope-To:) and the filter
+   refined and/or the databases (described below) updated.
+
+2. My filter traps blank/non-existent To: lines as well as To: lines
+   contained in From: lines, but firsts exempts the following categories
+   from this check: mailing lists, local mail, mail originating in the
+   country (e.g. in our case *.il) and mail coming from autosupport servers.
+
+Beyond implicit checks, it uses four DBM databases: two that exempt the
+message from any spam (beyond RBL) checks (software servers and strange mailing
+lists need to be here) -- one based on $sender_address and the other on
+$header_to: lines -- and, conversely, two databases for known spammers that
+have valid mail headers that aren't caught by implicit checks. All entries
+in these databases are lowercase so that we don't need two lines for
+'friend@public.com' and 'Friend@Public.com'.
+
+The sample filter package is at ftp://ftp.cs.huji.ac.il/pub/exim/spam_filter/
+
+Comments and suggestions are welcome.
diff --git a/config.samples/F002 b/config.samples/F002
new file mode 100644 (file)
index 0000000..dc97351
--- /dev/null
@@ -0,0 +1,98 @@
+Date: Tue, 03 Mar 1998 15:45:24 -0500
+From: Dan Birchall <djb@16straight.com>
+
+History:
+
+In early 1997, I wrote a little PERL program which refused
+mail from unknown addresses until they mailed me promising
+not to spam me.  (This ran on my account as an end-user
+solution.)  It was very effective, but didn't scale well.
+
+Recently, I'd been thinking of adding some similar 
+functionality to my Exim filter file.  Someone on another
+list mentioned that they were going to work on doing the
+same in their Sendmail config, and since I'd already 
+thought through how to do it in Exim, and knew it'd be
+slightly easier than falling out of bed, I went ahead and
+did it.  I mentioned having done it, and Piete bugged me
+to send it here too. :)
+
+Structure:
+
+There are two (optionally three) flat files involved, plus
+a system-wide filter file and one (optionally two) shell
+script(s).
+
+The first flat file contains a list of recipient e-mail
+addresses handled by my server, with parameters stating
+whether they do or do not wish to be afforded some degree
+of protection from spam through various filters.  An
+excerpt:
+
+djb@16straight.com: spam=no
+djb@mule.16straight.com: spam=no untrusted=no
+djb@scream.org: spam=no relay=no untrusted=no
+
+Various filters in my filter file read this, and based
+on the values of certain parameters, will take certain
+measures to prevent spam from reaching an address.  This
+particular filter works on the "untrusted" parameter.
+
+The second flat file contains a list of IP addresses for
+hosts that the server has been instructed to trust.  (At
+this point, this is a system-wide list; if a host is
+trusted, it's trusted for all addresses.  It should be
+fairly similar to arrange for some sort of user-specific
+list, but I haven't had the need.)  An excerpt:
+
+206.214.98.16: good=yes
+205.180.57.68: good=yes
+204.249.49.75: good=yes
+
+The filter is as follows:
+
+if
+${lookup{$recipients:untrusted}lsearch{/usr/exim/lists/shield}{$value}}
+is "no"
+and
+${lookup{$sender_host_address:good}lsearch{/usr/exim/lists/good_hosts}{$value}}
+is ""
+then freeze endif
+
+Basically, if $recipients is found in the first file, with
+an "untrusted=no" parameter, and the sending host's IP
+address is *not* in the second file, or does not have a
+"good=yes" parameter next to it, the message is frozen.
+
+I then come along as root and run this script, with the
+Exim message ID as the only argument:
+
+echo -n `grep host_address /usr/exim/spool/input/$1-H |cut -f2 -d" "` >>
+/usr/exim/lists/good_hosts
+echo ": good=yes" >> /usr/exim/lists/good_hosts
+sendmail -M $1
+
+This adds the sending host's IP to the good_hosts file and
+forces delivery of the message.
+
+Options:
+
+The other optional file is a blacklist; the other optional
+script puts the sending host's IP in *that* file and deletes
+the message.
+
+This is just yet another fun little way to play with spam.
+(Looks like meat, tastes like play-doh... or is it the 
+other way around?)
+
+Bugs:
+
+Yes, there are weaknesses.  Specifically:
+
+* multi-address $recipients will probably get by this
+* scalability is always a concern
+* large ISP's that generate lots of mail _and_ spam...
+
+This is near the top of my filter file, though, and
+there are several other filters below it to catch any
+stuff it might miss.
diff --git a/config.samples/F003 b/config.samples/F003
new file mode 100644 (file)
index 0000000..b9f097a
--- /dev/null
@@ -0,0 +1,97 @@
+Date: Sat, 4 Apr 1998 07:23:39 +0200 (GMT+0200)
+From: "F. Jacot Guillarmod" <Jacot@ru.ac.za>
+
+Here's four checks installed in our system wide filter that knock out
+a lot of otherwise hard to detect rubbish - and would handle the above
+example.  The most interesting one is the hotmail.com "validity check".
+
+# ===========================================================================
+# authenticated sender, but not from pegasus
+#-------------------------------------------
+elif "$h_comments" contains "authenticated sender" and
+     "$h_x-mailer" does not contain "pegasus" then
+
+    log "$tod_log $message_id SPAMAUTHS: sender=$sender_address \
+        subject=$header_subject: recipients_count=$recipients_count \
+        recipients=$recipients"
+    save /usr/local/lib/mail/spam
+
+# claims to be from hotmail.com
+#------------------------------
+elif "$h_from" contains "hotmail.com" and
+     "${if !def:header_x-originating-ip {nospam}}" is nospam then
+
+    log "$tod_log $message_id SPAMHOTMAIL: sender=$sender_address \
+        subject=$header_subject: recipients_count=$recipients_count \
+        recipients=$recipients"
+    save /usr/local/lib/mail/spam
+
+# claims to be from juno.com
+#------------------------------
+elif "$h_from" contains "juno.com" and
+     "${if def:header_x-mailer {juno} {spam}}" is spam then
+
+    log "$tod_log $message_id SPAMJUNO: sender=$sender_address \
+        subject=$header_subject: recipients_count=$recipients_count \
+        recipients=$recipients"
+    save /usr/local/lib/mail/spam
+
+# spam X-UIDL header found
+# ------------------------
+elif "${if def:header_x-uidl {spam}}" is spam then
+
+    log "$tod_log $message_id SPAM-X-UIDL: sender=$sender_address \
+        subject=$header_subject: recipients_count=$recipients_count \
+        recipients=$recipients"
+    save /usr/local/lib/mail/spam
+# ===========================================================================
+
+
+The following rule seems to work (but I don't use it):
+
+# either To: is contained in From: or there is no To: line
+# --------------------------------------------------------
+elif $h_from contains $h_to then
+
+     log "$tod_log $message_id SPAM-TOEQFRM: sender=$sender_address \
+        subject=$header_subject: recipients_count=$recipients_count \
+        recipients=$recipients"
+     save /usr/local/lib/mail/spam
+# --------------------------------------------------------
+
+
+
+Here's parts of my personal .forward file - I'm relying on the system wide exim
+configs to zap spam, and only do the old fashioned stuff to whatever gets
+through:
+
+#==========================================================================
+# Exim filter            <<== do not edit or remove this line
+
+if   error_message then finish endif
+
+logfile $home/eximfilter.log
+
+# Mail from support system
+if   $header_subject contains "[Help #"
+then
+  save $home/Mail/in.support
+
+# Mail from squid mailing list to local newsgroup
+elif   $header_subject contains "squid-users-digest"
+then
+  deliver "<ru-list-squid@quagga.ru.ac.za>"
+
+# Mail from exim-users mailing list to local newsgroup
+elif   $return_path contains "exim-users-request"
+then
+  deliver "<ru-list-exim-users@quagga.ru.ac.za>"
+
+# Stuff to be thrown away
+if   $header_subject contains "Warning From uucp"
+then
+  seen finish
+endif
+
+#==========================================================================
+
diff --git a/config.samples/F004 b/config.samples/F004
new file mode 100644 (file)
index 0000000..655df14
--- /dev/null
@@ -0,0 +1,71 @@
+Date: Tue, 23 Nov 1999 02:49:32 +0200
+From: Vadim Vygonets <vadik@cs.huji.ac.il>
+
+This is an Exim filter snippet to change locally-generated 
+Message-Id: and Resent-Message-Id: headers to world-unique values.
+
+
+# Exim filter
+
+# Copyright (c) 1999
+#      Hans Matzen <hans@tm.informatik.uni-frankfurt.de>,
+#      Vadim Vygonets <vadik@vygo.net>.  All rights reserved.
+
+#################################################################
+# Change locally-generated Message-Id: and Resent-Message-Id:
+# headers to world-unique values.
+
+# Notes:
+# Change every occurence of "home.dom" to your home domain.
+# Change every occurence of "uniqie.remote.dom" to some unique value.
+
+# Unique values, as Vadik explained in his message to exim-users,
+# can be chosen in different ways:
+
+### The ideal way is to choose "hostnames" in existing domains whose
+### admins you know, and you will be sure that no hostname ending
+### with ".nonexistant.friendly.dom" will ever appear on this planet,
+### not even on someone else's message IDs.
+
+### Another ideas include putting after your hostname things like:
+### .972.2.6412694.phone
+### .29.32.columbia.street.jerusalem.96583.israel.addr
+### .1122.3576.3847.1446.visa.01.2002.expiration.date.vadim.vygonets.name.credit.card
+
+# This snippet provides to schemes to do such rewriting.  The
+# first scheme is to have mapping from local hostnames to unique
+# "Message-Id domains".  The second scheme is to use one unique
+# "Message-Id domain", inserting the original "domain" into the
+# "local-part" of the new Message-Id header.
+
+# Precaution
+headers remove "X-Vygo-Net-Temporary-Message-Id"
+
+# Change Message-Id:
+if "${if def:h_Message-Id: {yes}}" is yes and 
+    ${lc:${domain:$h_Message-Id:}} is    "home.dom" or
+    ${lc:${domain:$h_Message-Id:}} ends ".home.dom" then
+# This is if you want to have a file mapping each hostname to a unique
+# Message-Id domain part, or, if it fails, preserves the original domain part:
+#      headers add "X-Vygo-Net-Temporary-Message-Id: <${local_part:$h_Message-Id:}@${lookup{${domain:$h_Message-Id:}}lsearch{/var/exim/msgid-hosts}{$value}{${domain:$h_Message-Id:}}}>\n"
+# This rewrites Message-Id as <local_part.domain@unique.domain>:
+       headers add "X-Vygo-Net-Temporary-Message-Id: <${local_part:$h_Message-Id:}.${domain:$h_Message-Id:}@unique.remote.dom>\n"
+       headers remove "Message-Id"
+       headers add "Message-Id: $h_X-Vygo-Net-Temporary-Message-Id:"
+       headers remove "X-Vygo-Net-Temporary-Message-Id"
+endif
+
+# Change Resent-Message-Id:
+if "${if def:h_Resent-Message-Id: {yes}}" is yes and 
+    ${lc:${domain:$h_Resent-Message-Id:}} is    "home.dom" or
+    ${lc:${domain:$h_Resent-Message-Id:}} ends ".home.dom" then
+# This is if you want to have a file mapping each hostname to a unique
+# Message-Id domain part, or, if it fails, preserves the original domain part:
+#      headers add "X-Vygo-Net-Temporary-Message-Id: <${local_part:$h_Resent-Message-Id:}@${lookup{${domain:$h_Resent-Message-Id:}}lsearch{/var/exim/msgid-hosts}{$value}{${domain:$h_Resent-Message-Id:}}}>\n"
+# This rewrites Message-Id as <local_part.domain@unique.domain>:
+       headers add "X-Vygo-Net-Temporary-Message-Id: <${local_part:$h_Resent-Message-Id:}.${domain:$h_Resent-Message-Id:}@unique.remote.dom>\n"
+       headers remove "Resent-Message-Id"
+       headers add "Resent-Message-Id: $h_X-Vygo-Net-Temporary-Message-Id:"
+       headers remove "X-Vygo-Net-Temporary-Message-Id"
+endif
+
diff --git a/config.samples/README b/config.samples/README
new file mode 100644 (file)
index 0000000..4f56627
--- /dev/null
@@ -0,0 +1,11 @@
+Exim Sample Configurations
+--------------------------
+
+The files in this directory have been contributed by Exim users. I have not 
+tested them in any way. If you want to ask questions about how they work, 
+please approach the original contributor, not me!
+
+Files in the series C001, C002, ... are exim configuration samples. Those in 
+the series F001, F002, ... are filter file samples.
+
+Philip Hazel
diff --git a/credits.html b/credits.html
new file mode 100644 (file)
index 0000000..ad94fe9
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim website credits</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>exim website credits</h1>
+
+    <p>A number of people and organisations have contributed to this
+    web site.  If I have missed you out, my apologies and please
+    contact me so that I can add you to this list.</p>
+
+    <dl>
+      <!-- one of (dd dt) -->
+      <dt>
+       <b>
+         Nigel Metheringham
+       </b>
+      </dt>
+      <dd>
+       (yes, thats me) built the web site and I attempt to keep it up
+       to date.
+      </dd>
+      <dt>
+       <b>
+         <a href = "mailto:jeff@horslimites.qc.ca">Jean-François Poirier</a>
+       </b>
+       of the 
+       <tt><a href = "http://www.horslimites.qc.ca">Hors Limites
+           urban collective</tt></a>
+      </dt>
+      <dd>
+       provided the large logo and the impetus to get the web site sorted.
+      </dd>
+      <dt>
+       <b>
+         <a href="http://www.theplanet.net" target="_top">Planet Online</a>
+       </b>
+      </dt>
+      <dd>
+       provided the <a href="http://www.exim.org/" target="_top">UK
+       web site</a>, the domain name registration and various other
+       resources for the exim community.  Planet also now use exim
+       for their main mail systems, and are transitioning all mail
+       systems over to exim.
+       <center><img src="images/planico.png"></center>
+      </dd>
+      <dt>
+       <b>
+         <a href="http://www.shore.net" target="_top">Shore.Net</a>
+       </b>
+      </dt>
+      <dd>
+       provides a <a href="http://www.us.exim.org/" target="_top">US
+       mirror</a> of the web site.  Shore.Net is a large regional ISP
+       in the Northeastern US, and uses exim for the majority of
+       their mail traffic.
+       <center><img src="images/shore150.png"></center>
+      </dd>
+      <dt>
+       <b>
+         <a href="http://www.esat.net" target="_top">Esat Net</a>
+       </b>
+      </dt>
+      <dd>
+       provides an <a href="http://www.ie.exim.org/"
+       target="_top">Irish mirror</a> of the web site.  Esat Net is
+       Ireland's longest serving ISP and uses Exim on all it's core
+       SMTP servers.  <center><img src="images/esatnet.png"></center>
+      </dd>
+    </dl>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: credits.html,v 1.4 2000/04/09 22:02:32 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/docs.html b/docs.html
new file mode 100644 (file)
index 0000000..387b129
--- /dev/null
+++ b/docs.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Documentation for exim</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Documentation for exim</h1>
+
+    <p>Exim has a set of documentation released with it.  A text file
+    of the main documentation is released as part of the exim tar
+    archive.  Additionally postscript and texinfo forms of the
+    documentation are also available in separate tar archives on the
+    ftp sites.</p>
+
+    <p>There are 3 main sets of documentation for exim, all of which
+    are also available below in html form (generated from the texinfo
+    version - this is lacking information such as change bars etc -
+    the master set of documentation is always the postscript form).</p>
+
+    <dl>
+      <!-- one of (dd dt) -->
+      <dt>
+       <b>
+         <a href="exim-html-3.10/doc/html/oview.html">
+         Exim Overview</a>
+       </b>
+      </dt>
+      <dd>A summary overview of the capabilities of exim</dd>
+      <!-- one of (dd dt) -->
+      <dt>
+       <b>
+         <a href="exim-html-3.10/doc/html/spec.html" target="_top">
+         The Exim Specification</a>
+       </b>
+      </dt>
+
+      <dd>The master documentation for exim containing all required
+      detail to install, configure and use exim.  <font
+      color=darkgreen>Changes to the documentation (normally
+      reflecting changes to the functionality of exim, are now shown
+      in a green font like this segment.</font><em>Documentation has
+      now been updated to version 3.10</em></dd>
+
+      <!-- one of (dd dt) -->
+      <dt>
+       <b>
+         <a href="exim-html-3.10/doc/html/filter.html">
+         The Exim Filter Specification</a>
+       </b>
+      </dt>
+      <dd>Additional information on the exim filter language.</dd>
+
+    </dl>
+    <h2>HOWTO Documentation</h2>
+    <ul>
+      <li><a href="howto/rbl.html">Using the RBL</a></li>
+      <li><a href="howto/relay.html">Controlling relaying</a></li>
+      <li><a href="howto/mailman.html">Using mailman lists with exim</a></li>
+    </ul>
+    <h2>Frequently Asked Questions - FAQ</h2>
+    <p>The <a href="FAQ.html">exim FAQ</a> is now available.</p>
+
+    <h2>Copies of Documentation</h2>
+
+    <p>Copies of the main exim documentation in HTML format as used on
+    this site in a compressed tar file are available from the main
+      ftp site and mirrors (see file <tt>exim-html-*</tt>).</p>
+
+    <h2>FAQs and other Documentation</h2>
+    <p>A number of FAQs are in preparation and will be made available shortly.
+      Please contact me if you have material to contribute.</p>
+
+    <h2>Old Documentation</h2>
+    <p>Old versions of documentation are still on-line:-</p>
+    <table>
+      <tr><th>Version 3.0x</th>
+       <td>
+         <a href="exim-html-3.00/doc/html/spec.html" target="_top">
+           specification document</a>
+       </td>
+       <td>
+         <a href="exim-html-3.00/doc/html/filter.html">filter</a>
+       </td>
+       <td>
+         <a href="exim-html-3.00/doc/html/oview.html">overview</a>
+       </td>
+      </tr>
+      <tr><th>Version 2.1x</th>
+       <td>
+         <a href="exim-html-2.10/doc/html/spec.html" target="_top">
+           specification document</a>
+       </td>
+       <td>
+         <a href="exim-html-2.10/doc/html/filter.html">filter</a>
+       </td>
+       <td>
+         <a href="exim-html-2.10/doc/html/oview.html">overview</a>
+       </td>
+      </tr>
+      <tr><th>Version 2.0x</th>
+       <td>
+         <a href="exim-html-2.00/doc/html/spec.html" target="_top">
+           specification document</a>
+       </td>
+       <td>
+         <a href="exim-html-2.00/doc/html/filter.html">filter</a>
+       </td>
+       <td>
+         <a href="exim-html-2.00/doc/html/oview.html">overview</a>
+       </td>
+      </tr>
+      <tr><th>Version 1.9x</th>
+       <td>
+         <a href="exim-html-1.90/doc/html/spec.html" target="_top">
+           specification document</a>
+       </td>
+       <td>
+         <a href="exim-html-1.90/doc/html/filter.html">filter</a>
+       </td>
+       <td>
+         <a href="exim-html-1.90/doc/html/oview.html">overview</a>
+       </td>
+      </tr>
+    </table>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: docs.html,v 1.4 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/home.html b/home.html
new file mode 100644 (file)
index 0000000..d27bae7
--- /dev/null
+++ b/home.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Basic Exim Home Page Stuff</title>
+    <base target="body">
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <center>
+      <img src="images/eximX.png" alt="[big logo]">
+    </center>
+    <h1>The Exim Home Page</h1> 
+
+    <p>Exim is a message transfer agent (<b>MTA</b>) developed at the
+    University of Cambridge for use on Unix systems connected to the
+    Internet. It is freely available under the terms of the <b>GNU
+    General Public Licence</b>. In style it is similar to <b>Smail
+    3</b>, but its facilities are more extensive, and in particular it
+    has some defences against mail bombs and unsolicited junk mail in
+    the form of options for refusing messages from particular hosts,
+    networks, or senders.  It can be installed in place of sendmail,
+    although the configuration of exim is quite different to that of
+    sendmail.</p>
+
+    <p>An expanded <a href="intro.html">introduction is available</a>.</p>
+
+    <h2>New Things</h2>
+    <ul>
+      <li>
+       Exim Version 3.13 is available - see the <a
+       href="mirrors.html">availibility</a> pages to get hold of a
+       copy.
+      </li>
+    </ul>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Sun May 16 21:43:01 BST 1999 -->
+    <h6>$Id: home.html,v 1.10 2000/04/09 22:02:33 nigel Exp $</h6>
+  </body>
+</html>
diff --git a/howto/mailman.html b/howto/mailman.html
new file mode 100644 (file)
index 0000000..9b375e0
--- /dev/null
@@ -0,0 +1,192 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>HOWTO - Using exim and mailman together</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>HOWTO - Using exim and mailman together</h1>
+
+    <p>Mailman is a list manager with web front end and built in
+      archiving functions.  Details can be found at <a href="http://www.list.org/">http://www.list.org/</a></p>
+
+    <h2>Mailman configuration</h2>
+
+    <p>There is no mailman configuration needed other than the
+    standard options detailed in the mailman install documentation.
+    The exim configuration is transparent to mailman.  The uid/gid
+    settings for mailman must match those in the config fragments
+    given below.</p>
+
+    <h2>Exim configuration</h2>
+
+    <p>The exim configuration is built so that a list created within
+    mailman automagically appears to exim without the need for
+    additional alias files etc to be changed.</p>
+
+    <p>The drawback of this configuration is that it will work poorly
+    on systems supporting lists in several different mail domains -
+    for that matter mailman itself has poor support for this right
+    now. This may change in the future</p>
+
+    <p>The configuration file segments included are to be built on top
+    of an already functional exim configuration, which accepts mail
+    for the domain which the list resides in (ie that domain is
+    already in <tt>local_domains</tt> - should this domain be separate
+    from the others handled by this exim, then add the list domain to
+    <tt>local_domains</tt>, add a <tt>domains=my.list.domain</tt>
+    option to each of the directors and you may wish to exclude that
+    domain from the other directors.</p>
+
+    <p>Your exim configuration also needs a working alias
+    configuration, with entries (within the list domain) for
+    <tt>mailman</tt>, <tt>mailman-request</tt> and
+    <tt>mailman-admin</tt> (plus any other global contact addresses
+    for the list master.</p>
+
+    <p>There are 3 config file sections below which need pasting into
+    the appropriate parts of the main exim config file.  The first one
+    may also need tailoring to your mailman configuration</p>
+
+    <h4>Main config file section</h4>
+<pre>
+## Top section of config file - macro definitions
+## Tailor these to fit your installation
+## pretty much everything else should just fit...
+##
+# home dir for mailman
+MAILMAN_HOME=/home/mailman
+# wrapper script for mailman
+MAILMAN_WRAP=MAILMAN_HOME/mail/wrapper
+# user and group for mailman
+MAILMAN_UID=exim
+MAILMAN_GID=exim
+</pre>
+    <h4>Transports config file section</h4>
+<pre>
+## Transports section
+##
+## Three transports for list mail, request mail and admin mail
+## respectively
+## Mailman is installed in MAILMAN_HOME
+## Mailman is configured to be invoked as user exim
+list_transport:
+           driver = pipe
+           command = MAILMAN_WRAP post ${lc:$local_part}
+           current_directory = MAILMAN_HOME
+           home_directory = MAILMAN_HOME
+           user = MAILMAN_UID
+           group = MAILMAN_GID
+
+list_request_transport:
+           driver = pipe
+           command = MAILMAN_WRAP mailcmd ${lc:$local_part}
+           current_directory = MAILMAN_HOME
+           home_directory = MAILMAN_HOME
+           user = MAILMAN_UID
+           group = MAILMAN_GID
+
+list_admin_transport:
+           driver = pipe
+           command = MAILMAN_WRAP mailowner ${lc:$local_part}
+           current_directory = MAILMAN_HOME
+           home_directory = MAILMAN_HOME
+           user = MAILMAN_UID
+           group = MAILMAN_GID
+
+### end of transports section fragment
+</pre>
+    <h4>Directors config file section</h4>
+<pre>
+## Directors section [this deals with local addresses]
+## 
+## First 2 directors rewrite list-owner or owner-list to list-admin
+## This is only done if the list exists.
+## List existence checks are done by seeing if the file
+## MAILMAN_HOME/lists/<list>/config.db
+## exists.  
+
+list_owner_director:
+   driver = smartuser
+   require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db
+   suffix = "-owner"
+   new_address = "${lc:$local_part}-admin@${domain}"
+
+owner_list_director:
+   driver = smartuser
+   require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db
+   prefix = "owner-"
+   new_address = "${lc:$local_part}-admin@${domain}"
+
+##
+## Next 3 directors direct admin, request and list mail to the appropriate
+## transport.  List existence is checked as above.
+
+list_admin_director:
+   driver = smartuser
+   suffix = -admin
+   require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db
+   transport = list_admin_transport
+
+list_request_director:
+   driver = smartuser
+   suffix = -request
+   require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db
+   transport = list_request_transport
+
+list_director:
+   driver = smartuser
+   require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db
+   transport = list_transport
+
+## End of directors fragment
+## End of config files bits
+</pre>
+
+<p>Exim should be configured to allow reasonable volume - ie no
+setting <tt>max_recipients</tt> down to a silly value, and with normal
+degrees of security - ie allowing relaying from <tt>127.0.0.1</tt>
+(thats vital), but pretty much nothing else.  Parallel deliveries and
+other tweaks can also be used.  Delay warning messages should be
+switched off or configured to only happen for non-list mail - unless
+you like receiving tons of mail when a host is down.</p>
+
+<h3>Problems</h3>
+<ul>
+
+   <li>Mailman's detection of exim bounces needs improving - it really
+   should make use of the extra header information that exim provides.
+   It also should recognise and deal with or ignore delay warning
+   messages.</li>
+
+   <li>List existence is checked on whether there is a config.db file
+   for a list.  If you delete lists by foul means, be aware of
+   this.</li>
+</ul>
+
+    <h2>Other Tweaks</h2> 
+
+    <p>One solution passed to me for handling virtual domains was -
+    <i>Since I use mailman in a virtual domain configuration with a
+    separate installation for each virtual domain, I did a slight
+    modification like this:</i></p>
+
+<pre>
+## transport configurations
+
+command = "/virtual/${domain}/mailman/mail/wrapper post ${lc:$local_part}"
+current_directory = /virtual/${domain}/mailman
+home_directory = /virtual/${domain}/mailman
+
+## and in the director part:
+
+require_files = /virtual/${domain}/mailman/lists/${lc:$local_part}/config.db
+
+</pre>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: mailman.html,v 1.6 2000/04/09 22:02:34 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/howto/old_rbl.html b/howto/old_rbl.html
new file mode 100644 (file)
index 0000000..abaf3d5
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>HOWTO - Using the RBL</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>HOWTO - Using the RBL</h1>
+
+    <p>The MAPS (Mail Abuse Protection System) RBL (Realtime Blackhole
+      List) is a means of identifying hosts that have been associated
+      with the sending of spam mail.  A full description of the
+      service and the technology and ethics behind it can be found at
+      <a href="http://maps.vix.com/rbl/"><tt>http://maps.vix.com/rbl/</tt></a>
+      along with more general mail policy information at 
+      <a href="http://maps.vix.com/"><tt>http://maps.vix.com/</tt></a>.</p>
+
+    <p>Exim can use the MAPS RBL and/or any other similarly defined
+      service (ie you could make your own additional maps as well).
+      To use exim for this you need to be running version 1.80 or
+      later.</p>
+
+    <p>This documentation is for versions of exim before version 3.00,
+    which are now considered obsolete.  The current information can be
+    found in the <a href="rbl.html">most recent version of this
+    howto</a>.</p>
+
+    <h2>RBL Configuration Options</h2>
+
+    <p>These are fully detailed in the <a href="../exim-html-3.00/doc/html/spec.html"
+    target="_top">Exim Specification Document</a>. The specific
+    section on RBL is <a
+    href="../exim-html-3.00/doc/html/spec_39.html#SEC708">here</a> and the rbl directives 
+    are documented starting <a href="../exim-html-3.00/doc/html/spec_10.html#SEC283">here</a></p>
+
+    <p>The 2 standard RBL configurations are:-</p>
+    <ol>
+
+      <li>Use RBL to add a <tt>X-RBL-Warning:</tt> header which can be
+       used by users for filtering
+<pre>
+rbl_domains = rbl.maps.vix.com
+no_rbl_reject_recipients
+rbl_warn_header
+</pre>
+
+      </li>
+      <li>Use the RBL to reject mail from barred machines
+<pre>
+rbl_domains = rbl.maps.vix.com
+rbl_reject_recipients
+</pre>
+       </li>
+    </ol>
+    <p>In both cases machines can be explicitly removed from RBL
+      control by adding their network addresses to the
+      <tt>rbl_except_nets</tt> list.</p>
+
+    <p>The information to do more complicated manipulations can be
+      found in the specification document and is outside the scope of
+      this note.</p>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: old_rbl.html,v 1.3 2000/04/09 22:02:34 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/howto/rbl.html b/howto/rbl.html
new file mode 100644 (file)
index 0000000..379ef30
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>HOWTO - Using the RBL</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>HOWTO - Using the RBL</h1>
+
+    <p>The MAPS (Mail Abuse Protection System) RBL (Realtime Blackhole
+    List) is a means of identifying hosts that have been associated
+    with the sending of spam mail.  A full description of the service
+    and the technology and ethics behind it can be found at <a
+    href="http://maps.vix.com/rbl/"><tt>http://maps.vix.com/rbl/</tt></a>
+    along with more general mail policy information at <a
+    href="http://maps.vix.com/"><tt>http://maps.vix.com/</tt></a>.</p>
+
+    <p>In the few years since MAPS started operating, other similar
+    services although with different aims, procedures and
+    reliabilities have been introduced - MAPS itself has a number of
+    these (ie MAPS/DUL which maintains lists of dial up modems), the
+    other major source is <a href="http:/www.orbs.org/">ORBS</a>,
+    which is a more proactive relay blocking service</p>
+
+    <p>Exim can use the MAPS RBL and/or any other similarly defined
+    service (ie you could make your own additional maps as well).  To
+    use exim for this you need to be running version 1.80 or later,
+    the configuration example in this document are specifically for
+    version 3.00 and later - the old version of this document,
+    covering older versions of exim can be found <a
+    href="old_rbl.html">here</a>.</p>
+
+    <h2>Exim RBL Support</h2>
+
+    <p>Exim has supported RBL from version 1.80, although the
+    flexibility was increased (with a related change configuration
+    options) on the release of Exim 3.00</p>
+
+    <p>The exim RBL support allows one or more RBL systems to be
+    checked and messages from hosts within each RBL to be either
+    rejected or marked by the addition of an extra header
+    <tt>X-RBL-Warning:</tt>.  It is also possible to have a limited
+    number of recipients bypass the RBL reject functions completely,
+    thus allowing postmaster (for example) to receive mail even from
+    an RBL blocked site.</p>
+
+
+   <h2>RBL Configuration Options</h2>
+
+    <p>These are fully detailed in the <a
+    href="../exim-html-3.10/doc/html/spec.html" target="_top">Exim
+    Specification Document</a>. The specific section on RBL is <a
+    href="../exim-html-3.10/doc/html/spec_43.html#SEC758">here</a> and
+    the rbl directives are documented starting <a
+    href="../exim-html-3.10/doc/html/spec_11.html#SEC299">here</a></p>
+
+    <p>A typical configuration would be a mail system which rejects
+    mail from machines that appear within the MAPS RBL list, and also
+    checks hosts in the ORBS lists but only marking each message has
+    coming via an RBLed host rather than rejecting them.  Additionally
+    all mail to the local postmaster always gets through, even if the
+    host is in the MAPS RBL list.  You also have a local private set
+    of IPs which relay out through this mail server on net
+    192.168.0.0/24 - these cannot be contacted from outside your
+    organisation so RBL is not an issue.</p>
+
+    <p>The configuration fragment (in the main part of the exim
+    configuration file) to do this is:-</p>
+
+    <pre>
+# reject messages whose sending host is in MAPS/RBL
+# add warning to messages whose sending host is in ORBS
+rbl_domains = rbl.maps.vix.com/reject : relays.orbs.org/warn
+# check all hosts other than those on internal network
+rbl_hosts = !192.168.0.0/24:0.0.0.0/24
+# but allow mail to postmaster@my.dom.ain even from rejected host
+recipients_reject_except = postmaster@my.dom.ain
+# change some logging actions (collect more data)
+rbl_log_headers        # log headers of accepted RBLed messages
+rbl_log_rcpt_count     # log recipient info of accepted RBLed messages
+    </pre>
+
+    <p>The information to do more complicated manipulations can be
+      found in the specification document and is outside the scope of
+      this note.</p>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: rbl.html,v 1.3 2000/04/09 22:02:34 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/howto/relay.html b/howto/relay.html
new file mode 100644 (file)
index 0000000..f07ec65
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>HOWTO - Preventing Relaying</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>HOWTO - Preventing Relaying</h1>
+
+    <p>Many people want to get a free ride from your system by using
+      it for relaying their mail.  This can be due to them being
+      corrupt and wishing to let you take the rap for relaying their
+      junk, or them being lazy and unable to make their own systems
+      work.  In any case this is a theft of service and needs to be
+      stopped.</p>
+
+    <h2>Relay Configuration Options</h2>
+
+    <p>These are fully detailed in the <a href="../exim-html-3.10/doc/html/spec.html"
+    target="_top">Exim Specification Document</a>. The specific
+    section on relaying is <a
+    href="../exim-html-3.10/doc/html/spec_43.html#SEC761">here</a> </p>
+
+    <ol>
+      <li>Firstly you need to specify the local mail domains as
+       tightly as possible.  <tt>local_domains</tt> should only cover
+       domains that really are local - this is relevant since exim
+       allows any sender to mail to these domains (since you have
+       told exim those domains are local you are not actually
+       relaying by sending to them.</li>
+
+      <li>Any domains that are not finally handled by the local exim,
+      but can legitmately be relayed through (ie domains you act as
+      backup MX for) should be specified in the
+      <tt>relay_domains</tt>, although a short cut for doing this is
+      setting <tt>relay_domains_include_local_mx</tt> which can be
+      used to abuse your mail server by adding MXes pointing at you,
+      but raises the bar so much higher than it is normally good
+      enough.</li>
+
+      <li>You probably want to be able to relay out from local
+      machines on the same network - be careful here since any open
+      machine on your network could be used to do unauthorised
+      relaying.  The control of hosts that can relay is done with the
+      <tt><a
+      href="../exim-html-3.10/doc/html/spec_11.html#SEC228">host_accept_relay</a></tt>
+      option.</li>
+
+    </ol>
+
+    <p>The standard settings for a workstation, allowing relaying
+      through the loopback (since packages such as MH post mail this
+      way), would be:-</p>
+<pre>
+relay_domains =
+no_relay_domains_include_local_mx
+no_relay_match_host_or_sender
+host_accept_relay = 127.0.0.1/8
+</pre>
+    <p>this is actually the default settings other than that for
+      <tt>host_accept_relay</tt>.</p>
+
+    <p>The information to do more complicated manipulations can be
+      found in the specification document and is outside the scope of
+      this note.</p>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: relay.html,v 1.3 2000/04/09 22:02:34 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/howto_mirror.html b/howto_mirror.html
new file mode 100644 (file)
index 0000000..56742d1
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Building an exim website mirror</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Mirroring the Exim web site</h1> 
+
+    <h2>Mirroring the content</h2> 
+
+    <p>All of the exim web site content is available through rsync,
+    and this is the recommended means for mirroring the web site
+    content.  A document describing <a
+    href="http://www.sunsite.auc.dk/SunSITE/rsync/rsync-mirroring.html">rsync
+    mirroring</a> has been produced by <a
+    href="http://www.sunsite.auc.dk/">Sunsite Denmark</a>, and this
+    gives good general information on rsync in general, where to
+    obtain the software, as well as rsync for mirroring.</p>
+
+    <p>The rsync URL is <a href="rsync://ftp.exim.org/www">
+       rsync://ftp.exim.org/www </a></p>
+
+    <p>However the more normal means to quote the rsync path is
+    <tt>ftp.exim.org::www</tt></p>
+
+    <p>The rsync path for the ftp area is
+    <tt>ftp.exim.org::ftp</tt></p>
+
+    <h2>Configuring your httpd</h2>
+
+    <p>Your httpd obviously needs to see the mirrored content.  There
+    are also some other tweaks - Apache aliases - which are needed.
+    The paths that need aliasing are currently only the <tt>/ftp></tt>
+    path which either needs pointing to your ftp mirror, or
+    redirecting to a reasonable mirror of the exim ftp site.</p>
+
+    <p>If and when the mailing list archives are put on line, these
+      may also need handling in a special way.</p>
+
+    <h2>Branding your site</h2>
+
+    <p>In some small recognition of the ISPs and other organisations
+      who donate the web site space, bandwidth and management, the web 
+      site has a brandable component - specifically the bottom left
+      hand pane of the main window points to the
+      <tt>branding/branding.html</tt> file.  By aliasing this path you 
+      can tailor this to put a sponsors logo in place.</p>
+
+    <h2>Tell people about it</h2>
+
+    <p>Assuming this is a public mirror then contact me about it and I
+    will add a link from the main site.  I can also get a
+    <tt>www.<i>country</i>.exim.org</tt> link added to the DNS for
+    you.  You may also wish to send one message to the mailing list
+    about this.</p>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: howto_mirror.html,v 1.4 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/images/dragonlogo.jpg b/images/dragonlogo.jpg
new file mode 100644 (file)
index 0000000..e184f3c
Binary files /dev/null and b/images/dragonlogo.jpg differ
diff --git a/images/esatnet.png b/images/esatnet.png
new file mode 100644 (file)
index 0000000..2d397b6
Binary files /dev/null and b/images/esatnet.png differ
diff --git a/images/exim.png b/images/exim.png
new file mode 100644 (file)
index 0000000..292db34
Binary files /dev/null and b/images/exim.png differ
diff --git a/images/eximX.png b/images/eximX.png
new file mode 100644 (file)
index 0000000..9e1e15a
Binary files /dev/null and b/images/eximX.png differ
diff --git a/images/eximXs.png b/images/eximXs.png
new file mode 100644 (file)
index 0000000..35cabe0
Binary files /dev/null and b/images/eximXs.png differ
diff --git a/images/invisible.xbm b/images/invisible.xbm
new file mode 100644 (file)
index 0000000..c8f76c4
--- /dev/null
@@ -0,0 +1,4 @@
+#define invisible_width 1
+#define invisible_height 1
+static char invisible_bits[] = {
+   0x00};
diff --git a/images/mailman-large.jpg b/images/mailman-large.jpg
new file mode 100644 (file)
index 0000000..e184f3c
Binary files /dev/null and b/images/mailman-large.jpg differ
diff --git a/images/mailman.jpg b/images/mailman.jpg
new file mode 100644 (file)
index 0000000..94a4c01
Binary files /dev/null and b/images/mailman.jpg differ
diff --git a/images/marker.png b/images/marker.png
new file mode 100644 (file)
index 0000000..16ee0ce
Binary files /dev/null and b/images/marker.png differ
diff --git a/images/planico.png b/images/planico.png
new file mode 100644 (file)
index 0000000..260ab62
Binary files /dev/null and b/images/planico.png differ
diff --git a/images/shore150.png b/images/shore150.png
new file mode 100644 (file)
index 0000000..1a152b3
Binary files /dev/null and b/images/shore150.png differ
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..66606b9
--- /dev/null
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim Internet Mailer</title>
+  </head>
+
+  <frameset cols="20%, *">
+    <frame marginwidth=0 name="toc" src="toc_frame.html">
+    <frame name="body" src="home.html">
+  </frameset>
+  <noframes>
+  <body bgcolor="#FFFFBF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <img src="images/eximXs.png" alt="small logo">
+    <br>
+      <h1>exim Internet Mailer - Table of Contents</h1>
+      <p>Your browser does not support frames.  The content of
+       this site should all be accessible, although not as
+       prettily, with a non-frames browser.  Please let me
+       know if there are problems.</p>
+      <ul>
+       <li>
+         <A HREF="intro.html"><b>Home Page</b></a>
+       </li>
+       <li>
+         <A HREF="intro.html"><b>Introduction</b></a>
+       </li>
+       <li>
+         <A HREF="exim-html-2.00/doc/html/oview.html"><b>Overview Documentation</b></a>
+       </li>
+       <li>
+         <A HREF="version.html"><b>Current Version</b></a>
+       </li>
+       <li>
+         <A HREF="mirrors.html"><b>Availability</b></a>
+       </li>
+       <li>
+         <A HREF="maillist.html"><b>Mailing Lists about exim</b></a>
+       </li>
+       <li>
+         <A HREF="docs.html"><b>Documentation and FAQs</b></a>
+       </li>
+       <li>
+         <A HREF="credits.html"><b>Website Credits</b></a>
+       </li>
+       <li>
+         <A HREF="ChangeLog.html"><b>Website Changes</b></a>
+       </li>
+      </ul>
+    <br>
+    <h6>$Id: index.html,v 1.2 1999/11/14 20:27:57 nigel Exp $</h6>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+  </noframes>
+</html>
diff --git a/intro.html b/intro.html
new file mode 100644 (file)
index 0000000..a5c4540
--- /dev/null
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Introduction to exim</title>
+    <base target="body">
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <center>
+      <img src="images/eximX.png" alt="[big logo]">
+    </center>
+    <h1>Introduction to exim</h1> 
+
+    <p>Exim is a message transfer agent (<b>MTA</b>) developed at the
+    University of Cambridge for use on Unix systems connected to the
+    Internet. It is freely available under the terms of the <b>GNU
+    General Public Licence</b>. In style it is similar to <b>Smail
+    3</b>, but its facilities are more extensive, and in particular it
+    has some defences against mail bombs and unsolicited junk mail in
+    the form of options for refusing messages from particular hosts,
+    networks, or senders.</p>
+
+    <p>The major features are summarised below.  There is also an
+    overview which expands on these features.  Exim has an extensive
+    set of documentation included in the exim specification,
+    additionally there are documents on the filtering functionality
+    and other documentation is being made available on this web site.
+    <a href="exim-html-3.10/doc/html/oview.html">The full overview is also
+    available</a>.</p>
+
+    <h2>Basic Features</h2>
+    <ul>
+      <li>
+       Many configuration options can be given as expansion strings,
+       and as these can include file lookups, much of Exim's
+       operation can be made table-driven if desired.  For example,
+       it is possible to do local delivery on a machine on which the
+       users do not have accounts.
+      </li>
+      <!-- -->
+      <li>
+       Regular expressions are available in a number of configuration
+       parameters.
+      </li>
+      <!-- -->
+      <li>
+       Domain lists can include file lookups, making it possible to
+       support a large number of local domains.
+      </li>
+      <!-- -->
+      <li>
+       The maximum size of message can be specified.
+      </li>
+      <!-- -->
+      <li>
+       Exim can handle a number of independent local domains on the
+       same machine; each domain can have its own alias files,
+       etc. These are commonly called <b>virtual domains</b>.
+      </li>
+      <!-- -->
+      <li>
+       Exim contains an optional built-in mail filtering
+       facility. This enables users to set up their own mail
+       filtering in a straightforward manner without the need to run
+       an external program. There can also be a system filter file
+       that applies to all messages.
+      </li>
+      <!-- -->
+      <li>
+       Periodic warnings are automatically sent to messages' senders
+       when delivery is delayed -- the time between warnings is
+       configurable.
+      </li>
+      <!-- -->
+      <li>
+       A queue run can be manually started to deliver just a
+       particular portion of the queue, or those messages with a
+       recipient whose address contains a given string.
+      </li>
+      <!-- -->
+      <li>
+       Exim can be configured to run as root all the time, except
+       when performing local deliveries, which it always does in a
+       separate process under an appropriate uid and
+       gid. Alternatively, it can be configured to run as root only
+       when needed; in particular, it need not run as root when
+       receiving incoming messages or when sending out messages over
+       SMTP.
+      </li>
+      <!-- -->
+    </ul>
+    <h2>Incoming SMTP</h2>
+    <ul>
+      <li>
+       SMTP calls from specific machines, optionally from specific
+       idents, can be locked out, and incoming SMTP messages from
+       specific senders can also be locked out.
+      </li>
+      <!-- -->
+      <li>
+       Messages on the queue can be `frozen' and `thawed' by the
+       administrator.
+      </li>
+      <!-- -->
+    </ul>
+    <h2>Outgoing SMTP</h2>
+    <ul>
+      <li>
+       Exim can perform multiple deliveries down the same SMTP
+       channel after deliveries to a host have been delayed.
+      </li>
+      <!-- -->
+      <li>
+       Exim can be configured to do local deliveries immediately but
+       to leave remote deliveries until the message is picked up by a
+       queue-runner process. This increases the likelihood of
+       multiple messages being sent down a single SMTP connection.
+      </li>
+      <!-- -->
+      <li>
+       When copies of a message have to be delivered to more than one
+       remote host, up to a configured maximum number of remote
+       deliveries can be done in parallel.
+      </li>
+      <!-- -->
+    </ul>
+    <h2>Local Deliveries</h2>
+    <ul>
+      <li>
+       Exim stats a user's home directory before looking for a
+       `<tt>.forward</tt>' file, in order to detect the case of a
+       missing NFS mount.
+      </li>
+      <!-- -->
+      <li>
+       There is support for multiple user mailboxes controlled by
+       prefixes or suffixes on the user name, either via the
+       <i>filter</i> mechanism or through multiple
+       `<tt>.forward</tt>' files.
+      </li>
+      <!-- -->
+    </ul>
+    <h2>Monitoring and Performance Tools</h2>
+    <ul>
+      <li>
+       The Exim Monitor is an optional extra; it displays information
+       about Exim's processing in an X window, and an administrator
+       can perform a number of control actions from the window
+       interface.
+      </li>
+      <!-- -->
+      <li>
+       There are a set of tools for summarising the queue, determining
+       what each exim process is currently doing, examining the
+       deliveries hints databases, and summarising the log files into
+       a concise report on activity.
+      </li>
+      <!-- -->
+    </ul>
+    <h2>SPAM/UCE/UBE Limitation Features</h2>
+    <ul>
+      <li>
+       Senders can be blocked using a variety of methods, including
+       the ability to apply a set of username or regular expression
+       patterns to incoming mail from particular (or all) domains.
+      </li>
+      <!-- -->
+      <li>
+       All addresses can be checked for validity during the SMTP
+       transaction thus allowing the elimination of mail from
+       non-existent domains.
+      </li>
+      <!-- -->
+      <li>
+       Relaying can be tightly controlled based on sending host,
+       network or sending/recipient domains.
+      </li>
+      <!-- -->
+      <li>
+       If all else fails the system filter can be used to deal with
+       messages based on arbitrary conditions that you can program in
+       (for example block mail with a particular <tt>X-Mailer:</tt>
+       header.
+      </li>
+    </ul>
+    <h2>Limitations</h2>
+    <ul>
+      <li>
+       Exim is written in ANSI C. This should not be much of a
+       limitation these days.  However, to help with systems that
+       lack a true ANSI C library, Exim avoids making any use of the
+       value returned by the `<tt>sprintf()</tt>' function, which is
+       one of the main incompatibilities. It has its own version of
+       `<tt>strerror()</tt>' for use with <b>SunOS4</b> and any other
+       system that lacks this function, and a macro can be defined to
+       turn `<tt>memmove()</tt>' into `<tt>bcopy()</tt>' if
+       necessary.
+      </li>
+      <!-- -->
+      <li>
+         Exim uses file names that are longer than 14 characters.
+       </li>
+      <!-- -->
+      <li>
+       Exim is intended for use as an Internet mailer, and therefore
+       handles addresses in RFC 822 domain format only. It cannot
+       handle <i>bang paths</i>, though simple two-component bang
+       paths can be converted by a straightforward rewriting
+       configuration.
+      </li>
+      <!-- -->
+      <li>
+       Exim insists that every address it handles has a domain
+       attached. For incoming local messages, domainless addresses
+       are automatically qualified with a configured domain
+       value. Configuration options specify from which remote systems
+       unqualified addresses are acceptable.
+      </li>
+      <!-- -->
+      <li>
+       The only external transport currently implemented is an SMTP
+       transport over a TCP/IP network (using sockets), suitable for
+       machines on the Internet. However, a pipe transport is
+       available, and there are facilities for writing messages to
+       files in `batched SMTP' format; this can be used to send
+       messages to some other transport mechanism. Batched SMTP input
+       is also catered for.
+      </li>
+      <!-- -->
+    </ul>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 13:21:52 BST 1997 -->
+    <h4>$Id: intro.html,v 1.4 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/maillist.html b/maillist.html
new file mode 100644 (file)
index 0000000..b7b443d
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Mailing lists for exim</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Mailing lists for exim</h1>
+
+    <p>There are two mailing lists for users of Exim.  Signing up for
+      these is via a web form.  The two lists are:-</p>
+    <dl>
+      <dt><b><a
+           href="http://www.exim.org/mailman/listinfo/exim-announce">exim-announce</a></b></dt>
+      <dd>which is a low volume moderated list consisting of
+       anouncements only of things of interest to exim users
+       (typically new releases).  There is an <a href="http://www.exim.org/pipermail/exim-announce/">archive</a> of messages
+       since July 1999.</dd>
+      <dt><b><a
+           href="http://www.exim.org/mailman/listinfo/exim-users">exim-users</a></b></dt>
+      <dd>which is a discussion list about exim covering use and
+       development of the software.  This also has an <a href="http://www.exim.org/pipermail/exim-users/">archive</a> dating
+       back to 1996.  Please have the courtesy to check the list
+       before posting basic queries.</dd>
+    </dl>
+      <p>There is also an indexed archive at
+        <A target="_parent" HREF="http://www.egroups.com/list/exim-users/">
+       <tt>http://www.egroups.com/list/exim-users/</tt></a></p>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: maillist.html,v 1.4 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/mirrors.html b/mirrors.html
new file mode 100644 (file)
index 0000000..93846c5
--- /dev/null
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Availability of exim</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Availability of exim</h1> 
+
+    <p>Exim is available from a number of FTP sites.  It may also be
+    supplied on some GNU CDs or with other software distributions.</p>
+
+    <p>The current mirror sites are:-</p>
+    <h2>Primary Site</h2>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/">
+           ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/
+         </a>
+       </b>
+      </dt>
+      <dd>which is in Cambridge, England.</dd>
+    </dl>
+    <hr>
+    <h2>Mirrors</h2>
+    <ul>
+      <li><a href="#AUSTRIA"><b>Austria</b></a></li>
+      <li><a href="#CANADA"><b>Canada</b></a></li>
+      <li><a href="#DENMARK"><b>Denmark</b></a></li>
+      <li><a href="#FINLAND"><b>Finland</b></a></li>
+      <li><a href="#GERMANY"><b>Germany</b></a></li>
+      <li><a href="#GREECE"><b>Greece</b></a></li>
+      <li><a href="#IRELAND"><b>Ireland</b></a></li>
+      <li><a href="#JAPAN"><b>Japan</b></a></li>
+      <li><a href="#NETHERLANDS"><b>Netherlands</b></a></li>
+      <li><a href="#NORWAY"><b>Norway</b></a></li>
+      <li><a href="#POLAND"><b>Poland</b></a></li>
+      <li><a href="#SOUTHAFRICA"><b>South Africa</b></a></li>
+      <li><a href="#SWITZERLAND"><b>Switzerland</b></a></li>
+      <li><a href="#TAIWAN"><b>TAIWAN</b></a></li>
+      <li><a href="#UK"><b>UK</b></a></li>
+      <li><a href="#USA"><b>USA</b></a></li>
+    </ul>
+    <hr>
+    <a name="AUSTRIA"><h3>Austria</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://gd.tuwien.ac.at/infosys/mail/exim/">
+           http://gd.tuwien.ac.at/infosys/mail/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://gd.tuwien.ac.at/infosys/mail/exim/">
+           ftp://gd.tuwien.ac.at/infosys/mail/exim/</a>
+       </b>
+      </dt>
+      <dd>Updated daily</dd>
+    </dl>
+    <a name="CANADA"><h3>Canada</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://mirror.direct.ca/exim" target="_top">
+           http://mirror.direct.ca/exim</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://mirror.direct.ca/pub/exim">
+           ftp://mirror.direct.ca/pub/exim</a>
+       </b>
+      </dt>
+      <dd>Multiple updates daily</dd>
+    </dl>
+    <a name="DENMARK"><h3>Denmark</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://sunsite.auc.dk/pub/mail/exim/">
+           http://sunsite.auc.dk/pub/mail/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.auc.dk/pub/mail/exim/">
+           ftp://sunsite.auc.dk/pub/mail/exim/</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="FINLAND"><h3>FINLAND</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://linja.net/exim/">
+           http://linja.net/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://ftp.linja.net/pub/mirrors/exim/">
+           ftp://ftp.linja.net/pub/mirrors/exim/</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="GERMANY"><h3>Germany</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://ftp.fu-berlin.de/unix/mail/exim/">
+           ftp://ftp.fu-berlin.de/unix/mail/exim/</a>
+       </b>
+      </dt>
+      <dd>Updated twice a day</dd>
+      <dt>
+       <b>
+         <a href="ftp://ftp.tin.org/pub/mail/exim">
+           ftp://ftp.tin.org/pub/mail/exim</a>
+       </b>
+      </dt>
+      <dd>Updated four times a day</dd>
+      <dt>
+       <b>
+         <a href="ftp://ftp.gigabell.net/pub/exim">
+           ftp://ftp.gigabell.net/pub/exim</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="GREECE"><h3>Greece</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://sunsite.ics.forth.gr/sunsite/net_tools/exim">
+           http://sunsite.ics.forth.gr/sunsite/net_tools/exim</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.ics.forth.gr/sunsite/net_tools/exim">
+           ftp://sunsite.ics.forth.gr/sunsite/net_tools/exim</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="IRELAND"><h3>Ireland</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://ftp.esat.net/pub/networking/mail/mta/exim/">
+           http://ftp.esat.net/pub/networking/mail/mta/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://ftp.esat.net/pub/networking/mail/mta/exim/">
+           ftp://ftp.esat.net/pub/networking/mail/mta/exim/</a>
+       </b>
+      </dt>
+      <dd>Mirrored twice daily</dd>
+    </dl>
+    <a name="JAPAN"><h3>Japan</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://nagoya.linux.or.jp/mirror/exim/">
+           ftp://nagoya.linux.or.jp/mirror/exim/</a>
+       </b>
+      </dt>
+      <dd>Mirrored nightly at ~6:30 am JST</dd>
+    </dl>
+    <a name="NETHERLANDS"><h3>Netherlands</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://exim.quiddity.nl/">
+           http://exim.quiddity.nl/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://ftp.quiddity.nl/pub/linux/exim">
+           ftp://ftp.quiddity.nl/pub/linux/exim</a>
+       </b>
+      </dt>
+      <dd>rsync'ed every 6 hours</dd>
+      <dt>
+       <b>
+         <a href="ftp://ftp.nl.uu.net/pub/unix/mail/exim/">
+           ftp://ftp.nl.uu.net/pub/unix/mail/exim/</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="NORWAY"><h3>Norway</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.uio.no/pub/mail/exim/">
+           ftp://sunsite.uio.no/mail/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="http://www.no.exim.org/">
+           http://www.no.exim.org/</a>
+       </b>
+      </dt>
+      <dd>rsync'ed twice daily (at 08 and 18 local time)</dd>
+    </dl>
+    <a name="POLAND"><h3>Poland</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://sunsite.icm.edu.pl/pub/unix/mail/exim/">
+           http://sunsite.icm.edu.pl/pub/unix/mail/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.icm.edu.pl/pub/unix/mail/exim/">
+           ftp://sunsite.icm.edu.pl/pub/unix/mail/exim/</a>
+       </b>
+      </dt>
+    </dl>
+    <a name="SOUTHAFRICA"><h3>South Africa</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://ftp.is.co.za/networking/mail/mta/exim/">
+           ftp://ftp.is.co.za/networking/mail/mta/exim/</a>
+       </b>
+      </dt>
+      <dd>
+       Mirrored nightly at 03:40 GMT
+      </dd>
+    </dl>
+    <a name="SWITZERLAND"><h3>Switzerland</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.cnlab-switch.ch/mirror/exim/">
+           ftp://sunsite.cnlab-switch.ch/mirror/exim/</a>
+       </b>
+      </dt>
+      <dd>
+       Updated daily.
+      </dd>
+    </dl>
+    <a name="TAIWAN"><h3>Taiwan</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="http://www.tw.exim.org">
+           http://www.tw.exim.org</a>
+       </b>
+      </dt>
+      <dd>
+       Updated daily.
+      </dd>
+    </dl>
+    <a name="UK"><h3>UK Mirrors</h3></a>
+    <dl>
+      <!-- one of (dd dt) -->
+      <dt>
+       <b>
+         <a href="http://www.exim.org/ftp/">
+           http://www.exim.org/ftp/
+         </a>
+      </dt>
+      <dt>
+         <a href="ftp://ftp.exim.org/pub/exim/">
+           ftp://ftp.exim.org/pub/exim/
+         </a>
+      </dt>
+      <dt>
+         <a href="rsync://ftp.exim.org/ftp">
+         rsync://ftp.exim.org/ftp
+         </a>
+       </b>
+      </dt>
+      <dd>Good international bandwidth.
+       Updated 4 times daily.  Rsync is available of ftp and www areas
+       as "ftp.exim.org::ftp" and "ftp.exim.org::www" respectively.</dd>
+      <dt>
+       <b>
+         <a href="ftp://sunsite.doc.ic.ac.uk/packages/exim/">
+         ftp://sunsite.doc.ic.ac.uk/packages/exim/</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         <a href="http://sunsite.doc.ic.ac.uk/packages/exim/">
+         http://sunsite.doc.ic.ac.uk/packages/exim/</a>
+       </b>
+      </dt>
+      <dd>
+       and also via http, gopher, FSP, telnet, NFS, Lanmanger over IP...
+      </dd>
+      <dt>
+       <b>
+         <a href="ftp://ftp.demon.co.uk/pub/mirrors/exim/">
+         ftp://ftp.demon.co.uk/pub/mirrors/exim/</a>
+       </b>
+      </dt>
+      <dd>
+       Mirrored nightly around 2am.
+      </dd>
+      <dt>
+       <b>
+         <a href="ftp://ftp.fido.net/pub/mirrors/exim">
+         ftp://ftp.fido.net/pub/mirrors/exim</a>
+       </b>
+      </dt>
+      <dt>
+       <b>
+         \\ftp.fido.net\public\mirrors\exim</b>
+       (samba export)
+      </dt>
+      <dd>
+       Mirrored nightly
+      </dd>
+    </dl>
+    <a name="USA"><h3>USA</h3></a>
+    <dl>
+      <dt>
+       <b>
+         <a href="ftp://ftp.quite.net/pub/exim/">
+           ftp://ftp.quite.net/pub/exim/</a>
+       </b>
+      </dt>
+      <dd>
+       Mirrored nightly at 2:11a.m. PST
+      </dd>
+      <dt>
+       <b>
+         <a href="http://www.us.exim.org/ftp/">
+           http://www.us.exim.org/ftp/</a>
+       </b>
+      </dt>
+      <dd>
+       Updated twice per day.
+      </dd>
+    </dl>
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: mirrors.html,v 1.10 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/overview.html b/overview.html
new file mode 100644 (file)
index 0000000..e3fbefc
--- /dev/null
@@ -0,0 +1,972 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>EXIM OVERVIEW</TITLE>
+<META NAME="generator" CONTENT="txt2html v1.21">
+</HEAD>
+<BODY bgcolor="#ccccff">
+<H1>EXIM OVERVIEW</H1>
+
+
+<P>
+Date: 29 November 1996
+
+<P>
+Exim is a mail transport agent (MTA) developed at the University of Cambridge
+for use on Unix systems connected to the Internet. It is freely available
+under the terms of the GNU General Public Licence. In style it is similar to
+Smail 3, but its facilities are more extensive, and in particular it has some
+defences against mail bombs and unsolicited junk mail, in the form of options
+for refusing messages from particular hosts, networks, or senders.
+
+<P>
+Exim is in production use on a number of sites that move tens of thousands of
+messages per day. This document contains an overview description of the way
+Exim works, with a certain amount of simplification to keep it fairly short.
+Please address any enquiries about Exim to Philip Hazel:
+
+<P>
+Email:   &lt;ph10@cus.cam.ac.uk&gt;<BR>
+Phone:   +44 1223 334714<BR>
+Fax:     +44 1223 334679
+
+<P>
+University of Cambridge<BR>
+Computer Laboratory<BR>
+Pembroke Street<BR>
+Cambridge CB2 3QG<BR>
+United Kingdom
+
+<P>
+This document is copyright (c) University of Cambridge 1996, but copying
+permission is granted to all.
+<HR>
+
+
+<P>
+    "If I have seen further it is by standing on the shoulders of giants."
+<BR>
+                                                                (Isaac Newton)
+<HR>
+
+
+<H2> Background</H2>
+
+<P>
+Exim owes a great deal to Smail 3 and its author, Ron Karr. Without the
+experience of running and working on the Smail 3 code, I could never have
+contemplated starting to write a new mailer. Many of the ideas and user
+interfaces are taken from Smail 3, though the actual code of Exim is entirely
+new.
+
+<P>
+My intention was to write a mailer that had more functionality than Smail 3,
+but which retained the simple lightweight approach, as this seemed to me to be
+all that was needed for systems directly connected to the Internet, where most
+messages are delivered almost immediately.
+
+
+<A NAME="0"><H2>2. Availability</H2></A>
+
+<P>
+The current distribution of Exim is available from
+
+<P>
+ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/exim-n.nn.tar.gz
+
+<P>
+where n.nn is the version number. The distribution contains an ASCII copy of
+the documentation; other formats are available from
+
+<P>
+ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/exim-postscript-n.nn.tar.gz
+ftp://ftp.cus.cam.ac.uk/pub/software/programs/exim/exim-texinfo-n.nn.tar.gz
+
+<P>
+The following operating systems are currently supported: AIX, BSDI, FreeBSD,
+HP-UX, IRIX, Linux, NetBSD, DEC OSF1 (aka Digital UNIX), SCO, SunOS4, SunOS5,
+and Ultrix.
+
+
+<A NAME="1"><H2>3. Limitations</H2></A>
+
+<P>
+For the benefit of those reading this overview to see whether Exim is of
+interest to them, its limitations are listed first.
+
+<UL>
+  <LI> Exim is written in ANSI C. This should not be much of a limitation these
+     days. However, to help with systems that lack a true ANSI C library, Exim
+     avoids making any use of the value returned by the sprintf() function,
+     which is one of the main incompatibilities. It has its own version of
+     strerror() for use with SunOS4 and any other system that lacks this
+     function, and a macro can be defined to turn memmove() into bcopy() if
+     necessary.
+
+  <LI> Exim uses file names that are longer than 14 characters.
+
+  <LI> Exim is intended for use as an Internet mailer, and therefore handles
+     addresses in RFC 822 domain format only. It cannot handle 'bang paths',
+     though simple two-component bang paths can be converted by a straightforward 
+     rewriting configuration.
+
+  <LI> Exim insists that every address it handles has a domain attached. For
+     incoming local messages, domainless addresses are automatically qualified
+     with a configured domain value. Configuration options specify from which
+     remote systems unqualified addresses are acceptable.
+
+  <LI> The only external transport currently implemented is an SMTP transport
+     over a TCP/IP network (using sockets), suitable for machines on the
+     Internet. However, a pipe transport is available, and there are facilities 
+     for writing messages to files in 'batched SMTP' format; this can be
+     used to send messages to some other transport mechanism. Batched SMTP
+     input is also catered for.
+</UL>
+
+
+<A NAME="2"><H2>4. Main features</H2></A>
+
+<P>
+Exim follows the same general approach of decentralised control that Smail 3
+does. There is no central process doing overall management of mail delivery.
+However, unlike Smail, the independent delivery processes share data in the
+form of 'hints', which makes delivery more efficient in some cases. The hints
+are kept in a number of DBM files. If any of these files are lost, the only
+effect is to change the pattern of delivery attempts and retries.
+
+<P>
+Here is a summary of Exim's main features. More details are given in the
+sections which follow.
+
+<UL>
+  <LI> Many configuration options can be given as expansion strings, and as
+     these can include file lookups, much of Exim's operation can be made
+     table-driven if desired. For example, it is possible to do local delivery
+     on a machine on which the users do not have accounts.
+
+  <LI> Regular expressions are available in a number of configuration
+     parameters.
+
+  <LI> Domain lists can include file lookups, making it possible to support a
+     large number of local domains.
+
+  <LI> Exim has flexible retry algorithms, applicable to mail routing as well as
+     to delivery.
+
+  <LI> Exim contains header and envelope rewriting facilities.
+
+  <LI> Unqualified addresses are accepted only from specified hosts or networks.
+
+  <LI> Exim can perform multiple deliveries down the same SMTP channel after
+     deliveries to a host have been delayed.
+
+  <LI> Exim can be configured to do local deliveries immediately but to leave
+     remote deliveries until the message is picked up by a queue-runner
+     process. This increases the likelihood of multiple messages being sent
+     down a single SMTP connection.
+
+  <LI> When copies of a message have to be delivered to more than one remote
+     host, up to a configured maximum number of remote deliveries can be done
+     in parallel.
+
+  <LI> Exim supports optional checking of incoming return path (sender) and
+     receiver addresses as they are received by SMTP.
+
+  <LI> SMTP calls from specific machines, optionally from specific idents, can
+     be locked out, and incoming SMTP messages from specific senders can also
+     be locked out.
+
+  <LI> It is possible to control which hosts may use the Exim host as a relay
+     for onward transmission of mail; the control can be made to depend on the
+     address domain.
+
+  <LI> Messages on the queue can be 'frozen' and 'thawed' by the administrator.
+
+  <LI> The maximum size of message can be specified.
+
+  <LI> Exim can handle a number of independent local domains on the same
+     machine; each domain can have its own alias files, etc. These are
+     commonly called "virtual domains".
+
+  <LI> Exim stats a user's home directory before looking for a .forward file, in
+     order to detect the case of a missing NFS mount.
+
+  <LI> Exim contains an optional built-in mail filtering facility. This enables
+     users to set up their own mail filtering in a straightforward manner
+     without the need to run an external program. There can also be a system
+     filter file that applies to all messages.
+
+  <LI> There is support for multiple user mailboxes controlled by prefixes or
+     suffixes on the user name, either via the filter mechanism or through
+     multiple .forward files.
+
+  <LI> Periodic warnings are automatically sent to messages' senders when
+     delivery is delayed - the time between warnings is configurable.
+
+  <LI> A queue run can be manually started to deliver just a particular portion
+     of the queue, or those messages with a recipient whose address contains a
+     given string.
+
+  <LI> Exim can be configured to run as root all the time, except when
+     performing local deliveries, which it always does in a separate process
+     under an appropriate uid and gid. Alternatively, it can be configured to
+     run as root only when needed; in particular, it need not run as root when
+     receiving incoming messages or when sending out messages over SMTP.
+
+  <LI> I have tried to make the wording of delivery failure messages clearer and
+     simpler, for the benefit of those less-experienced people who are now
+     using email.
+
+  <LI> The Exim Monitor is an optional extra; it displays information about
+     Exim's processing in an X window, and an administrator can perform a
+     number of control actions from the window interface.
+</UL>
+
+
+<A NAME="3"><H2>5. Performance</H2></A>
+
+<P>
+Although I did not specifically set out to write a high-performance MTA, Exim
+does seem to be fairly efficient. The busiest site I know of is an ISP that
+handles over 40,000 messages a day on a Sun Ultra box. Our central mail
+service machine in Cambridge (a SPARCstation-20) handles over 30,000 messages
+on a typical day, the volume being around 130 megabytes on the day I looked.
+The largest number of messages delivered in any one hour was 2753.
+
+<P>
+A system of a different character is sunsite.doc.ic.ac.uk, a SPARCserver 1000
+system with 8 cpus, which is unusual in that virtually all mail deliveries are
+remote and relatively large, because it is a data archive that can deliver
+copies of its holdings via an email interface. On a fairly busy day 14,014
+messages were received from 231 different hosts and 12,534 deliveries were
+made to 468 different hosts. The total amount of outgoing mail was 431
+megabytes. The largest number of deliveries in any one hour was 787.
+
+
+<A NAME="4"><H2>6. Interface</H2></A>
+
+<P>
+Like many MTAs, Exim has adopted the Sendmail interface so that it can be a
+straight replacement for /usr/lib/sendmail. All the relevant Sendmail options
+are implemented. There are also some additional options that are compatible
+with Smail 3, and some further options that are new to Exim.
+
+<P>
+The runtime configuration interface is a single file which is divided into a
+number of sections. The entries in this file consist of keywords and values,
+in the style of Smail 3 configuration files.
+
+<P>
+Control of messages on the queue can be done via certain privileged command
+line options. There is also an optional monitor program called eximon, which
+displays current information in an X window and contains interfaces to the
+command line options.
+
+
+<A NAME="5"><H2>7. Method of operation</H2></A>
+
+<P>
+When Exim receives a message, it writes two files in its spool directory. The
+first contains the envelope information, the current status of the message,
+and the headers, while the second contains the body of the message. The status
+of the message includes a complete list of recipients and a list of those that
+have already received the message. The header file gets updated during the
+course of delivery if necessary.
+
+<P>
+A message remains in the spool directory until it is completely delivered to
+its recipients or to an error address, or until it is deleted by an
+administrator or by the user who originally created it. In cases when delivery
+cannot proceed - for example, when a message can neither be delivered to its
+recipients nor returned to its sender, the message is marked 'frozen' on the
+spool, and no more deliveries are attempted. The administrator can thaw such
+messages when the problem has been corrected, and can also freeze individual
+messages by hand if necessary.
+
+<P>
+As delivery proceeds, Exim writes timestamped information about each address
+to a per-message log file; this includes any delivery error messages. This log
+is solely for the benefit of the administrator. All the information Exim
+itself needs for delivery is kept in the header spool file. The message log
+file is deleted with the spool files. If a message is delayed for more than a
+configured time, a warning message is sent to the sender. This is repeated
+whenever the same time elapses again without delivery being complete.
+
+<P>
+The main delivery processing elements of Exim are called directors, routers,
+and transports. Code for a number of these is provided, and compile-time
+options specify which ones are actually included in the binary. Directors
+handle addresses that include one of the local domains, routers handle remote
+addresses, and transports do actual deliveries.
+
+<P>
+When a message is to be delivered, the sequence of events is roughly as
+follows:
+
+<UL>
+  <LI> If there is a system filter file, it is obeyed. This can check on the
+     contents of the message and its headers, and cause delivery to be
+     abandoned or directed to alternative or additional addresses.
+
+  <LI> Each address is parsed and a check is made to see if it is local or not,
+     by comparing the domain with the list of local domains, which can be
+     wildcarded, or even held in a file if there are a large number of them.
+
+  <LI> If an address is local, it is passed to each configured director in turn
+     until one is able to handle it. If none can, the address is failed.
+     Directors can be targeted at particular local domains, so several local
+     domains can be processed independently of each other.
+
+  <LI> A director that accepts an address may set up a local or a remote
+     transport for it, or it may generate one or more new addresses (typically
+     from alias or forward files). New addresses are fed back into this
+     process from the top, but in order to avoid loops, a director will ignore
+     any address which has an identically-named ancestor that was processed by
+     itself.
+
+  <LI> If an address is not local, it is passed to each router in turn until one
+     is able to handle it. If none can, the address is failed.
+
+  <LI> A router that accepts an address may set up a transport for it, or may
+     pass an altered address to subsequent routers, or it may discover that
+     the address is a local address after all. This typically happens when an
+     partial domain name is used and (for example) the DNS lookup is
+     configured to try to extend such names. In this case, the address is
+     passed back to the directors.
+
+  <LI> Routers normally set up remote transports for messages that are to be
+     delivered to other machines. However, a router can pass a message to a
+     local transport, and by this means messages can be routed to other
+     transport mechanisms.
+
+  <LI> When all the directing and routing is done, addresses that have been
+     successfully handled are passed to their assigned transports. Local
+     transports handle only one address at a time, but remote ones can handle
+     more than one. Each local transport runs in a separate process under a
+     non-privileged uid.
+
+  <LI> If there were any errors, a message is returned to an appropriate address
+     (the sender in the common case).
+
+  <LI> If one or more addresses suffered a temporary failure, the message is
+     left on the queue, to be tried again later. Otherwise the spool files and
+     message log are deleted.
+</UL>
+
+
+<A NAME="6"><H2>8. Mail filtering</H2></A>
+
+<P>
+Exim can be configured to allow users to set up filter files as an alternative
+to the traditional .forward files. A filter file can test various characteristics 
+of a message, including the contents of the headers and the start of
+the body, and direct delivery to specified addresses, files, or pipes
+according to what it finds. The system-wide filter file uses the same control
+syntax.
+
+
+<A NAME="7"><H2>9. Directors</H2></A>
+
+<P>
+The existing directors are listed below. I use the RFC 822 term local-part to
+mean that portion of an address that comes before the @ character.
+
+<UL>
+  <LI> aliasfile: This director handles local-part expansion via a traditional
+     alias file. The name of the file is obtained by string expansion, and may
+     therefore depend on the local-part or the domain. Generated pipe and file
+     addresses can be (independently) locked out.
+
+</UL>
+<P>
+     The aliasfile director can also be used to test a list of local parts and
+     direct any messages for them to a specific transport. In this case the
+     data associated with the local part in the file is not used for address
+     expansion, but is available for other purposes. For example, files
+     containing records of the form
+
+<P>
+       foo: uid=1234 gid=5678 mailbox=/home_1/foo/inbox
+
+<P>
+     could be used on a system that did local deliveries without consulting
+     its passwd file. The aliasfile director could use the file to verify that
+     the local part was valid, and then the appendfile transport could use it
+     to get a uid, gid, and mailbox for the delivery.
+
+<UL>
+  <LI> forwardfile: This director handles local-part expansion via a traditional
+     forward file or, if so configured, by a user's filter file. The name of
+     the file is obtained by string expansion, and may therefore depend on the
+     local-part or the domain, though if it is not an absolute path it is
+     automatically assumed to be in the home directory of the user whose login
+     name is the local-part. Mailing lists can be handled by file names of the
+     form
+
+</UL>
+<P>
+       /some/list/directory/${local_part}
+
+<P>
+     and it is possible to specify an error address for each list that depends
+     on the list name. Generated pipe and file addresses can be (independently) 
+     locked out.
+
+<UL>
+  <LI> localuser: This director matches the local-part of an address to a user
+     of the machine. It can also be configured to do a pattern match on the
+     user's home directory name. This makes it possible to partition the set
+     of local users according to their home directories.
+
+  <LI> smartuser: This director matches any local-part. It can be used to pass
+     messages for unknown users to a script that generates a helpful error
+     message, or it can be used to send such messages to another host,
+     optionally changing the envelope address in the process.
+
+</UL>
+<P>
+The configuration file determines which directors are actually used, and in
+which order. It is possible to use the same director more than once, with
+different options.
+
+<P>
+The addresses a director handles can be constrained in the following ways:
+
+<UL>
+  <LI> A specific set of local domains may be specified, in which case the
+     director is called only for addresses that contain one of those domains.
+
+  <LI> A specific set of local parts may be specified, in which case the
+     director is called only for addresses that contain one of those local
+     parts. This could be used, for example, to handle 'postmaster' independently 
+     of the particular local domain.
+
+  <LI> A director may be configured to handle local-parts that start with a
+     certain prefix and/or end with a certain suffix. For example, a director
+     can be set up to handle local-parts of the form xxxx-request only.
+
+  <LI> A flag controls whether a director is called when an address is being
+     verified, as opposed to being directed for delivery.
+
+</UL>
+<P>
+In addition, certain files can be required to exist or not exist for a given
+director to be run.
+
+
+<A NAME="8"><H2>10. Routers</H2></A>
+
+<P>
+The existing routers are:
+
+<UL>
+  <LI> domainlist: This director searches a list of domains for the one it is
+     trying to route. The list may either be a string in the configuration
+     file, possibly including wild cards or regular expressions, or it may be
+     in a file, or both may be provided. In the case of a file, keys of the
+     form *.foo.bar.com can be used for simple wildcarding.
+
+</UL>
+<P>
+     If the domain is found, its entry can either specify a single replacement
+     domain name that is passed on to subsequent routers, or it can specify a
+     list of domain names that are looked up by this router. The lookup can be
+     done by the gethostbyname function, or by DNS lookup, and in the latter
+     case it is configurable whether MX or A records or both are used. As well
+     as providing explicit routing for certain domains, the domainlist router
+     can be used to set up gateways for partial domains (e.g. for *.uucp) and
+     it can also be used as a 'smarthost' router by using the all-inclusive
+     wild card.
+
+<UL>
+  <LI> lookuphost: This router looks up domain names either by calling the
+     gethostbyname function, or by using the DNS. In the latter case, it can
+     be configured to use the DNS resolver options for qualifying singlecomponent 
+     names and for searching parent domains. It is also possible to
+     specify explicit text strings for widening domains that are not found
+     initially. It is possible to insist on the presence of MX records for
+     certain sets of domains. A configuration option controls whether the
+     message's headers are rewritten when a domain name is changed.
+
+  <LI> queryprogram: This router passes the address to a script that runs in a
+     separate process under an unprivileged uid and gid. The script returns a
+     line of text specifying whether it matched the domain or not. If it did
+     match, it may specify a transport name, or it may specify that the
+     transport specified for the router is used. The script may also send back
+     a new domain name to replace the current one, and specify a method of
+     looking this name up (gethostbyname, DNS, or pass to next router).
+
+</UL>
+<P>
+The configuration file determines which routers are actually used, and in
+which order. It is possible to use the same router more than once, with
+different options.
+
+<P>
+Like directors, routers can be constrained to handle only certain domains or
+certain local parts (though I haven't seen a good use for that yet). If a
+router times out, either the delivery can be deferred, or the address can be
+passed on to the next router.
+
+<P>
+A flag controls whether a router is called when an address is being verified,
+as opposed to being routed for delivery.
+
+
+<A NAME="9"><H2>11. Transports</H2></A>
+
+<P>
+Local and remote transports are handled differently. A local transport is
+always run in a separate process with an appropriate real uid and gid. Their
+values can be specified in the transport's configuration, or passed over from
+the director that handled the address. The existing transports are:
+
+<UL>
+  <LI> appendfile: This local transport appends the message to a file whose name
+     is specified as a string containing variable expansions. The current
+     local-part can be inserted via the expansion mechanism, and file names
+     such as
+
+</UL>
+<P>
+     /home/${local_part}/inbox<BR>
+     /var/mail/${local_part}
+
+<P>
+     are typical examples. However, it is possible to look up each individual
+     user's inbox name in a file, should that be required.
+
+<P>
+     Exclusive access to the file is ensured by using the traditional mailbox
+     locking strategy of creating a lock file. The lock creation process uses
+     a 'hitching post' algorithm (similar to that used by Pine) which is
+     robust when the mailbox file is NFS-mounted. The file is also locked
+     using the lockf function.
+
+<P>
+     Options on this transport allow for the insertion of a prefix line (e.g.
+     'From xxx...') and suffix line, special processing of message lines
+     starting with 'From', and the addition of Return-path, Delivery-date, and
+     Envelope-to headers. If the mailbox file is not a regular file, or does
+     not have the correct owner, group, or permissions, no delivery takes
+     place; the address is deferred and the postmaster is informed, except
+     that, if the file's permissions are greater than those required, Exim
+     reduces the permissions and carries on. There are additional checks to
+     reduce the possibility of security exposures caused by race conditions.
+
+<UL>
+  <LI> pipe: This local transport passes the message via a pipe to a specified
+     command (program or script) which is run in a separate process under a
+     given uid and gid. Various parameters of the message are passed as
+     environment variables, and there are the same options as for appendfile
+     for controlling the form of the message.
+
+</UL>
+<P>
+     The returned status of the command may be used to determine success or
+     failure, or it can be ignored. A configuration option specifies whether
+     any standard output generated by the transport is to be returned to the
+     sender. If this is set and output is actually generated, the delivery is
+     deemed to have failed, whatever the returned status of the command. The
+     maximum amount of output generated by the command can be controlled, and
+     a timeout may be set for it.
+
+<UL>
+  <LI> smtp: This remote transport delivers a message using SMTP over TCP/IP.
+     All addresses in the message that route to the same set of hosts, and
+     have the same errors address (return path), are normally sent in a single
+     transaction. An explicit list of hosts can be set for the transport, or a
+     host list may be attached to an address by one of the routers. If all the
+     hosts are temporarily unable to accept the message, it is delivered to
+     one of a list of fallback hosts, if configured.
+</UL>
+
+
+<A NAME="10"><H2>12. Exim logs</H2></A>
+
+<P>
+Exim write four different log files:
+
+<UL>
+  <LI> The main log records the arrival of each message and the result of each
+     delivery attempt in a single line in each case. The format is as compact
+     as possible, in an attempt to keep down the size of log files. A number
+     of other events are also recorded on the main log.
+
+  <LI> The reject log records information from messages that are rejected
+     because their return paths are invalid (a configurable option). The
+     headers are written to this log, following a copy of the one-line message
+     that is also written to the main log. Other types of message rejection
+     also cause writing to this log.
+
+  <LI> The panic log is written when Exim suffers a disaster and has to bomb
+     out.
+
+  <LI> On systems that support signal handlers that restart a system call on
+     exit, Exim reacts to a USR1 signal by writing a line describing its
+     current activity to the process log. This makes it possible to find out
+     what each exim process on a machine is currently doing.
+
+</UL>
+<P>
+A utility script for renaming and compressing the main and reject logs each
+night is provided. There are also scripts for extracting statistics from log
+files and for searching log files for the entries for messages that match a
+given pattern. For example, one can pull out all entries relating to messages
+for a given local part.
+
+
+<A NAME="11"><H2>13. Exim databases</H2></A>
+
+<P>
+Exim maintains a number of databases in DBM files to help it perform efficient
+mail delivery. In effect, the files contain hints, and if they are lost it is
+not a disaster - Exim's performance just suffers a bit. The three databases
+currently used are:
+
+<UL>
+  <LI> retry: This contains information about each failing remote host and
+     temporary failing local delivery - when the first failure was detected,
+     when the delivery (or directing or routing) was last tried, and when it
+     should next be tried. More details about retry algorithms are given
+     below.
+
+  <LI> wait-smtp: This contains information about messages that are waiting for
+     particular hosts after an SMTP delivery failure (see the next section).
+
+  <LI> reject: This contains information about SMTP message rejections (see
+     below).
+
+</UL>
+<P>
+There is a utility program that lists the contents of one of these databases,
+and another that allows manual modifications to be applied in some cases.
+Database records are timestamped, and there is a utility that removes records
+that are older than a given period, and also cleans up wait-smtp records
+containing references to messages that no longer exist. Running this daily or
+weekly should be sufficient to keep the files reasonably tidy.
+
+
+<A NAME="12"><H2>14. SMTP batching</H2></A>
+
+<P>
+When an SMTP delivery attempt fails, causing the message to be deferred till
+later, Exim updates a DBM database that contains records keyed by host name
+plus IP address. Each record holds a list of messages that are waiting for
+that host and address.
+
+<P>
+When an SMTP delivery succeeds, Exim consults the database to see if there are
+any other messages waiting for the same host and address. If it finds any, it
+creates a new Exim process and passes it the open SMTP channel and a message
+identification. The new process then delivers the waiting message down the
+existing channel and may in turn cause the creation of yet another process.
+Any other waiting addresses in the message are skipped. The maximum number of
+messages sent down one connection is configurable.
+
+<P>
+This scheme achieves some SMTP efficiency when a number of messages have been
+queued up for a given host, without the overhead of a heavyweight queueing
+apparatus.
+
+
+<A NAME="13"><H2>15. Retries</H2></A>
+
+<P>
+When a message cannot immediately be directed, routed, or delivered, it
+remains on the queue and another delivery attempt occurs at a later time.
+While failures to deliver to remote hosts are the most common cause of this,
+it is also possible for a message to be deferred as a result of temporary
+local delivery failure, or following directing or routing. A local delivery
+can fail if the user is over quota, while directing can be delayed if a user's
+home directory is not available (e.g. missing NFS mount), and therefore the
+existence of a .forward file cannot be tested. Routing can be delayed by DNS
+timeouts.
+
+<P>
+Exim can be given a set of rules which specify how often to retry deferred
+addresses, and when to give up. These rules apply to directing and routing as
+well as to transporting, and are keyed by (wildcarded) domain name or, for
+local users, by local-part and domain name, either of which can be wildcarded.
+
+<P>
+Each rule is actually a sequential list of subrules, which are applied
+successively as time passes. At present there are two kinds of subrule: fixed
+interval, and geometrically increasing interval. For example, it is possible
+to specify a rule such as 'retry every 15 minutes for 2 hours; then increase
+the interval between retries by a factor of 1.5 each time until 8 hours have
+passed; then retry every 8 hours until 4 days have passed; then give up'. The
+times are measured from when the address first failed, so, for example, if a
+host has been down for 2 days, new messages will immediately go on to the
+8-hour retry schedule.
+
+<P>
+Exim does not have an elaborate series of alarm clocks to cause retries to
+happen exactly on schedule. A queue-runner process is started periodically, to
+attempt delivery, one by one, of messages containing addresses that have
+passed their next retry time. If such an address fails again, a new retry time
+is computed, and so subsequent messages queued for the same address get
+skipped. The queue is not processed sequentially, but in a 'random' order, to
+prevent one rogue message that causes a problem blocking other messages to the
+same destination for ever.
+
+<P>
+When the maximum time for retrying has passed, pending addresses are failed.
+However, a next try time is still computed from the final subrule. Until that
+time is reached, any new messages for the address are immediately failed. When
+the next try time is passed, one further delivery attempt is made; if this
+fails, a new next try time is computed, and so on.
+
+<P>
+The increasing number of small computers on the Internet has caused there to
+be a lot of messages addressed to hosts that are never going to listen. The
+retry logic described above should reduce the amount of wasted time spent on
+trying to deliver such messages. However, some administrators are unhappy
+about this rather draconian approach, which can cause an address to be failed
+without any deliveries being attempted. Exim can alternatively be configured
+always to try at least once those hosts whose last failure was before the
+arrival of the message. This option increases the number of attempts to
+deliver to dead hosts.
+
+<P>
+Retry rules can be predicated on particular errors as well as on domain names,
+and for domains that are looked up in the DNS, further discrimination on
+whether MX records were used or not is also possible. Thus it is possible to
+treat 'connection refused' and 'connection timed out' differently, or to
+distinguish between 'connection refused and there was only an A record' and
+'connection refused from a host pointed to by an MX record'.
+
+<P>
+When a local delivery fails because a user is over quota, the retry rule can
+be predicated on the length of time since the mailbox was last read. For
+example, if the mailbox has been recently read, the delivery can be retried
+for a while; otherwise it can be failed quickly.
+
+
+<A NAME="14"><H2>16. Header rewriting</H2></A>
+
+<P>
+There are those who argue that header rewriting is a totally Bad Thing; there
+are others who swear they cannot live without it. Exim provides the facility -
+you do not have to use it!
+
+<P>
+Exim can be configured to rewrite the address portions of headers when a
+message is received. For debugging purposes, the original headers are retained
+in the spool file, but are not, of course, transported with the message.
+Rewriting rules can be targeted at individual headers and the envelope fields;
+it is possible, for example, just to rewrite the 'From' header and no others.
+
+<P>
+Rewriting rules are keyed by local-part and domain, either of which can be
+wildcarded, and the replacement text is a general expansion string which can
+contain file lookups. This makes it possible to replace login names by
+'friendly' names in outgoing addresses via a DBM lookup, for example. The
+other most common rewriting requirement of replacing *.foo.bar with foo.bar is
+also easily handled.
+
+<P>
+Headers are also automatically rewritten by Exim in two cases:
+
+<UL>
+  <LI> If a locally-generated message contains addresses without domains, a
+     configured qualifying domain is added to each of them. It is also
+     possible to specify which remote systems are permitted to send messages
+     containing unqualified addresses. These too get qualified on reception.
+
+  <LI> Routing of a domain may reveal that is was only a partial domain, in
+     which case the headers are rewritten to contain the full domain. For
+     example, as a result of routing, an address such as xxx@foo may turn into
+     xxx@foo.bar.ac.uk.
+
+
+<A NAME="15"><H2>17. Host verification</H2></A>
+
+</UL>
+<P>
+Exim can be configured to accept incoming SMTP calls from certain hosts only,
+or it can be configured to reject calls from certain hosts. In both cases, the
+test may include an RFC 1413 identification check. A system that gets all its
+mail via a central hub might want to lock out the rest of the world, while a
+number of systems under one management might want to exchange mail only via
+the standard mailer, and hence reject mail from all but certain specified ids
+within the group.
+
+<P>
+When a host fails the acceptance test, Exim can either give an error code
+immediately on connection, or allow the connection to proceed and then give
+error codes to all the message's recipients. The latter approach is useful
+when using the mechanism to reject unsolicited junk mail and mail bombs,
+because it normally prevents the sender from trying again with the same
+message.
+
+
+<A NAME="16"><H2>18. SMTP port reservation</H2></A>
+
+<P>
+The maximum number of simultaneous incoming SMTP calls can be set, and in
+addition, a number of them can be reserved for particular hosts or particular
+IP networks. It is also possible to specify a system load value above which
+only calls from the reserved hosts are accepted.
+
+
+<A NAME="17"><H2>19. Control of relaying</H2></A>
+
+<P>
+A host is said to act as a relay if it accepts an incoming message from an
+external host and delivers it to an external host. Unscrupulous persons have
+been known to use unsuspecting hosts as relays in an attempt to disguise the
+origin of messages. An Exim host can be configured to accept mail from any
+host for onward transmission to a specified set of domains only, and to accept
+mail only from a specified list of hosts or networks for onward transmission
+to any domain.
+
+
+<A NAME="18"><H2>20. Sender verification</H2></A>
+
+<P>
+The return path of a message (also known as the 'envelope sender') is used
+when Exim has to return an error message. If this is a bad address, the error
+message cannot be delivered, and the postmaster has to sort things out.
+
+<P>
+Sender verification (a configurable option that applies to SMTP input) is
+intended to pass this work to a foreign postmaster, by refusing to accept the
+message in the first place. There is an exception list which can specify
+certain hosts (with optional RFC 1413 identifications) that are allowed to
+bypass the check.
+
+<P>
+There are two main causes of bad return paths: misconfigured mailers (gateways
+in particular), and users fooling around with mail. Sadly, the latter are
+rather common in educational institutions. Sender verification catches both of
+them. It operates by passing the sender address through the directors and
+routers in verification mode; if this fails, the message is not accepted.
+
+<P>
+The first thing foreign postmasters ask when they learn about a rejected
+message is 'What were the headers?'. For this reason, and also to collect
+evidence in cases of mail forgery, Exim does not initially reject a message
+after the MAIL FROM command in the SMTP session. It reads the message, so as
+to be able to write the headers to the rejection log, and then gives a hard
+error response to the sending host.
+
+<P>
+Unfortunately, several mailers believe that any error response after the data
+for a message has been sent indicates a temporary error. Consequently, such
+mailers will continue to try to send a message that has been rejected as
+described above. To prevent this, whenever a message is rejected, Exim records
+the time, bad address, and host in a DBM database. If the same host sends the
+same bad address within 24 hours, it is rejected immediately at the MAIL FROM
+command.
+
+<P>
+Sadly, even this doesn't stop some mailers from repeatedly trying to send the
+message. As a last resort, if the same host sends the same bad address for a
+third time in 24 hours, the MAIL FROM command is accepted, but all subsequent
+RCPT TO commands are rejected. If this does not stop a remote mailer then it
+is badly broken.
+
+<P>
+If the attempt to verify the sender address cannot be completed (typically
+because of a DNS timeout) Exim gives temporary error code to the MAIL FROM
+command, which should cause the remote mailer to try again later. However, it
+is possible to configure Exim to accept the message in these circumstances.
+
+<P>
+Many messages with bad return paths in fact contain perfectly valid 'From' or
+'Reply-to' headers. For administrators that want a quieter life, there is a
+configuration option which causes Exim to check these headers if the return
+path is bad, and if a good address is found, to use it to replace the return
+path. The old value is retained in an X- header.
+
+
+<A NAME="19"><H2>21. Sender lock out</H2></A>
+
+<P>
+More and more unsolicited junk mail is being seen on the Internet. It is
+sometimes useful to be able to reject messages (from any host) with particular
+sender addresses in the envelope. Exim can be configured to reject messages
+whose sender addresses match certain patterns, either by failing the MAIL FROM
+command, or (because some mailers take no notice of that) by failing all RCPT
+TO commands.
+
+
+<A NAME="20"><H2>22. Receiver verification</H2></A>
+
+<P>
+Exim can be configured so that it checks the addresses given in incoming SMTP
+RCPT TO commands as they are received. A failing address can be immediately
+rejected, or it can be logged and accepted. If verification cannot be
+completed (typically because of a DNS timeout) either a temporary error code
+can be given, or the address can be logged and accepted.
+
+
+<A NAME="21"><H2>23. The 'percent hack'</H2></A>
+
+<P>
+The so-called 'percent hack' is the feature of mailers whereby a local-part
+containing a percent sign gets interpreted as an entire new address, with the
+percent replaced by @. This is used for explicit mail routing and sometimes
+for testing. In Exim, it is possible to configure which local domains, if any,
+allow the 'percent hack'.
+
+
+<A NAME="22"><H2>24. Security</H2></A>
+
+<P>
+Exim is written as a single binary that has to run setuid to root. I did start
+off trying to write it as a number of different modules, but soon came to the
+conclusion that, for this type of mailer, it was not worth it, because the
+functions don't decompose cleanly. For example, if you want to verify
+addresses while receiving mail you need all the directing and routing
+apparatus to be available.
+
+<P>
+Exim runs each local delivery in a separate process which is setuid to the
+relevant local user. In addition, it can be configured to run under a given
+non-root uid (and gid) for much of the rest of the time. In particular, it
+need not be root while sending or receiving SMTP mail. On systems that do not
+have the seteuid function, it uses setuid to give up root, which requires it
+to re-invoke itself in order to regain the privilege when it needs to deliver
+a message. On systems that do have seteuid, it can be configured to use that
+function instead, thereby saving some resources.
+
+<P>
+Exim can be configured to use seteuid (on systems that have it) when reading a
+.forward file in a user's home directory. This is necessary when home
+directories are NFS mounted without root privilege, unless .forward files are
+required to be world readable.
+
+<P>
+Exim checks the permissions and owners of files to which messages are to be
+appended, and refuses to proceed with the delivery if things are not right.
+
+<P>
+Delivery of messages to pipes or files is supported only as a result of
+expanding an address via an alias or a forward file, provided this is
+permitted by the configuration. Externally generated local addresses cannot
+specify files or pipes - no special action is taken for addresses starting
+with the file or pipe characters, so they will usually fail.
+
+<P>
+Use of the VRFY function in SMTP connections is controlled by a configuration
+option. The EXPN and DEBUG functions are not supported at all.
+
+
+<A NAME="23"><H2>25. The Exim Monitor</H2></A>
+
+<P>
+A program for monitoring Exim and displaying information in an X window is
+provided. This can be configured to show stripcharts of incoming and outgoing
+mail in various categories. It also shows a 'tail' of the main log file, and
+information about messages on the queue.
+
+<P>
+There is a menu of operations that can be performed by suitably privileged
+users. Messages can be frozen, thawed, deleted, caused to be delivered,
+modified, or returned to their senders from this interface.
+
+
+</BODY>
+</HTML>
diff --git a/robots.txt b/robots.txt
new file mode 100644 (file)
index 0000000..3d44a13
--- /dev/null
@@ -0,0 +1,4 @@
+# $Id: robots.txt,v 1.2 2000/01/09 21:33:19 nigel Exp $
+User-agent: *
+Disallow: /mailman/
+Disallow: /ftp/
diff --git a/statconf.txt b/statconf.txt
new file mode 100644 (file)
index 0000000..857ea80
--- /dev/null
@@ -0,0 +1,2 @@
+stats-are mailed
+send-mail-to Nigel.Metheringham@ThePLAnet.net
diff --git a/toc.html b/toc.html
new file mode 100644 (file)
index 0000000..3baed1e
--- /dev/null
+++ b/toc.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>exim Table of Contents</title>
+    <base target="body">
+  </head>
+
+  <body bgcolor="#FFFFBF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
+    <img src="images/eximXs.png" alt="[logo]">
+    <br>
+    <table cellpadding=0 cellspacing=6>
+      <tr>
+       <td align=top>
+         <font size=-1>
+           <A HREF="home.html"><b>Home</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+           <A HREF="intro.html"><b>Introduction</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="exim-html-3.00/doc/html/oview.html"><b>Overview Documentation</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="version.html"><b>Current Version</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="mirrors.html"><b>Availability</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="maillist.html"><b>Mailing Lists about exim</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="docs.html"><b>Documentation and FAQs</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="credits.html"><b>Website Credits</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="ChangeLog.html"><b>Website Changes</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="y2k.html"><b>Y2K Information</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr><td><hr size=5></ht></td></tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://www.exim.org" target="_top"><b>Master
+              Exim Site (UK)</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://mirror.direct.ca/exim" target="_top"><b>Canada</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://www.ie.exim.org" target="_top"><b>Ireland</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://www.no.exim.org" target="_top"><b>Norway</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://exim.directnet.ru" target="_top"><b>Russia</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://www.za.exim.org" target="_top"><b>South Africa</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="http://www.us.exim.org" target="_top"><b>US 
+              Mirror</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+      <tr>
+       <td align=top>
+         <font size=-1>
+              <A HREF="howto_mirror.html"><b>Making a Mirror</b></a>
+         </font>
+       </td>
+      </tr>
+      <!-- -->
+    </table>
+    <br>
+    <h6>$Id: toc.html,v 1.8 1999/11/14 20:27:57 nigel Exp $</h6>
+<!-- Created: Mon Aug 25 13:12:18 BST 1997 -->
+  </body>
+</html>
diff --git a/toc_frame.html b/toc_frame.html
new file mode 100644 (file)
index 0000000..26b385f
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>TOC Frame</title>
+  </head>
+  <frameset rows="90%, *">
+    <frame marginwidth=0 name="index" src="toc.html">
+    <frame marginwidth=0 name="branding" src="branding/branding.html">
+  </frameset>
+  <noframes>
+  <body>
+<!-- Created: Tue Nov  3 17:22:59 GMT 1998 -->
+<!-- hhmts start -->
+Last modified: Tue Nov  3 17:49:17 GMT 1998
+<!-- hhmts end -->
+  </body>
+  </noframes>
+</html>
diff --git a/version.html b/version.html
new file mode 100644 (file)
index 0000000..e102625
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Versions of exim</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Versions of exim</h1>
+
+    <p>The latest release is <b>3.13</b>.  This is an incremental
+    upgrade with some new features, however old 3.0x configuration
+    files should be fully compatible.  Upgrading from previous
+    releases is worth doing, particularly since a denial-of-service
+    hole has been fixed over 3.0x and lower versions.</p>
+
+    <p>The previous release is <b>3.03</b>.  This was a major upgrade
+    over the 2.1x series, and some features of the configuration file
+    are not backward compatible - although there is a conversion
+    utility.  Earlier version <b>3.0x</b> users should upgrade,
+    although the bug fixes are relatively minor.</p>
+
+    <p>The last 2.x release version was <b>2.12</b>.  This is a bugfix
+    release over earlier 2.1x releases.  Upgrade from 2.0x releases is
+    not imperative.</p>
+
+    <p>There were a number of early beta versions of exim with version
+    numbers less than <b>1.0</b>.  These should now be avoided.
+    Versions earlier than <b>2.0x</b> should also be upgraded.</p>
+
+    <p>There may be beta versions with available from the ftp sites in
+    the Testing directory.  Many people are using these without
+    problems, but they are not recommended unless you are willing to
+    work with beta software.</p>
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon Aug 25 15:46:41 BST 1997 -->
+    <h4>$Id: version.html,v 1.7 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>
diff --git a/y2k.html b/y2k.html
new file mode 100644 (file)
index 0000000..c3d5e86
--- /dev/null
+++ b/y2k.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Exim Y2K Information</title>
+  </head>
+
+  <body bgcolor="#FFFFFF" text="#00005A" link="#FF6600" alink="#FF9933" vlink="#990000">
+    <h1>Exim Y2K Information</h1> 
+
+    <p>The author of Exim believes that it is Y2K-compliant, as long
+    as the underlying operating system and C library are. Exim does
+    not parse dates or times at all.  Internally, it makes some use of
+    binary timestamps in Unix format (number of seconds since
+    1-Jan-1970) and uses C library services to convert these to
+    printing forms (e.g. for logging). The printing forms all use
+    4-digit years.</p>
+
+    <p><i>It should be noted that exim, in common with all GNU
+       licensed software, does not come with any form of warrenty -
+       see the NOTICE and LICENSE files within the distribution.  If
+       you need a full Y2K audit performing, then the source is
+       available for this to be done.</i></p>
+
+    <h2>Newsflash</h2>
+    <p>January 2000 - its still working, no problem reports :-)</p>
+
+
+    <hr>
+    <address><a href="mailto:Postmaster@exim.org">Nigel Metheringham</a></address>
+<!-- Created: Mon May 24 21:47:56 BST 1999 -->
+<!-- hhmts start -->
+Last modified: Sun Jan  9 21:56:56 GMT 2000
+<!-- hhmts end -->
+    <h4>$Id: y2k.html,v 1.5 2000/04/09 22:02:33 nigel Exp $</h4>
+  </body>
+</html>