--- /dev/null
+.mirror
+ftp
+exim-html-*
--- /dev/null
+<!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>
--- /dev/null
+<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><ph10@cus.cam.ac.uk</B>></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 <address>" 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><jims@email</B>>, Home: Bob <B><bobs@email</B>>" 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 "<message filter> 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><anything>@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 "<>". 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> <netbiosname>" 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 ">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 <>" in the reject log. Isn't <> 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 "<>" ?
+<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><@some.domain</B>></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><anything>@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 <>.
+<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 <defunct> 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 "<= <>". Am I correct in
+ assuming that the "<>" 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
+ <some message, could be empty>
+ .</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 <address>" 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> <remote address>". 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><jims@email</B>>, Home: Bob <B><bobs@email</B>>" 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" <jims@email>, "Home: Bob" <bobs@email></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 <x@y.x>, Y <y@w.z>;,
+ My enemies: A <a@b.c>, B <b@c.d>;</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 "<message filter> 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 >{$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\\$} \
+ {<smarthost1>}{<smarthost2>} 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\\$} \
+ {<smarthost1>}{<smarthost2>}\" 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><anything>@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 = <domains you want to do this for>
+ 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 <xxxx@yyy.zz>
+ 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 >/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 "<>". 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 ("<>")
+ 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 ("<>"), 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> <netbiosname>" 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 <netbiosname>'"</PRE>
+<A NAME="SEC141" HREF="FAQ.html#TOC141">Q0526</A>: Why does the pipe transport add a line starting with ">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:<victim-host!victim-user@your.domain></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 ">*" (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]+$:>*
+ 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 : <client_list> : <allow_or_deny></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 : <client_list></PRE>
+<PRE>
+ /etc/hosts.deny:</PRE>
+<PRE>
+ exim : <client_list></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><doug@cc.ysu.edu</B>>.</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 <>" in the reject log. Isn't <> 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 = ^(?>.*$)(?<=\.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 "<>" ?
+
+
+<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 "<>".
+
+</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 <...some complicated regex...> or
+ $message_body matches <...some other regex...> or
+ $header_from: matches <...regex...> 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 : <other local domains></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
+ >>> RSET
+ <<< 250 Reset OK
+ >>> MAIL FROM:<spamtest@example.com>
+ <<< 250 <spamtest@example.com> is syntactically correct
+ >>> RCPT TO:<relaytest%mail-abuse.org@example.com>
+ <<< 250 <relaytest%mail-abuse.org@example.com> 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 <something>@$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><@some.domain</B>></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><anything>@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 > {$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 <>.
+
+
+<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 <defunct> 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
+ <defunct> 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 = ^.*(?<!^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 = ^(?>.*$)(?<=\.oyoy\.org)(?<!^(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 "<= <>". Am I correct in
+ assuming that the "<>" 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 ("<>")
+ 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 ("<>"), 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 >> /proc/sys/kernel/file-max
+ fi
+ if [ -f /proc/sys/kernel/inode-max ]; then
+ echo 24576 >> /proc/sys/kernel/inode-max
+ fi
+ if [ -f /proc/sys/kernel/file-nr ]; then
+ echo 2160 >> /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' <rpm-package-file></PRE>
+<P>
+ where <rpm-package-file> 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' <package-name></PRE>
+<P>
+ where <package-name> 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 <> 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 <tests for appropriate addresses>
+ 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 < ${$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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+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.
--- /dev/null
+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.
--- /dev/null
+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.
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+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
--- /dev/null
+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).
--- /dev/null
+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.
--- /dev/null
+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)
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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*
--- /dev/null
+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.
--- /dev/null
+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
--- /dev/null
+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"
+
--- /dev/null
+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
--- /dev/null
+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<---
--- /dev/null
+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"
+
--- /dev/null
+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.
--- /dev/null
+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.
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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 . . .
--- /dev/null
+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
+
--- /dev/null
+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
+#
--- /dev/null
+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;
--- /dev/null
+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.
--- /dev/null
+#!/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;
--- /dev/null
+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
+
--- /dev/null
+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
+
+
--- /dev/null
+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;
+
+
+
+
--- /dev/null
+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
--- /dev/null
+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)
+
+
--- /dev/null
+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
+
--- /dev/null
+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.
+
--- /dev/null
+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}"
+
--- /dev/null
+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.
--- /dev/null
+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}
+######################################################################
+
--- /dev/null
+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
--- /dev/null
+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.
--- /dev/null
+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.
--- /dev/null
+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
+
+#==========================================================================
+
--- /dev/null
+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
+
--- /dev/null
+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
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+#define invisible_width 1
+#define invisible_height 1
+static char invisible_bits[] = {
+ 0x00};
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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: <ph10@cus.cam.ac.uk><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>
--- /dev/null
+# $Id: robots.txt,v 1.2 2000/01/09 21:33:19 nigel Exp $
+User-agent: *
+Disallow: /mailman/
+Disallow: /ftp/
--- /dev/null
+stats-are mailed
+send-mail-to Nigel.Metheringham@ThePLAnet.net
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>
--- /dev/null
+<!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>