[Exim] Exim + Virtual POP accounts - where could the error b…

Top Page
Delete this message
Reply to this message
Author: Odhiambo G. Washington
Date:  
To: Exim Users
Subject: [Exim] Exim + Virtual POP accounts - where could the error be??
Hello list,

I'm thoroughly stumped with this one and could do with some help. I'm probably just
being a dummy with the directors section but believe me, I am totally unable to figure
this out. It works on one box, refuses on the other......
I've read all the config samples and the FAQs.

1. I have built a configure file that is supposed to handle "special virtual domains".
I did this on a test box (actually my workstation) and it did work with a domain
(freebsd.co.ke).

To do the tests, I made MX records for freebsd.co.ke to point to my workstation
(alligator.wananchi.com). Alligator also works as a slave NS on our domain for fun
so it's not quite maintained.


Now my problem:

On alligator, I have config-virtual and configure. Below are some 2 distinct test results.

alligator# exim -C config-virtual -bt wash@???
wash@???
deliver to wash in domain freebsd.co.ke
director = virtual_localuser, transport = virtual_localdelivery

More verbosely.........

alligator# exim -C config-virtual -bt -d 2 wash@???
Exim version 3.33-VA-mm1 debug level 2 uid=0 gid=0
probably Berkeley DB version 1.8x (native mode)
Caller is an admin user
Caller is a trusted user
wash@??? in ^([^\*]+)\*(.*)@(.*)$? no (end of list)
virtual_domains director: lsearch* key=wash@???
file="/usr/local/etc/exim/virtual"
virtual_domains director declined for wash:
virtual_aliases director: lsearch* key=wash
file="/etc/virtual/freebsd.co.ke/aliases"
virtual_aliases director declined for wash:
virtualdomainfilter director: file = /etc/virtual/freebsd.co.ke/filter
set uid=0 gid=0 euid=71 egid=6
0 bytes read from /etc/virtual/freebsd.co.ke/filter
file is not a filter file
restored uid=0 gid=0 euid=71 egid=6
system_aliases director: lsearch key=wash
file="/etc/mail/aliases"
system_aliases director declined for wash:
userforward director: home directory for wash is "/home/wash"
match against pattern "!^/nonexistent" yielded 0
expanded string was "^/nonexistent"
userforward director: file = .forward
set uid=0 gid=0 euid=1000 egid=0
successful stat of /home/wash/.
/home/wash/.forward not found
restored uid=0 gid=0 euid=71 egid=6
virtual_localuser director called for wash@???
queued for virtual_localdelivery transport: local_part=wash domain=freebsd.co.ke
errors_to=NULL
domain_data= local_part_data=NULL
virtual_localuser director succeeded for wash
wash@???
deliver to wash in domain freebsd.co.ke
director = virtual_localuser, transport = virtual_localdelivery
alligator#


For non virtual....


alligator# exim -C config-virtual -bt wash
wash@???
deliver to wash in domain alligator.wananchi.com
director = localuser, transport = local_delivery


After that I did change the records for freebsd.co.ke and reloaded the servers.

alligator# exim -C configure -bt wash@???
wash@???
deliver to wash@???
router = lookuphost, transport = remote_smtp
host mail.wananchi.com [212.49.74.4] MX=10
host mail.wananchi.com [62.8.64.4] MX=10

alligator# exim -C configure -bt wash
wash@???
deliver to wash in domain alligator.wananchi.com
director = localuser, transport = local_delivery
alligator#


Then I take this file "config-virtual" to my main production server so that I
can test/deploy it. I now have now removed all traces of freebsd.co.ke from all files
except in /etc/virtual/domains and the MX records point to mail.wananchi.com.
In config-virtual, I now susbstitute all entries referring to alligator with
ns2 (mail is CNAME for ns2)

I am now in NS2 :: I'll now change the zone info and reload the NS

Pertinet info:


[root@ns2]#ndc reload

