[Exim] Newbie Forwarding issue

Top Page
Delete this message
Reply to this message
Author: James Herschel
Date:  
To: exim-users
Subject: [Exim] Newbie Forwarding issue
Hello,

I've Googled for some time and looked at the FAQ, and I'm embarassed to
say that I can't figure out how to forward emails for a particular user
to a non-local domain.

I have the .forward file in the users homedir and my log file said
"Mailing to remote domains not supported". So I added "nonlocal.com" to
my local_domains. My logs now say "Unrouteable address" instead, so I
tried adding "nonlocal.com" to my relay_to_domains as well, but I'm
still receiving the error.

Can someone please help me forward emails to user@??? to
user@??? as they arrive?

I'm using Debian Sarge-rc2 with exim4 4.31-2 and the exim4-daemon-heavy
package.

Thanks in advance!

James

Here is my exim4.conf file:
#########
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# this file is generated dynamically from the files in
# CONFDIR/conf.d/ or /etc/exim4/exim4.conf.template respectively and
# /etc/exim4/update-exim4.conf.conf
# Any changes you make here will be lost.
# See /usr/share/doc/exim4-base/README.Debian.gz and update-exim4.conf(8)
# for instructions of customization.
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
#########

exim_path = /usr/sbin/exim4

CONFDIR = /etc/exim4

MESSAGE_SIZE_LIMIT = 10M

domainlist local_domains =
@:megatron:localhost:leasecor.net:leasecor.org:mail.leasecor.n
et:mail.leasecor.org:videotron.ca

domainlist relay_to_domains = videotron.ca

hostlist relay_from_hosts = 127.0.0.1 : ::::1 :

qualify_domain = megatron

DCreadhost =

DCsmarthost =

local_interfaces = 192.168.0.11

LOCAL_DELIVERY=maildir_home

spamd_address = 127.0.0.1 783

#av_scanner = clamd:127.0.0.1 3310
av_scanner = clamd:/var/run/clamav/clamd.ctl

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

DCconfig_local = 1

acl_smtp_rcpt = acl_check_rcpt

acl_smtp_data = acl_check_data

.ifndef DC_minimaldns
host_lookup = *
.endif

rfc1413_hosts = *
rfc1413_query_timeout = 30s

ignore_bounce_errors_after = 2d

timeout_frozen_after = 7d

freeze_tell = postmaster

.ifndef SPOOLDIR
SPOOLDIR = /var/spool/exim4
.endif
spool_directory = SPOOLDIR

trusted_users = uucp

begin acl

acl_whitelist_local_deny:
  accept hosts = ${if exists{CONFDIR/local_host_whitelist}\
                        {CONFDIR/local_host_whitelist}\
                        {}}
  accept senders = ${if exists{CONFDIR/local_sender_whitelist}\
                        {CONFDIR/local_sender_whitelist}\
                        {}}


acl_check_rcpt:
accept hosts = :

  deny    domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]
          message       = restricted characters in address


  deny    domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
          message       = restricted characters in address


  accept local_parts = postmaster
         domains = +local_domains


  deny message = sender envelope address $sender_address is locally
blacklisted here. If
you think this is wrong, get in touch with postmaster
       !acl = acl_whitelist_local_deny
       senders = ${if exists{CONFDIR/local_sender_blacklist}\
                             {CONFDIR/local_sender_blacklist}\
                             {}}


  deny message = sender IP address $sender_host_address is locally
blacklisted here. If y
ou think this is wrong, get in touch with postmaster
       !acl = acl_whitelist_local_deny
       hosts = ${if exists{CONFDIR/local_host_blacklist}\
                             {CONFDIR/local_host_blacklist}\
                             {}}


  accept domains = +local_domains
         endpass
         message = unknown user
         verify = recipient


  accept domains = +relay_to_domains
         endpass
         message = unrouteable address
         verify = recipient


accept hosts = +relay_from_hosts

