Knowledge base

<domain>

critical

Settings applied to the queue for a specific receiver
The receiver’s queue and block merging

In PowerMTA a queue is a “receiver + sending address” pair. The <domain> block describes how to behave with a specific receiver: how many connections to open, how fast to send, how long to retry after a refusal, whether to sign messages and what to write to accounting.

There can be many blocks, and they add up. Values from matching blocks merge from general to specific: <domain *> sets the base, <domain yahoo.com> refines it for one receiver. The most precise match wins, and the order of lines in the file plays no part — a common mistake when reading someone else’s config.

Example configuration
# the base for all receivers
<domain *>
    max-smtp-out 15
    max-msg-rate 10/m
    retry-after 10m
</domain>

# a strict receiver gets its own
<domain yahoo.com>
    max-smtp-out 5
</domain>
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
Block directives: 135
Signing 22
dkim-signcriticalset by the HubWhether to sign messages to this receivercheck-spf-outboundWhether to check SPF of your own mail before sending to this receiverdkim-identityIn whose name the signature is madearc-identityOn whose behalf forwarding is sealedarc-signWhether to seal messages to this recipient with a forwarding signaturedkim-add-body-limitWhether to sign only the beginning of the body, allowing appending at the bottomdkim-disallow-adding-headersWhich headers should break the signature if they are added after itdkim-headersWhich message headers are covered by the signaturedkim-identity-fallbackA fallback signing name if no key was found for the main onearc-algorithmWhich algorithm the forwarding attestation is computed witharc-body-canonHow the message body is canonicalized before the forwarding attestationarc-expire-afterAfter how long the forwarding attestation stops being validarc-headersWhich headers fall under the forwarding attestationarc-headers-canonHow headers are canonicalized before the forwarding attestationarc-identity-fallbackA fallback attestation identity if no key was found for the main onearc-oversigned-headersWhich headers should break the attestation if they are added after itdkim-add-timestampWhether to put the moment of its creation into the signaturedkim-algorithmWhich algorithm the signature is computed withdkim-body-canonHow tolerant the signature is of edits to the message body in transitdkim-expire-afterAfter how long the signature stops being validdkim-headers-canonHow tolerant the signature is of edits to headers in transitdkim-query-methodHow the recipient should look up the public key
Delivery 22
allow-cancel-during-transferWhether a connection may be cut while the message body is being transferredassume-delivery-upon-data-termination-timeoutset by the HubWhether to consider delivery successful when confirmation never arrivedauth-usernameThe user name the node uses to identify itself to the receivercommandWhich program to run for messages of this queueconnect-timeoutHow long to wait for an outgoing connection to be establishedfile-destinationWhere the queue writes files — a directory or a file namefile-formatIn what form the queue writes messages to filesmax-errors-per-connectionset by the HubHow many recipient errors break the connectionretry-upon-new-mailWhether to try delivery right away when a new message arrives in a stalled queuesmtp-421-means-mx-unavailableset by the HubWhether to move on to the next MX server after receiving a 421 responsesmtp-data-termination-timeoutHow long to wait for the final 250 after sending the message bodytypeHow this queue hands off messages — SMTP, a file, a program, a webhook or not at allverp-defaultWhether to write the recipient into the return address of messages to this recipient domaindata-send-timeoutHow long to wait for the next piece of the message body to be sentdefault-smtp-portWhich port to connect to if no explicit server list is setignore-8bitmimeDo not tell the receiver that the message body is eight-bitignore-chunkingDo not use the CHUNKING extension even if the receiver announced itignore-dsnDo not use the DSN extension even if the receiver announced itignore-pipeliningDo not use the PIPELINING extension even if the receiver announced itpix-bug-workaroundWhether to send the final dot as a separate packet for the sake of old Cisco PIX firewallssmtp-greeting-timeoutHow long to wait for the 220 greeting after the connection is establishedtrack-jobsWhether to show the receiver’s jobs on the monitor page
Limits 20
max-msg-ratecriticalset by the HubHow fast to hand messages to this receivermax-smtp-outcriticalset by the HubHow many simultaneous connections the node keeps to one receiverbackoff-max-msg-rateset by the HubWhich rate applies while the queue is in backoffbackoff-max-smtp-outset by the HubHow many simultaneous connections to keep while the queue is in backoffmax-connect-rateset by the HubHow fast to open new connections to this recipient domainsource-ip-max-connect-rateHow fast to open connections from one outgoing addresssource-ip-max-msg-rateHow many recipients per interval to attempt from one outgoing addresssource-ip-max-smtp-outHow many simultaneous connections to this recipient domain from one outgoing addressbackoff-max-connect-rateWhat connection-opening rate applies while the queue is in backoffbackoff-max-data-volume-rateWhat volume rate applies while the queue is in backoffconnection-idle-timeoutset by the HubHow long to keep an idle connection open waiting for messagesmax-data-volume-rateset by the HubHow many bytes per interval, counting only successful deliveriesmax-msg-per-connectionset by the HubHow many messages go out over one connection before reconnectingmax-rcpt-per-transactionHow many recipients are passed to the receiver in one transfersmtp-out-rampup-intervalset by the HubThe minimum pause before opening the next connection of this queuesource-ip-max-data-volume-rateHow many bytes per interval are allowed from one outgoing addressmax-rcpt-per-messageA second name of the max-rcpt-per-transaction directivebackoff-max-msg-per-hourdeprecatedBackoff mode rate — an obsolete form with a hard-wired hourmax-msg-per-hourdeprecatedMessage rate to the receiver — a deprecated form with a hard-coded hourmax-smtp-out-per-source-ipdeprecatedDeprecated in favor of source-ip-max-smtp-out