rendered paste bodyexim.conf:
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
hide mysql_servers = server/maildb/username/password
smtp_enforce_sync = false
primary_hostname = apnicsolutions.com
domainlist local_domains = @ : ${lookup mysql {SELECT userid FROM domains \
WHERE userid="${quote_mysql:${domain}}" }}
domainlist relay_to_domains =
#hostlist relay_from_hosts = 127.0.0.1
# domainlist relay_to_domains = *.myco.com : my.friend.org
hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/16
acl_smtp_rcpt = acl_check_rcpt
#qualify_domain = mindtricks.mcxnet.com
# qualify_recipient =
# allow_domain_literals
never_users =
untrusted_set_sender = *
local_sender_retain = true
local_from_check = false
# 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 = *
#rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 12h
timeout_frozen_after = 1d
# freeze_tell = postmaster
####################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_check_rcpt:
accept hosts = :
deny local_parts = ^.*[@%!/|] : ^\\.
accept local_parts = postmaster
domains = +local_domains
require verify = sender
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
accept hosts = : +relay_from_hosts
accept condition = \
${if \
and {\
{match{$recipients}{\N<?(abuse|postmaster)@(.+\.)?sput\.nl>?\N}}\
{match{$h_to:}{\N>?(abuse|postmaster)@(.+\.)?sput\.nl<?\N}}\
}\
{yes}{no}}
deny message = This message scored $spam_score spam points. See http://www.sput.nl/spam/
condition = ${if >{$spam_score_int}{50}{1}{0}}
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
spamcheck_router:
no_verify
check_local_user
condition = "${if and { \
{!def:h_X-Spam-Flag:} \
{!eq {$received_protocol}{spam-scanned}} \
{eq {${lookup mysql{SELECT spam FROM users WHERE id='${quote_mysql:${local_part}@${domain}}'}}}{1}} \
} {1}{0}}"
driver = accept
transport = spamcheck
#spamdeliver_router:
# driver = redirect
# allow_fail
# allow_defer
# condition = "${if match {$h_x-spam-status:}{Yes} {1}{0} }"
# data = ${lookup mysql{ SELECT maildir FROM users \
# WHERE id='${quote_mysql:${local_part}@${domain}}' }}/.Junk
# file_transport = address_directory
# directory_transport = address_directory
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
file_transport = address_file
pipe_transport = address_pipe
condition = ${if eq {$domain}{$primary_hostname} {yes}{no} }
#localuser:
# driver = accept
# check_local_user
# group=mail
# transport = local_delivery
# condition = ${if eq {$domain}{$primary_hostname} {yes}{no} }
#userforward:
# driver = redirect
# check_local_user
# file = $home/.forward
# no_verify
# no_expn
# check_ancestor
## allow_filter
# file_transport = address_file
# directory_transport = address_directory
# reply_transport = address_reply
userforward:
driver = redirect
allow_fail
allow_defer
condition = "${lookup mysql{SELECT forward_enable FROM users WHERE id='${quote_mysql:${local_part}@${domain}}' }}"
# condition = ${lookup{$local_part@$domain}lsearch{/email/forward_enable}}
file = /email/${domain}/${local_part}.forward
user = ${local_part}-${domain}
no_verify
no_expn
allow_filter
file_transport = address_file
pipe_transport = address_pipe
directory_transport = address_directory
reply_transport = address_reply
virtual_userforward:
driver = redirect
data = ${lookup mysql{SELECT forward FROM fw WHERE \
email='${quote_mysql:${local_part}@${domain}}'}}
virtual_user:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{ SELECT maildir FROM users \
WHERE id='${quote_mysql:${local_part}@${domain}}' }}
file_transport = address_directory
directory_transport = address_directory
virtual_all_aliases:
driver = redirect
data = ${lookup mysql{SELECT forward FROM fw WHERE email= \
'@${quote_mysql:${domain}}'}}
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transports
remote_smtp:
driver = smtp
spamcheck:
driver = pipe
command = /usr/exim/bin/exim -oMr spam-scanned -bS
use_bsmtp = true
transport_filter = /usr/bin/spamc
home_directory = "/tmp"
current_directory = "/tmp"
user = mail
group = mail
log_output = true
return_fail_output = true
return_path_add = false
message_prefix =
message_suffix =
local_delivery:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
address_pipe:
driver = pipe
return_fail_output
return_path_add
environment = EXTENSION=${substr_1:$local_part_suffix}
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_directory:
driver = appendfile
maildir_format
delivery_date_add
envelope_to_add
return_path_add
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
# 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 6 hours until 4 days have passed since the first
# failed delivery.
# Domain Error Retries
# ------ ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,2d,3h
######################################################################
.
.
.
User's filter file:
#Exim filter
if
$h_X-Spam-Status: CONTAINS "Yes"
or
"${if def:h_X-Spam-Flag {def}{undef}}" is "def"
then
#just deliver as normal
finish
endif
unseen deliver <email@forward.com>
deliver <email@local.com>
finish
I'm guessing this filter is probably incorrect however