[Mimedefang] local rule with wildcard checking subject

MAYER Hans Hans.Mayer at iiasa.ac.at
Thu Oct 18 10:53:51 EDT 2018

Dear All,

Many thanks to all of you for support. 
It's working now. Obviously I made a mistake in my previous settings. 
I was looking for a single character wildcard and a dot "." is doing the job well. 

Have a nice day
// Hans 

-----Original Message-----
From: MIMEDefang <mimedefang-bounces at lists.roaringpenguin.com> On Behalf Of Bill Cole
Sent: Tuesday, October 16, 2018 11:36 PM
To: mimedefang at lists.roaringpenguin.com
Subject: Re: [Mimedefang] local rule with wildcard checking subject

On 16 Oct 2018, at 4:21, MAYER Hans wrote:

> Dear All,
> I am using mimedefang version 2.79 in combination with SpamAssassin.
> I have several rules defined in /etc/mail/sa-mimedefang.cf which all 
> works fine.
> Now I tried to define a rule testing a subject with a wildcard.
> But all my tests failed. Is there a way to define a wildcard checking 
> the subject line ?
> I also had an issue to escape the '#' character.  Any idea how to do ?
> Any help is welcome.

This is really better suited to the SpamAssassin Users List (see
https://wiki.apache.org/spamassassin/MailingLists) but it seems simple enough that I expect Dianne won't mind an answer here...

The file /etc/mail/sa-mimedefang.cf is a SpamAssassin config file, so all its directives are SA directives and all rules are SA rules. As such, they use Perl regular expressions (a.k.a. "regex") for pattern matching. If you are unfamiliar with regular expressions, 'man 7 regex' 
on Linux or 'man 7 re_format' on MacOS or any of the *BSDs will give you the standard for regex and 'man perlre' for the Perl variations.

To illustrate an answer to your wildcard question, here's the definition of a rule named "SCC_STOCK_ROCK" that I once found useful:

describe  SCC_STOCK_ROCK	Skater dood wording for stock tips
header    SCC_STOCK_ROCK	Subject =~ /St0ck .* R0ck/
score     SCC_STOCK_ROCK	2.0

Technically the 'describe' and 'score' lines are optional, with the default score of a rule being 1.0.

The 'header' line is the meat. There are 3 parts after the rule name:

1. "Subject" is the name of the header to be matched.
2. "=~" is the Perl regular expression match operator.
3. "/St0ck .* R0ck/" is a regular expression delimited by '/'.

The '.*' in that regex means any character (.) repeated any number of times (*) and because the regex. is not "anchored" at either end there's an implied '.*' before and after it, so the whole regex would match any of these:

Subject: H0t St0ck that's sure to R0ck!!!
Subject: St0ck will R0ck
Subject: St0ck  R0ck!!!

Note the 2 spaces in the last one...
It would NOT match:

Subject: St0ck R0ck
Subject: St0cks that R0ck

The '#' character is a Perl metacharacter (marking the start of a
comment) so it needs to be escaped with a preceding backslash (\) as does any other Perl metacharacter (notably % and @) and any character that can have special meaning in regex syntax: ./(){}[]&^$?+*\|

NOTE: If there is a disclaimer or other legal boilerplate in the above message, it is NULL AND VOID.  You may ignore it.

Visit http://www.mimedefang.org and http://www.roaringpenguin.com MIMEDefang mailing list MIMEDefang at lists.roaringpenguin.com

More information about the MIMEDefang mailing list