[exim] .forward being ignored

Top Page
Delete this message
Reply to this message
Author: Yan Seiner
Date:  
To: exim-users
Subject: [exim] .forward being ignored
I'm stumped, mostly because I've never run across this.

I am running Exim 4.82. It works, except that my .forward file is being
ignored. It tests fine, and when I feed it manually it works.

yan@selene:~$ /usr/lib/sendmail -bf ~/.forward <mail/Spam.test
Sender taken from "From " line
Return-path copied from sender
Sender      = mail@???
Recipient   = yan@???
Testing Exim filter file "/home/yan/.forward"


Save message to: /home/yan/mail/Junk
Filtering set up at least one significant delivery or other action.
No other deliveries will occur.
You have new mail in /var/mail/yan

And when I intentionally break it it barfs:

yan@selene:~$ /usr/lib/sendmail -bf ~/.forward <mail/Spam.test
Sender taken from "From " line
Return-path copied from sender
Sender      = mail@???
Recipient   = yan@???
Testing Exim filter file "/home/yan/.forward"


Filter error: unknown filtering command "ifxxx" near line 2 of filter file
You have new mail in /var/mail/yan
yan@selene:~$

But exim ignores it. Any ideas why?

yan@selene:~$ cat .forward
# Exim filter
if $header_X-Spam-Flag: contains "YES"
then
    save $home/mail/Junk
endif
if $header_X-DSPAM-Result: contains "Spam"
then
    save $home/mail/Junk
endif
if $header_Precedence: contains "list"
then
    save $home/mail/Lists
endif
if $header_Precedence: contains "bulk"
then
    save $home/mail/Lists
endif


Here's the pertinent part of the config:

# This router handles forwarding using traditional .forward files in users'
# home directories. It also allows mail filtering with a forward file
# starting with the string "# Exim filter" or "# Sieve filter".
#
# The no_verify setting means that this router is skipped when Exim is
# verifying addresses. Similarly, no_expn means that this router is 
skipped if
# Exim is processing an 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 four transports specified at the end are those that are used when
# forwarding generates a direct delivery to a directory, or a file, or to a
# pipe, or sets up an auto-reply, respectively.
#
userforward:
   debug_print = "R: userforward for $local_part@$domain"
   driver = redirect
   domains = +local_domains
   check_local_user
   file = $home/.forward
   require_files = $local_part:$home/.forward
   no_verify
   no_expn
   check_ancestor
   allow_filter
   forbid_smtp_code = true
   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.