Kind of related to bug 1909224.
I've read through the source of this milter at some length and created a patch that adds a new directive "PassAfterMailerTable" to the configuration file which causes a SMFIS_CONTINUE (carry on processing as normal) if the domain is not found in mailertable after a virtusertable lookup, thereby avoiding the slow MX and try-all-MX problems, but also avoiding it in some places where it might not exist.
It solves the problem for me of the system trying all sorts of MX records for domains that I don't want it to, although not in the ideal way.
Although, there's a trivial issue in that the patch causes extraneous log entries of "PassAfterMailerTable on ..." if the virtusertable contains an entry for a domain/address which is then non-local, and non-mailertable.
I've also added some comments to the README file which people may find useful (I'm pretty sure they are right, but you might like to check as I haven't tested them yet), a changelog entry for this patch, and some stuff to the TODO list which I may find time to add myself in a later patch.
However I would appreciate your thoughts on the best way to incorporate a '@CheckOnly' directive for domains as 'hard-coding' it to the config file which would require a restart of the milter seems to be a bad idea.
K.
Logged In: YES
user_id=99923
Originator: YES
Also, might be good to use IO::Socket->connected() tests in check_email_address_on_server() to make sure the remote server has not 'gone away', as I seem to be getting quite a lot of milter internal errors from that scenario.
revised patch for recipient-only
Logged In: YES
user_id=99923
Originator: YES
Makes no sense for this to be done on sender verify, as senders won't be in your mailertable, whereas known private-forward recipients will be, hence I've rewritten it again to use separate callbacks for the rcpt and mail from, which just flag PAMT differently.
File Added: bm-milter-1.0.5-passafter.patch