[root@ns2]#host freebsd.co.ke
freebsd.co.ke has address 62.8.64.4
freebsd.co.ke mail is handled (pri=10) by mail.wananchi.com
[root@ns2]#

[root@ns2]#exim -C config-virtual -bt wash@???
LOG: 0 MAIN
lowest numbered MX record points to local host: freebsd.co.ke (while routing <wash@???>)
wash@??? cannot be resolved at this time:
lowest numbered MX record points to local host
[root@ns2]#

[root@ns2]#cat /etc/virtual/domains
freebsd.co.ke
[root@ns2]#


..and the configure file is attached. It's a bit messy though ;)


What could I be missing in the config file?? Strange that the file /etc/virtual/domains is
ignored on this production box.....

/etc/virtual/ is owned by exim:mail

In my configure file /etc/virtual/domains is included under relay_domains. I've been
wondering whether I should _not_ have 3 lsearch directives on that line or something...

I'm almost insane due to this.


Thanks in advance.


-Wash

S y s t e m s A d m i n.

-- 
Odhiambo Washington  <wash@???>    "The box said 'Requires
Wananchi Online Ltd.  www.wananchi.com      Windows 95, NT, or better,'
Tel: 254 2 313985-9   Fax: 254 2 313922     so I installed FreeBSD."   
GSM: 254 72 743 223   GSM: 254 733 744 121  This sig is McQ!  :-)


++
Good day to let down old friends who need help.
message_filter = /root/Exim-filters/system_filter.exim
message_body_visible = 8000

message_filter_file_transport = address_file
message_filter_pipe_transport = address_pipe
message_filter_reply_transport = address_reply

######################################################################
#                  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 that can be included in a
# configuration file. There are many more than are mentioned here. The
# manual is in the file doc/spec.txt in the Exim distribution as a plain
# ASCII file. Other formats (PostScript, Texinfo, HTML, PDF) are available
# from the Exim ftp sites. The manual is also online via the Exim web sites.


# 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.

############ IMPORTANT ########## IMPORTANT ########### IMPORTANT ############
#                                                                            #
# Whenever you change Exim's configuration file, you *must* remember to HUP  #
# the Exim daemon, because it will not pick up the new configuration until   #
# until you do this. It is usually a good idea to test a new configuration   #
# for syntactic correctness (e.g. using "exim -C /config/file -bV") first.   #
#                                                                            #
############ IMPORTANT ########## IMPORTANT ########### IMPORTANT ############



######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################


# Specify your host's canonical name here. This should normally be the fully
# qualified "official" name of your host. If this option is not set, the
# uname() function is called to obtain the name.

primary_hostname = ns2.wananchi.com


# Specify the domain you want to be added to all unqualified addresses
# here. An unqualified address is one that does not contain an "@" character
# followed by a domain. For example, "caesar@???" is a fully qualified
# address, but the string "caesar" (i.e. just a login name) is an unqualified
# email address. Unqualified addresses are accepted only from local callers by
# default. See the receiver_unqualified_{hosts,nets} options if you want
# to permit unqualified addresses from remote sources. If this option is
# not set, the primary_hostname value is used for qualification.

qualify_domain = wananchi.com


# 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 (i.e. not mentioned in the configuration file), 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. This sets local_domains to an empty string, which is not
# the same as not mentioning it at all. An empty string specifies that there
# are no local domains; not setting it at all causes the default value (the
# setting of qualify_recipient) to be used.

LOCAL= ns2.wananchi.com : mail.wananchi.com : pop.wananchi.com: smtp.wananchi.com

SPECIAL = lsearch;/etc/virtual/domains

#5#local_domains = "wananchi.com:ns2.wananchi.com:lsearch;/usr/local/etc/exim/relay:localhost#:partial-lsearch;/usr/local/etc/exim/tpc.domains"
local_domains = "LOCAL:wananchi.com:lsearch;/usr/local/etc/exim/relay:localhost"
relay_domains = "lsearch;/usr/local/etc/exim/relay:lsearch;/usr/local/etc/exim/static:SPECIAL"

