The Exim FAQ

Contents   Previous   Next

2. ROUTING IN GENERAL

Q0201:  How can I arrange that messages larger than some limit are handled by a special router?

A0201:  You can use a condition option on the router line this:

   condition = ${if >{$message_size}{100K}{yes}{no}}

Q0202:  Can I specify a list of domains to explicitly reject?

A0202:  Set up a named domain list containing the domains in the first section of the configuration, for example:

   domainlist reject_domains = list:of:domains:to:reject

You can use this list in an ACL to reject any SMTP recipients in those domains. You can also give a customized error message, like this:

   deny message = The domain $domain is no longer supported
        domains = +reject_domains

If you also want to reject these domains in messages that are submitted from the command line (not using SMTP), you need to set up a router to do it, like this:

   reject_domains:
     driver = redirect
     domains = +reject_domains
     allow_fail
     data = :fail: The domain $domain is no longer supported

Q0203:  How can I arrange to do my own qualification of non-fully-qualified domains, and then pass them on to the next router?

A0203:  If you have some list of domains that you want to qualify, you can do this using a redirect router. For example,

   qualify:
     driver = redirect
     domains = *.a.b
     data = ${quote:$local_part}@$domain.c.com

This adds .c.com to any domain that matches *.a.b. If you want to do this in conjunction with a dnslookup router, the widen_domains option of that router may be another way of achieving what you want.

Q0204:  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.

A0204:  Set up a first router like this:

   fail_nobody:
      driver = redirect
      senders = nobody@your.domain
      domains = ! +local_domains
      allow_fail
      data = :fail: Nobody may not mail off-site

This assumes you have defined +local_domains as in the default configuration.

Q0205:  How can I get Exim to deliver to me locally and everyone else at the same domain via SMTP to the MX record specified host?

A0205:  Create an accept router to pick off the one address and pass it to an appropriate transport. Put this router before the one that does MX routing:

   me:
     driver = accept
     domains = dom.com
     local_parts = me
     transport = local_delivery

In the transport you will have to specify the user option. An alternative way of doing this is to add a condition to the router that does MX lookups to make it skip your address. Subsequent routers can then deliver your address locally. You'll need a condition like this:

   condition = \
     ${if and {{eq{$domain}{dom.com}}{eq{$local_part}{me}}}{no}{yes}}

Q0206:  How can I get Exim to deliver certain domains to a different SMTP port on my local host?

A0206:  You must set up a special smtp transport, where you can specify the port option, and then set up a router to route the domains to that transport. There are two possibilities for specifying the host:

(1)  If you use a manualroute router, you can specify the local host in the router options. You must also set

   self = send

so that it does not object to sending to the local host.

(2)  If you use a router that cannot specify hosts (for example, an accept router with appropriate conditions), you have to specify the host using the hosts option of the transport. In this case, you must also set allow_localhost on the transport.

Q0207:  Why does Exim lower-case the local-part of a non-local domain when routing?

A0207:  Because caseful_local_part is not set (in the default configuration) for the dnslookup router. This does not matter because the local part takes no part in the routing, and the actual local part that is sent out in the RCPT command is always the original local part.

Q0208:  I can't get a lookup to work in a domain list. I'm trying this:

   domainlist local_domains = @:localhost:${lookup pgsql{SELECT ...

A0208:  Does the lookup return a colon separated list of domains? If not, you are using the wrong kind of lookup. The most common way of using a lookup in a domain list is something like this:

   domainlist local_domains = @:localhost:pgsql;SELECT ...

Using that syntax, if the query succeeds, the domain is considered to be in the list. The value that is returned is not relevant.



Contents   Previous   Next