sa_userconf_maps and sa_username_maps syntax question

Matt Goodman matt at
Fri Sep 2 13:14:47 CEST 2011

OK. So is it correct in saying the following:

@sa_userconf_maps matches SA user preferences by domain
@sa_username_maps matches SA Bayes database by email address 

As I understand it - in your regex example, amavisd-new will simply match
the recipient email address to the corresponding record in the bayes
database, correct? If this is not correct, any insight would be appreciated.
Again, I am not looking for a shortcut - only to understand the way the
subroutines were intended for use.

Ultimately I am trying to have a flexible virtual user email system with
per-user spamassassin preferences and per-user Bayesian filters, allowing
people to "train" their own Bayes tokens  by "learning" messages which they
mark as Spam and "learning" those which are ham, while storing all that
information into a SQL database. The assumption here is that the Bayesian
classification will be more accurate to the individual user, rather than a
one-size-fits all for Bayes seen/tokens.

However, amavisd-new is my chosen mail filter system, simply because of how
flexible it is, and so far the help I have received here indicates that I
have made the right choice. I will share any findings that I learn back to
the community. Thank you again.


-----Original Message-----
From: Renato Botelho [mailto:rbgarga at] 
Sent: Friday, September 02, 2011 12:07 AM
To: Matt Goodman
Cc: amavis-users at
Subject: Re: sa_userconf_maps and sa_username_maps syntax question

Hello Matt

On Fri, Sep 2, 2011 at 1:51 AM, Matt Goodman <matt at> wrote:
> Thank you very much for your reply. I understand a little bit better now.
> However, in example one below you listed a single domain name using 
> the method ‘sql’. What if I have dozens of domains, with them being 
> added/removed somewhat regularly by Postfix Admin (I can perceive 
> adding at least 1-2 domains per month) to this system. Isn’t there a 
> way to tell amavisd-new that all domains in the lookup_sql_dsn? The 
> table is actually called ‘domain’ inside the ‘postfixadmin’ db.

If all domains are using sql, you can have:

@sa_userconf_maps = (
      '.*' => 'sql:',

> For @sa_username_maps – I do not understand the syntax of that at all. 
> Could you explain it in just a little more detail so I actually 
> understand what’s being done, as opposed to just copying your example.
Many thanks.

In this case, since it is a single domain, i have personal userprefs set
just for uset, without domain, i mean, if email is user at prefs on SQL
is set just for user, so, this map says exactly it, for user at, look
just for user at SQL database.

@sa_username_maps = new_RE (
  [ qr'^([^@]+ at .*)'i => '${1}' ]

> Thank you for the link to the patch, that will be helpful. And yes I 
> have followed the SpamAssassin SQL README and have my db schema as-per 
> those documents. A table called ‘userpref’ with one line per SA 
> preference. I have even tested this using spamc and validated that the 
> SQL configuration is good.

What that patch does is making amavis respect personal required_score
setting instead of use a global value for everyone, and the version sent to
this thread has a small issue if you use it with spamassassin < 3.0.

> I am just a little lost as to the @sa_username_maps syntax (looks like 
> regex to me), and I will read through the patch to try and determine 
> what amavisd-new is looking for. In the meantime, if someone can help 
> me understand how one might use all the domains in the postfixadmin 
> table instead of one domain per line of @sa_userconf_maps, that would be

Renato Botelho

More information about the amavis-users mailing list