# If you want to accept mail addressed to your host's literal IP address, for
# example, mail addressed to "user@???", then uncomment the
# following line, or supply the literal domain(s) as part of "local_domains"
# above. You also need to comment "forbid_domain_literals" below. This is not
# recommended for today's Internet.

#local_domains_include_host_literals


# The following line prevents Exim from recognizing addresses of the form
# "user@???" that is, with a "domain literal" (an IP address)
# instead of a named domain. The RFCs still require this form, but it makes
# little sense to permit mail to be sent to specific hosts by their IP address
# in the modern Internet, and this ancient format has been used by those
# seeking to abuse hosts by using them for unwanted relaying. If you really
# do want to support domain literals, remove the following line, and see
# also the "domain_literal" router below.

#forbid_domain_literals

# Allow mail addressed to our hostname, or to our IP address.

local_domains_include_host = true
local_domains_include_host_literals = true

# No local deliveries will ever be run under the uids of these users (a colon-
# separated list). An attempt to do so gets changed so that it runs under the
# uid of "nobody" instead. This is a paranoic safety catch. Note the default
# setting means you cannot deliver mail addressed to root as if it were a
# normal user. This isn't usually a problem, as most sites have an alias for
# root that redirects such mail to a human administrator.

exim_user = exim
exim_group = mail
never_users = root


# The use of your host as a mail relay by any host, including the local host
# calling its own SMTP port, is locked out by default. If you want to permit
# relaying from the local host, you should set
#
# host_accept_relay = wananchi.com
#
# If you want to permit relaying through your host from certain hosts or IP
# networks, you need to set the option appropriately, for example
#

host_accept_relay = +warn_unknown:62.8.64.0/24:62.8.65.0/24:62.8.66.0/24:62.8.67.0/24:212.49.74.0/25:192.168.0.2/32

# Can we do SMTP AUTH before relaying

# First let us not bother those we accept relay for

auth_always_advertise = false

# Now let us get the other guys


host_auth_accept_relay = *


# Some operating systems use the "gecos" field in the system password file
# to hold other information in addition to users' real names. Exim looks up
# this field when it is creating "sender" and "from" headers. If these options
# are set, exim uses "gecos_pattern" to parse the gecos field, and then
# expands "gecos_name" as the user's name. $1 etc refer to sub-fields matched
# by the pattern.

gecos_pattern = ^([^,:]*)
gecos_name = $1

#

# This string defines the contents of the \`Received' message header that
# is added to each message, except for the timestamp, which is automatically
# added on at the end, preceded by a semicolon. The string is expanded each
# time it is used.
received_header_text = "Received: \
         ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\
         {${if def:sender_ident {from ${sender_ident} }}\
         ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\
         by ${primary_hostname} \
         ${if def:received_protocol {with ${received_protocol}}} \
         (Exim ${version_number} #${compile_number} (FreeBSD))\n\t\
         id ${message_id}\
         ${if def:received_for {\n\tfor <$received_for>}}"


# If you are an MX backup or gateway of some kind for some domains, you must
# set relay_domains to match those domains. This will allow any host to
# relay through your host to those domains.
#
# See the section of the manual entitled "Control of relaying" for more
# information.


# The setting below causes Exim to do a reverse DNS lookup on all incoming
# IP calls, in order to get the true host name. If you feel this is too
# expensive, you can specify the networks for which a lookup is done, or
# remove the setting entirely.

# host_lookup = 0.0.0.0/0
host_lookup = *

# By default, Exim expects all envelope addresses to be fully qualified, that
# is, they must contain both a local part and a domain. If you want to accept
# unqualified addresses (just a local part) from certain hosts, you can specify
# these hosts by setting one or both of
#
# receiver_unqualified_hosts =
# sender_unqualified_hosts =
#
# to control sender and receiver addresses, respectively. When this is done,
# unqualified addresses are qualified using the settings of qualify_domain
# and/or qualify_recipient (see above).


