On 06/13/2015 06:06 AM, Viktor Dukhovni wrote: > If the expected maximum downtime for the backend system is well > below the positive cache time on the frontend, you can ignore the > possibility of backend downtime. Once the cache is primed with > all the addresses that routinely receive email, the backend system > is not needed to validate incoming email.
> Otherwise, there's only one correct solution: Automate replication > of recipient validation tables from the backend system to the > front-end system. Stop using recipient verification probes, and > just use local (replicated) tables on both systems. Anything else > has warts. You can tweak the exact manner in which you lose, but > you can't not lose. > On 06/13/2015 06:08 AM, Wietse Venema wrote: > Question: an up-stream server must not reject unverified recipients > when the down-stream server is unavailable. > > Answer: let the address verification cache (address_verify_map) in > the up-stream server work for you. > > Once an address is stored in the address verification cache (this > requires that the down-stream mail server is sometimes available) > the address remains cached for 31 days. > > Also, when the down-stream mail server is available, the up-stream > server will "refresh" a cached address that is older than 15 days. > This refresh happens only when an address receives mail; an inactive > address will be dropped from the cache when it is older than 31 days. > > If you are really worried that a "new" or "inactive" user isn't > cached, you could use a small program that runs on the down-stream > server and that sends "rcpt to" commands to the up-stream mail > server. That script has to respect the smtpd_recipient_limit setting > (default: 1000). Useful reminders. Particularly "You can tweak the exact manner in which you lose, but you can't not lose." I'd missed the 31/15 days cache expiry durations. That helps evaluate risk. At those cache times, the 'healing & recovery' mechanisms inherent in recipient validity caching and sender redelivery appear more than adequate. For this particular implementation, however, the backend is considered unreliable. I'd rather deploy a standalone, higher-availability solution, but will have to leave that for other deployments. I prefer the 'clean & simple' nature of remote address verification, and have a general reticence to complicating the front-end with yet another database or sync process for table replication. However, a periodically sync'd list of users appears to ameliorate the problem. Of the 2 simplest options (1) warming the already in-place 'address verification cache (address_verify_map) in the up-stream server', by sending emails from the backend to the frontend clustered into recipient lists < its smtpd_recipient_limit & (2) rsync-ing a simple list of known users from the backend to the frontend in/as a regularly postmap'd lmdb table or a no-reload-needed pcre table, either replacing, or complementing (not sure yet if that's wise), recipient verification both are trivial scripts. Is there any particular preference for using one over the other?