accept authenticated = *

deny message = relay not permitted

acl_check_data:
   warn condition = ${if !def:h_Message-ID: {1}}
        hosts = +relay_from_hosts
        message = Message-ID: <E$message_id@$primary_hostname>


        # Always mark email with X-Spam Score and X-Spam header information
        warn message = XSpamScore: $spam_score
                spam = nobody:true
        warn message = XSpamReport: $spam_report
                spam = nobody:true


        # Rewrite the email's Subject if Spam (requires rewrite in local.cf)
        warn message = Subject: **** SPAM **** $h_Subject
                spam = nobody


        # Do not scan messages submitted from our own hosts
        # and locally submitted messages. Since the DATA ACL
        # is not called for messages not submitted via SMTP
        # protocols, we do not need to check for an empty
        # host field.
        accept  hosts = 127.0.0.1:+relay_from_hosts


        # Unpack MIME containers and reject file extensions
        # used by worms. Note that the extension list may be
        # incomplete.
        deny  message = $found_extension files are not accepted here
              demime = com:vbs:bat:pif:scr


        # Reject messages that have serious MIME errors.
        # This calls the demime condition again, but it
        # will return cached results.
        deny  message = Serious MIME defect detected ($demime_reason)
              demime = *
              condition = ${if >{$demime_errorlevel}{2}{1}{0}}


        # Reject messages containing malware.
        deny message = This message contains malware ($malware_name)
                demime = *
                malware = *


        # Reject spam messages. Remember to tweak your
        # site-wide SA profile. Do not spam-scan messages
        # larger than eighty kilobytes.
        #deny message = Classified as spam (score $spam_score)
        #     condition = ${if <{$message_size}{80k}{1}{0}}
        #     spam = nobody:true
        deny message = This message scored $spam_score spam points.
                spam = nobody:true
                condition = ${if >{$spam_score_int}{120}{1}{0}}



        # Finally accept all other messages that have
        # made it to this point


        accept


begin routers

.ifdef DCconfig_internet

dnslookup_relay_to_domains:
driver = dnslookup
domains = ! +local_domains : +relay_to_domains
transport = remote_smtp
same_domain_copy_routing = yes
no_more

dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  same_domain_copy_routing = yes
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
                        172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16
  no_more


.endif

.ifdef DCconfig_local
nonlocal:
driver = redirect
allow_fail
data = :fail: Mailing to remote domains not supported
no_more
domains = ! +local_domains

.endif

.ifdef DCconfig_smarthost DCconfig_satellite
smarthost:
driver = manualroute
domains = ! +local_domains
transport = remote_smtp
route_list = * DCsmarthost
host_find_failed = defer
same_domain_copy_routing = yes
no_more

.endif

real_local:
debug_print = "R: real_local for $local_part@$domain"
driver = accept
domains = +local_domains
local_part_prefix = real-
check_local_user
transport = LOCAL_DELIVERY

system_aliases:
debug_print = "R: system_aliases for $local_part@$domain"
driver = redirect
domains = +local_domains
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
file_transport = address_file

.ifdef DCconfig_satellite
hub_user:
debug_print = "R: hub_user for $local_part@$domain"
driver = redirect
domains = +local_domains
data = ${local_part}@DCreadhost
check_local_user

.endif

userforward:
  debug_print = "R: userforward for $local_part@$domain"
  driver = redirect
  domains = +local_domains
  check_local_user
  file = $home/.forward
  no_verify
  no_expn
  check_ancestor
  allow_filter
  directory_transport = address_directory
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply
  skip_syntax_errors
  syntax_errors_to = real-$local_part@$domain
  syntax_errors_text = \
    This is an automatically generated message. An error has\n\
    been found in your .forward file. Details of the error are\n\
    reported below. While this error persists, you will receive\n\
    a copy of this message for every message that is addressed\n\
    to you. If your .forward file is a filter file, or if it is\n\
    a non-filter file containing no valid forwarding addresses,\n\
    a copy of each incoming message will be put in your normal\n\
    mailbox. If a non-filter file contains at least one valid\n\
    forwarding address, forwarding to the valid addresses will\n\
    happen, and those will be the only deliveries that occur.