# By default, Exim does not make any checks, other than syntactic ones, on
# incoming addresses during the SMTP dialogue. This reduces delays in SMTP
# transactions, but it does mean that you might accept messages with unknown
# recipients, and/or bad senders.

# Uncomment this line if you want incoming recipient addresses to be verified
# during the SMTP dialogue. Unknown recipients are then rejected at this stage,
# and the generation of a failure message is the job of the sending host.

#receiver_verify

# Uncomment this line if you want incoming sender addresses (return-paths) to
# be verified during the SMTP dialogue. Verification can normally only check
# that the domain exists.

sender_verify

# I'd rather get a valid header fixed onto a mail that has <> and reject those
# that have absolutely nothing.

sender_reject = partial-lsearch;/usr/local/etc/exim/badsenders
prohibition_message = "${lookup{$prohibition_reason}lsearch {/usr/local/etc/exim/reject.messages}{${expand:$value}}}"

#host_reject_recipients = lsearch;/usr/local/etc/exim/blacklist
host_reject = 209.225.6.125:209.225.6.106:209.225.6.117:209.225.6.112:209.225.6.111:209.225.41.205:63.103.129.9:207.61.57.125:203.122.3.153:207.241.178.129:202.86.149.133:207.241.178.132: \
207.241.178.102:207.241.178.164:196.40.39.157:207.155.198.87:210.24.180.17:210.10.90.72:212.186.146.248:216.242.135.:202.86.131.9:203.1.24.64:213.120.126.30

sender_verify_fixup

headers_sender_verify_errmsg

#headers_check_syntax

# Exim contains support for the Realtime Blocking List (RBL) that is being
# maintained as part of the DNS. See http://maps.vix.com/rbl/ for background.
# Uncommenting the first line below will make Exim reject mail from any
# host whose IP address is blacklisted in the RBL at maps.vix.com. Some
# others have followed the RBL lead and have produced other lists: DUL is
# a list of dial-up addresses, and ORBS is a list of open relay systems. The
# second line below checks all three lists.

#rbl_domains = blackholes.mail-abuse.org:relays.mail-abuse.org:dialups.mail-abuse.org


# 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 = *

#smtp_banner = "${primary_hostname} ESMTP Exim ${version_number} #${compile_number} ${tod_full} \n\nAll Connections are Logged and Monitored"

smtp_banner = $primary_hostname ESMTP Exim \
  ${version_number} #${compile_number} ${tod_full} ${lookup{$sender_host_address} \
    lsearch* {/usr/local/etc/exim/bannerversion} \
    {${expand:$value}}}


errors_reply_to = admin@???

delay_warning = 0h

#local_interfaces = 127.0.0.1:62.8.64.4

log_all_parents

log_arguments

log_ip_options

log_level = 4

log_received_recipients

log_received_sender

log_refused_recipients

log_smtp_syntax_errors

log_smtp_connections

log_rewrites

log_smtp_confirmation

no_prod_requires_admin

no_queue_list_requires_admin

message_size_limit = 10M

return_size_limit = 5k

auto_thaw = 1h

smtp_etrn_hosts = 62.8.64.0/24 : 62.8.65.0/24 : 62.8.66.0/24 : 62.8.67.0/24 : 212.49.74.0/25

# Let's hold the mail for hosts that do ETRN rather than try to deliver
# straight to them, even though they are their primary MX.

#hold_domains = lsearch;/usr/local/etc/exim/static
queue_smtp_domains = lsearch;/usr/local/etc/exim/static

# We have to be support those broken Microsuck Servers which send ETRN @
# Either of the TWO below can do.


#smtp_etrn_command = /etc/etrn_command $domain $sender_host_address

smtp_etrn_command = "/usr/local/sbin/exim -R \"${if match {$domain} {^[@#]} {${substr_1:$domain}} {$domain}}\""

#smtp_etrn_command = /usr/sbin/sendmail -R $domain $sender_host_address

smtp_accept_max = 100
smtp_accept_max_per_host = 10
smtp_accept_reserve = 10

