Five directives fill a list: an address or pattern, a whole domain, addresses from a file and two hashed forms.
The name decides what the list is for. A named list is attached by name — suppression-lists for suppression, allowed-sender-lists for allowed senders. An unnamed one is written inside a bounce or complaint processor block and selects the mail that processor parses.
The hashed form deserves more attention than the manual gives it. The address is lowercased, hashed with SHA256 and encoded as BASE64URL; the engine hashes the address being checked and compares the hashes. That is, a suppression list can be handed over and stored without a single readable address in it. Patterns do not apply to hashes — only whole addresses.
Three tasks on one construct — what to suppress, who is allowed to send and which inbound mail to parse. That is why this is a mechanism, not a detail of one of the three.
The mechanism has no values of its own — they are set by the five directives inside. Choosing the form:
| Form | What goes in | Feature |
|---|---|---|
| address | an address, a local part or a pattern | the most flexible, readable by anyone |
| domain | a whole domain | one line instead of a listing |
| address-file | addresses from a file, one per line | the configuration does not grow |
| hashed-address | a hash of a whole address | no readable addresses in the file |
| hashed-address-file | hashes from a file | the same for a long list |
When to use hashes. When the list must not be shown — for example, a client requires its suppression to be honored but does not hand over the addresses. The node will enforce a list it cannot read.
# an unnamed list selects mail for the processor — this is how the Hub writes it <bounce-processor> deliver-matched-email no deliver-unmatched-email no <address-list> address /^bounce@bounce\./ </address-list> </bounce-processor> # a named list is attached by name — this is how suppression is enabled <address-list suppression1> hashed-address iZ0zh6XFp1VdUdLwoLe1Djl_5IH9mlj6-zibfclOEfY~ </address-list>
what people get wrong and how it ends3 mistakes▶
§ 3.3.5.2
§ 3.3.5
our experience
3 relations
Two inbound report processors and what to do with themAn unnamed list inside a processor decides which inbound mail it parses. § 3.3.5suppression-lists<source>A named list is attached to a source with this line — this is how suppression is enabled. § 3.3.7.41
address<address-list>The main one of the five lines that fill a list. § 3.3.5.1allowed-sender-lists<source>Lists are declared with an address list block and filled with addresses, domains and patterns. § 3.3.7.43suppression-lists<virtual-mta>The line refers to lists by name; the lists themselves are declared separately. § 3.3.12.15Address lists through the configuration APIThe mechanism that is visible here. § 8.3.2Two attachment points — and two different behaviorsThe address list itself; suppression is only one of its three uses. § 11.15
pmtahashedAddress test@FOO.com
3 articles
◇Configuration through the API and the file do not reconcileObjects created through the configuration interface cannot be edited in the file: two sources of truth about the configuration do not reconcile.◇Two attachment points — and two different behaviorsA list attached to a source rejects the recipient at submission or bounces the message later; attached to a sending address or pool, it always accepts and then bounces.◇A license for a fleet, not for a serverThe license is not bound to a server: it is installed on as many machines as the instance limit allows, and the nodes send volume statistics to the vendor every hour.