Michael F. Egglestone wrote:
Todd Lyons<[email protected]>  writes:
#There is no contains{} function provided by exim so I assume you were
#just using pseudo-code.

Thats correct. :)

# The and{} function requires you to group your
#functions differently:
#
#${if and{ \
#            {def:header_X-FC-System:} \
#            {${lookup{$h_Return-Path:}lsearch{/etc/exim4/listofnames}}} \
#       } \
#    {yes} \
#    {no} \
#}
#
#The "yes" and "no" are implied, so you could just shorten it to:
#${if and{ 
{def:h_X-FC-System:}{${lookup{$h_Return-Path:}lsearch{/etc/exim4/listofnames}}}
#} }

I'm getting closer.
Here's what works so far:

  condition = ${if and{ {def:h_X-FC-System:}{match {$h_To:}{[email protected]} 
}}}

My goal is to have a .txt file of email addresses, something like:

# cat /etc/exim4/listofnames.txt
[email protected]
[email protected]
[email protected]

And I want my ACL to to look at the text file, and if it finds any of those 
addresses in the To: header, AND, the X-FC-System header exists,
then discard the email. So far I can only hard code an email address into the 
condition line.

If I try the condition = with the lsearch, I get an error:

discard
        log_message = Email blackholed
        condition = ${if and{ {def:h_X-FC-System:}{{match 
{$h_To:}lsearch{/etc/exim4/listofnames.txt}} }}}

and here's the mainlog error when an email is sent:

temporarily rejected after DATA: failed to expand ACL string "${if and{ {def:h_X-FC-System:}{{match 
{$h_To:}lsearch{/etc/exim4/listofnames.txt}} }}}": condition name expected, but found "{match 
{$h_To:}l" inside "and{...}" condition

I'm not sure how to use "match" or "lookup" or "lsearch" properly.   ;)

Cheers,
Mike



Here are proposed examples suitable for adaptation from some that have been in production for some years now.

Note that rather than combine the conditions into one *complex* match, one uses a *preceding* 'condition' or '!condition' to include or exempt all but those of interest from further tests.

Short-circuiting simplifies coding & readability AND saves CPU cycles.
Your X_header would be used as an inclusive - or its *absence* an exclusive condition.

Headers shown here can be any header.

Undo the MUA wrap-munging in the first example below. All are one-liners:

===

  # DATA_X: Check Local NAME Blacklist for Reply-to: name.
  #
  deny
    !condition  = <whatever. WL, VIP's, your own submission clients>
    condition   = ${lookup {$reply_address}wildlsearch \
     {/var/mail/filters/REGEXP-block}{yes}{no}}
    log_message = DX $reply_address Blacklisted exact Reply-to

===

  # DATA_XX: IF message is from notorius spam-engine THEN deny
  #
  deny
    !condition  = <whatever. a few banks and airlines in this case>
    regex       = ^Received:: .*PowerMTA
    log_message = DXX PowerMTA spam engine unwanted
    message     = Sent via a Spam Engine. Get a blameless Mail Server.

===

  # DATA_XXX: IF message is from pernicious Marketeer THEN deny
  #
  deny
    condition   = <list of the $local_part of recipients who WANT this>
    regex       = ^Subject:: office*
    log_message = DXXX office rental scam rejected
    message     = Unwanted Mass market advertising.

===

CAVEAT1: 'regex' is not the cheapest of Exim's tools. OTOH, neither is a wildlsearch. But both 'JFW'

CAVEAT2: some folk are so bored as to actually LIKE unsolicited advertising, so blocking PowerMTA is not for all. Nor is it assured effective- The more clever spammers option OFF that ID string, leaving to ban their CIDR range with a different tool.

HTH,

Bill Hacker

--
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to