#This should remove "no immediate delivery" messages
smtp_accept_queue_per_connection = 120                                         


# Deliver to same destination in multiple processes

remote_max_parallel = 2

#optimization options
smtp_connect_backlog = 50
split_spool_directory                                                           


# This option cancels (removes) frozen messages that are older than 2 days.

timeout_frozen_after = 2d

# This option unfreezes bounce messages after two days, tries
# once more to deliver them, and ignores any delivery failures.

ignore_errmsg_errors

ignore_errmsg_errors_after = 2d

end


######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################


# A transport is used only when referenced from a director or a router that
# successfully handles an address.


# This transport is used for delivering messages over SMTP connections.

#remote_smtp:
# driver = smtp

remote_smtp:
  driver = smtp
  serialize_hosts = *
  delay_after_cutoff = false                                                   



# This transport is used for local delivery to user mailboxes in traditional
# BSD mailbox format. By default it will be run under the uid and gid of the
# local user, and requires the sticky bit to be set on the /var/mail directory.
# Some systems use the alternative approach of running mail deliveries under a
# particular group instead of using the sticky bit. The commented options below
# show how this can be done.

local_delivery:
  driver = appendfile
  file = /var/mail/${local_part}
  quota_warn_threshold = 75%
  quota_is_inclusive = false
  quota_warn_message = "\
                To: $local_part@$domain\n\
                Subject: Your mailbox is almost filled up!\n\n\
                This message is automatically created \
                by mail delivery software (Exim), your SMTP Server at wananchi.com.\n\ 
                The size of your mailbox has exceeded a warning threshold\n\
                set by the System Administrator.\n\
                When you receive this message, it means that your current\n\
                mailbox size is approaching 30M (MegaBytes). You need to clean up old msgs.\n\
                If your e-mail software has a setting that leaves a copy of the message on\n\
                the server, please also set the option that deletes the message\n\
                from the server when you delete your local copy."
 quota = 30M
# I can also impose quota selectively via the authtab file in the format username:password:quota 
# and use this lookup, with a default value of 20M in case a quota isn't specified for a user
# quota = ${extract{2}{:}{${lookup{${local_part}}lsearch{/etc/exim/authtab}{$value}{:20M}}}}
# quota = ${extract{2}{:}{${lookup{${local_part}}lsearch{/mail/conf/${domain}/passwd}{$value}{3M}}}}
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
# mode = 0660
  mode = 0600


# This transport is used for handling pipe deliveries generated by alias
# or .forward files. If the pipe generates any standard output, it is returned
# to the sender of the message as a delivery error. Set return_fail_output
# instead of return_output if you want this to happen only when the pipe fails
# to complete normally. You can set different transports for aliases and
# forwards if you want to - see the references to address_pipe in the directors
# section below.

address_pipe:
driver = pipe
return_output


# This transport is used for handling deliveries directly to files that are
# generated by aliassing or forwarding.

address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add


# This transport is used for handling autoreplies generated by the filtering
# option of the forwardfile director.

address_reply:
driver = autoreply


#Hylafax Settings
#fax:
#  driver = pipe
#  user = fax
#  command ="/usr/local/bin/faxmail -d ${local_part}@${extract{1}{.}{$domain}}"
#  home_directory = /usr/local/bin    


# TPC.INT
#tpc:
#  driver = pipe
#  command = "/var/tpc/tpcmailer.pl \"${local_part}@${domain}\" \"${sender_address}\""
#  user = fax                                                                  
#  return_fail_output


efaxtransport:
driver = pipe
command = "/usr/local/bin/faxmail -d \"${local_part}\" \"${sender_address}\""
user = fax
group = uucp
home_directory = /usr/local/bin
headers_add = "X-FAX-notify: when done"

efax_rejected_user:
driver = autoreply
file = /etc/fax/warning.txt
file_expand
from = faxmaster@???
to = $sender_address
user = exim
# subject = Re: Your Fax to $local_part@$domain
subject = Re: Your Fax to $local_part
log = /var/log/exim/efax_rejectlog