procmail:
debug_print = "R: procmail for $local_part@$domain"
driver = accept
domains = +local_domains
check_local_user
transport = procmail_pipe
require_files = ${local_part}:${home}/.procmailrc:+/usr/bin/procmail
no_verify
no_expn

maildrop:
debug_print = "R: maildrop for $local_part@$domain"
driver = accept
domains = +local_domains
check_local_user
transport = maildrop_pipe
require_files = ${local_part}:${home}/.mailfilter:+/usr/bin/maildrop
no_verify
no_expn

local_user:
debug_print = "R: local_user for $local_part@$domain"
driver = accept
domains = +local_domains
check_local_user
local_parts = ! root
transport = LOCAL_DELIVERY

mail4root:
debug_print = "R: mail4root for $local_part@$domain"
driver = redirect
domains = +local_domains
data = /var/mail/mail
file_transport = address_file
local_parts = root
user = mail
group = mail

begin transports

address_file:
debug_print = "T: address_file for $local_part@$domain"
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add

address_pipe:
debug_print = "T: address_pipe for $local_part@$domain"
driver = pipe
return_fail_output

address_reply:
debug_print = "T: autoreply for $local_part@$domain"
driver = autoreply

mail_spool:
debug_print = "T: appendfile for $local_part@$domain"
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
mode = 0660
mode_fail_narrower = false

maildir_home:
debug_print = "T: maildir_home for $local_part@$domain"
driver = appendfile
directory = $home/Maildir
delivery_date_add
envelope_to_add
return_path_add
maildir_format
mode = 0600
mode_fail_narrower = false

maildrop_pipe:
debug_print = "T: maildrop_pipe for $local_part@$domain"
driver = pipe
path = "/bin:/usr/bin:/usr/local/bin"
command = "/usr/bin/maildrop"
return_path_add
delivery_date_add
envelope_to_add

procmail_pipe:
debug_print = "T: procmail_pipe for $local_part@$domain"
driver = pipe
path = "/bin:/usr/bin:/usr/local/bin"
command = "/usr/bin/procmail"
return_path_add
delivery_date_add
envelope_to_add

remote_smtp:
debug_print = "T: remote_smtp for $local_part@$domain"
driver = smtp

address_directory:
debug_print = "T: address_directory for $local_part@$domain"
driver = appendfile
envelope_to_add = true
return_path_add = true
check_string = ""
escape_string = ""
maildir_format

begin retry

*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h


begin rewrite

*@+local_domains ${lookup{${local_part}}lsearch{/etc/email-addresses}\
                   {$value}fail} Ffrs


*@+local_domains "${if exists {CONFDIR/email-addresses}\

{${lookup{${local_part}}lsearch{CONFDIR/email-addresses}\
                    {$value}fail}}fail}" Ffrs


.ifdef DCconfig_satellite
*@+local_domains ${local_part}@DCreadhost Ffr
.endif

begin authenticators

cram_md5:
driver = cram_md5
public_name = CRAM-MD5
client_name =
${extract{1}{:}{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}}
client_secret =
${extract{2}{:}{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}}

plain:
  driver = plaintext
  public_name = PLAIN
  client_send = "${if !eq{$tls_cipher}{}{\
                     ^${extract{1}{::}\


{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}}\
                     ^${extract{2}{::}\


{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}}\
                   }fail}"


login:
  driver = plaintext
  public_name = LOGIN
  client_send = "${if !eq{$tls_cipher}{}{}fail}\
                 : ${extract{1}{::}\


{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}} \
                 : ${extract{2}{::}\


{${lookup{$host}lsearch*{CONFDIR/passwd.client}{$value}fail}}}"