On Wed, 2020-12-23 at 20:44 +0100, Benny Pedersen wrote: Fhis requirement is almost exactly rgew opposite of something I've been running for years:
- In my case I run every message through SA, diverting spam into a quarantine directory and passing the rest to Postfix for delivery. - In your case you want to pass mail, which is being sent to a small set of recipients on your server directly to your local MTA for delivery. The rest gets run through SA before being handed to your local MTA, again for local delivery. The logic needed to do both tasks would seem to be essentially the same: read the names of all recipients that are NOT scanned by SA into a searchable no-scan recipients list. for every message received read the message into a buffer look up its recipient in the no-scan recipients list if the recipient is in the list pass the message on for delivery by writing it to stdout else pass the message to SA for markup as ham or spam via spamc i.e, pipe the buffer content into spamc's stdin channel receive the marked-up message back from spamc i.e. read spamc's stdout channel into a buffer fi pass the marked-up message to your MTA for delivery i.e write the buffer content to stdout clear the buffer end-for Assuming that you're using Postfix as your MTA, you just replace spamc in the Postfix process chain with a program that does the above. In a little more detail: - This implies writing a program in C, Java or (possibly) Python or Perl. - if your list of no-filter recipients has more than about ten entries, consider using a B-tree to efficiently search the list. In C use bsearch() and in Java use a TreeMap - both are very fast. - the message buffer needs to be self-extending to match any received message. This is a no-brainer in Java (all Strings automatically resize to hold what is put in them, but needs a little more care if written in C because you don't know how big an incomming message is until you've read it. - this approach doesn't need any modifications to your existing SA configuration I hope this gives you some useful ideas. Martin