# We want to handle some virtual domains in a special way from what
# we have already.

# This transport handles those special cases

virtual_localdelivery:
driver = appendfile
create_directory = true
directory_mode = 700
file = /var/spool/virtual/${domain}/${local_part}
delivery_date_add
envelope_to_add
return_path_add
user = exim
# user = ${extract{2}{:}{${lookup{$local_part} lsearch {/etc/virtual/${domain}/passwd}{$value}}}}
group = mail
mode = 0660
#quota_warn_threshold = 75%
#quota_is_inclusive = false
#quota = ${extract{2}{:}{${lookup{${local_part}}lsearch{/etc/virtual/${domain}/passwd}{$value}{:15M}}}}

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 our "normal" virtual domains

virtual_domains:
driver = aliasfile
file = /usr/local/etc/exim/virtual
include_domain
search_type = lsearch*@
expand


# 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. Alternatively, you
# can specify "user" on the transports that are used. Note that those
# listed below are the same as are used for .forward files; you might want
# to set up different ones for pipe and file deliveries from aliases.

# The following will handle any aliases for the special virtual domains

virtual_aliases:
driver = aliasfile
user = exim
expand
file_transport = address_file
pipe_transport = address_pipe
domains = lsearch;/etc/virtual/domains
file = /etc/virtual/${domain}/aliases
search_type = lsearch*
qualify_preserve_domain


# This director allows me to have an individual domain filter for
# each virtual domain.

virtualdomainfilter:
  driver = forwardfile
  domains = lsearch;/etc/virtual/domains  
  file = /etc/virtual/${domain}/filter
  user = exim
  group = mail
  no_verify   
  no_expn     
  no_check_local_user
  check_ancestor
  filter
  skip_syntax_errors
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply



# This director will handle our system aliases /etc/mail/aliases
system_aliases:
driver = aliasfile
file = /etc/mail/aliases
# file = /usr/local/etc/exim/aliases
search_type = lsearch
user = exim
file_transport = address_file
pipe_transport = address_pipe
expand

# 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.

# The no_verify setting means that this director will be skipped when
# verifying addresses if sender_verify or receiver_verify is set (though
# they are not set by default). Similarly, no_expn means that this director
# will be skipped if smtp_expn_hosts is set to allow any hosts to use the
# EXPN command.

# The check_ancestor option means that if the forward file generates an
# address that is an ancestor of the current one, the current one gets
# passed on instead. This covers the case where A is aliased to B and B
# has a .forward file pointing to A.

# The three transports specified at the end are those that are used when
# forwarding generates a direct delivery to a file, or to a pipe, or sets
# up an auto-reply, respectively.

userforward:
driver = forwardfile
file = .forward
no_verify
no_expn
check_ancestor
# filter
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
match_directory = !^/nonexistent


# This director matches the virtual local user mailboxes

virtual_localuser:
driver = smartuser
transport = virtual_localdelivery
domains = lsearch;/etc/virtual/domains
condition = ${lookup {$local_part} lsearch {/etc/virtual/${domain}/passwd}{$value}}

# This director matches local user mailboxes.

localuser:
driver = localuser
transport = local_delivery


# VIRTUAL DOMAIN FALLBACK
# If there is no alias and local delivery fails, but there is an alternative
# domain name to forward unsent mail to, then fallbackdomain picks up the new
# name and resends the message. Thus if a message is sent to domain1.com and
# there are not matching user mailboxes or aliases, then the message is
# forwarded to the same user at domain2.com. Domains can be chained.

# The file format is as follows:
#    domain1.com: domain2.com   
#    domain2.com: domain3.com   


fallbackdomain:
driver = smartuser
user = exim
condition = ${lookup{$domain}lsearch{/etc/virtual/domainfallback}{$value}}
new_address = ${lookup{$domain}lsearch{/etc/virtual/domainfallback}{$local_part@$value}{$local_part@$domain}}


#TPC.INT
# and a tpc director
#tpc_director:
#  driver = smartuser
#  transport = tpc
#  domains = "partial-lsearch;/usr/local/etc/exim/tpc.domains"                  


faxdirector:
driver = smartuser
prefix = fax-
transport = efaxtransport
condition = ${lookup{$sender_address}lsearch{/etc/fax/faxusers}{yes}{no}}

efax_rejected:
driver = smartuser
prefix = fax-
transport = efax_rejected_user
no_verify
unseen

end



######################################################################
#                      ROUTERS CONFIGURATION                         #
#            Specifies how remote addresses are handled              #
######################################################################
#                          ORDER DOES MATTER                         #
#  A remote address is passed to each in turn until it is accepted.  #
######################################################################


# Remote addresses are those with a domain that does not match any item
# in the "local_domains" setting above.


# This router routes to remote hosts over SMTP using a DNS lookup with
# default options.
# This first entry can be used to dump all mail to a well connected host,
# as long as we're allowed relay through.

#smart_route:
#  driver = domainlist
#  transport = remote_smtp
#  host_find_failed = defer
#  route_list = "*  ns1.wananchi.com  bydns_a"                              


lookuphost:
driver = lookuphost
transport = remote_smtp
ignore_target_hosts = 127.0.0.0/8

# This router routes to remote hosts over SMTP by explicit IP address,
# when an email address is given in "domain literal" form, for example,
# <user@???>. The RFCs require this facility. However, it is
# little-known these days, and has been exploited by evil people seeking
# to abuse SMTP relays. Consequently it is commented out in the default
# configuration. If you uncomment this router, you also need to comment out
# "forbid_domain_literals" above, so that Exim can recognize the syntax of
# domain literal addresses.

domain_literal:
driver = ipliteral
transport = remote_smtp


# This router has been added for offloading mail for certain sites to
# better connected hosts and make it their responsibility to deliver to 
# the destination, eg AfricaOnline and Net2000ke. It also
# delivers mail for static IP's, 'cos we don't advertise them as
# primary MX's, for both security and speed.                                   


artificial_route:
  driver = domainlist
  transport = remote_smtp
# route_file = /usr/local/etc/exim/smtproutes.cdb 
# search_type = cdb
  route_file = /usr/local/etc/exim/smtproutes
  search_type = lsearch                                                    


#Hylafax settings

#fax:
#   driver = domainlist
#   transport = fax
#   route_list ="*.fax"                                                        



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 1 hour 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
# ------               -----       -------


wananchi.com        *           F,1h,10m
wananchi.co.ke        *           F,5d,24h
*            *               F,2h,15m; G,16h,1h,1.5; F,4d,8h


# Immediately bounce messages if mailbox is over quota.

*            quota


end


######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################


# There are no rewriting specifications in this default configuration file.
#
# Set of rules for mapping certain local users to some postmasters
# @virtual domains who do ETRN but don't pop from dialup account

# Added by Wash - removes asterisks from Sender and From fields

^([^\*]+)\*(.*)@(.*)$         $1@$domain             EFs
end




######################################################################
#                   AUTHENTICATION CONFIGURATION                     #
######################################################################


# There are no authenticator specifications in this default configuration file.
## new auth section ##

plain:
driver = plaintext
public_name = PLAIN
server_condition = ${if crypteq{$3}{${lookup{$2}lsearch{/etc/exim/authtab}{$value}}}{1}{0}}
server_set_id = $2

login:
driver = plaintext
public_name = LOGIN
server_prompts = Username:: : Password::
server_condition = ${if crypteq{$2}{${lookup{$1}lsearch{/etc/exim/authtab}{$value}}}{1}{0}}
server_set_id = $1

#cram:
# driver = cram_md5
# public_name = CRAM-MD5
# server_secret = ${lookup{$1}lsearch{/etc/exim/authtab-cram_md5}{$value}}
# server_set_id = $1

end
# End of Exim configuration file