Knowledge base

Tune the pace for a provider

entries in this scenario: 99
bounce-after<domain>criticalset by the HubDirectiveUntil this point the message lives in the queue and takes up disk space.max-msg-rate<domain>criticalset by the HubDirectiveIt counts both deliveries and bounces — this is not “successful messages per hour.”max-smtp-out<domain>criticalset by the HubDirectiveThe main lever of pressure on the receiver: it sees the limit multiplied by the number of your addresses.retry-after<domain>criticalset by the HubDirectiveIt can be set as a sequence: 10m, 1h, 4h — and then the pauses grow from attempt to attempt.total-max-smtp-outGlobalcriticalset by the HubDirectiveKicks in first if a queue limit is higher; on a Standard license — silently.auto-mx-rollupGlobalDirectiveOne line instead of a list: the node groups the domains itself and makes up the queue name itself.backoff-max-msg-rate<domain>set by the HubDirectiveThe rate in backoff mode; without an explicit value the normal one is used — that is, the mode will slow nothing down.backoff-max-smtp-out<domain>set by the HubDirectiveThe only one in the family with its own default — 20, not “same as in normal mode.”backoff-reroute-to-virtual-mta<domain>set by the HubDirectiveThe only one in the family that does not slow down but moves: messages leave from another address while the queue is in backoff mode.backoff-retry-after<domain>set by the HubDirectiveThe retry schedule for the duration of backoff; set as a sequence.backoff-to-normal-after<domain>set by the HubDirectiveAfter what interval the queue returns to normal mode by itselfbackoff-to-normal-after-delivery<domain>set by the HubDirectiveWhether one successful delivery returns the queue to normal modebackoff-upon-all-sources-disabled<domain>DirectiveThe vendor warns directly: the queue will not come back by itself — a return timer is needed.bounce-category-patterns<domain>DirectivePuts your own reply parsing ahead of the general one — without changing whether the message bounced.bounce-upon-5xx-greeting<domain>set by the HubDirectiveThe vendor default is yes, and one misconfigured server in the MX list is enough to burn the queue.bounce-upon-no-mx<domain>set by the HubDirectiveIt accepts more than yes and no: an interval gives the domain time during which the node can try the address directly.domain<virtual-mta-pool>DirectiveRules for a receiver written inside a pool are inherited by each of its members; a member’s own block overrides them.enable-tq-record-for-proxy-failure<domain>DirectiveRecords proxy connection failures in tq accounting records; off by default and ignored without this record type.max-connect-rate<domain>set by the HubDirectiveHow fast to open new connections to this recipient domainmax-smtp-msg-rate<virtual-mta>DirectiveThe only rate limit that counts the sending address as a whole rather than each queue separately.max-smtp-out<virtual-mta>set by the HubDirectiveThe overall ceiling of the sending address. Without the line there is none at all — queues add up without limit.precached-domains-file<dns>DirectiveA text file with one domain per line; the listed domains are resolved regardless of whether there are messages for them in the queue.precached-refresh-interval<dns>DirectiveSets a refresh schedule instead of the receiver’s record time to live: these domains’ own TTL is ignored.proxy-include-tlvGlobalDirectiveAdds a field with the queue domain to the PROXY header; requires the second protocol version.proxy-retry-after<domain>DirectiveThe same retry step, but for the case when the connection through the proxy did not reach the receiver.queue-to<domain>DirectiveWritten in the block of each domain in the group: you set the shared queue name, the node does not derive it.reenable-source-ip-after<domain>DirectiveThe default is never: an address disabled without an explicit deadline will never come back.reroute-to-virtual-mta<domain>DirectiveThe queue stays the same; what changes is the second half of its name — the address messages leave from.retry-recipients-after<domain>set by the HubDirectiveA lower bound on the pause for an address that got a 4xx response — on top of the queue’s common schedule.smtp-553-means-invalid-mailbox<domain>set by the HubDirectiveA guess in place of what the receiver left unsaid — and whether the address ends up on the blocklist depends on it.smtp-pattern-list<domain>set by the HubDirectiveAttaches a named pattern list to connections with the recipient domain; it is used to parse its SMTP responses and assign actions.allow-cancel-during-transfer<domain>DirectiveThe default allows it — for a fast service shutdown; turning it off protects against duplicates but makes the node stop more slowly.assume-delivery-upon-data-termination-timeout<domain>set by the HubDirectiveA bet that the message got through: there will be no duplicates, but no truth in accounting either.auth-password<domain>DirectiveThe second half of the pair; the hash sign is not allowed in it — the engine treats it as the start of a comment.auth-username<domain>DirectiveOne of the two lines that enable outgoing authentication: either of them being non-empty is enough.backoff-max-connect-rate<domain>DirectiveThe default is tricky: without an explicit value the regular connection rate is taken — that is, backoff does not slow connections down.backoff-max-data-volume-rate<domain>DirectiveThe same default trap: without an explicit value the regular volume limit is taken.bounce-upon-transfer-failure<domain>DirectiveA choice between the risk of a duplicate at the recipient and the risk of not delivering the message at all.connect-timeout<domain>DirectiveThe first timeout of the conversation: things have not yet reached the greeting.connection-idle-timeout<domain>set by the HubDirectiveThe maximum is ten minutes: that is how long the engine is willing to keep a connection waiting for the next message.disable-mx-rollup<domain>DirectiveTurns off both kinds of combining for the domain at once — both the manual list and the automatic one.domain-macroGlobalset by the HubDirectiveDeclares a variable with a list of domains; after that its name with a dollar sign is substituted where the domains would otherwise have to be listed again.ip-connection-limitGlobalDirectiveThe same as the limit by MX name, but selection goes by addresses in CIDR notation; allowed only at the node level.max-data-volume-rate<domain>set by the HubDirectiveHow many bytes per interval, counting only successful deliveriesmax-errors-per-connection<domain>set by the HubDirectiveThe default is no limit: the connection lives on, however many recipient refusals pile up on it.max-msg-per-connection<domain>set by the HubDirectiveThe default is zero, no limit: it pays for the engine to send as much as possible over one connection.max-rcpt-per-transaction<domain>DirectiveCuts a message with a large list into several transfers: more parallelism, but the body goes to the receiver as many times as there are pieces.max-smtp-data-volume-rate<virtual-mta>DirectiveThe only ceiling that counts volume rather than messages — and only the volume that got through.mx-connection-limitGlobalDirectiveLimits connections to each MX matching a pattern — but for each sending address separately, not in total. The vendor advises MX rollup instead.precached-max-domains<dns>DirectiveA ceiling on the number of domains taken from the file; it cannot exceed the number of lines in the file, and extra lines are cut off silently.queue-priority<domain>DirectiveWhen there are no free connections, the engine interrupts the connections of lower-priority queues — starting with the lowest.retry-after-dns-error<domain>set by the HubDirectiveA separate, shorter step: the receiver never saw this attempt, and haste does not threaten it in any way.retry-upon-new-mail<domain>DirectiveBypasses the retry schedule: every new message in the queue schedules an attempt immediately.smtp-421-means-mx-unavailable<domain>set by the HubDirectiveThe vendor default is to stay on the same connection; enabling it moves the queue to the receiver’s backup server.smtp-data-termination-timeout<domain>DirectiveThe last wait of the conversation — and the most dangerous one: shorten it and you get duplicates.smtp-out-rampup-interval<domain>set by the HubDirectiveA soft start: connections are opened one at a time with a pause, not in a burst.use-unencrypted-plain-auth<domain>DirectiveBoth mechanisms transmit the password in the conversation; without encryption it goes over the network in the clear.verp-default<domain>DirectiveThe same enabling, but targeted: only for messages to this domain.bounce-upon-pix-transfer-failure<domain>DirectiveA narrow case of the general line: it fires if the receiver’s greeting contains at least ten asterisks.data-send-timeout<domain>DirectiveThe third wait of the conversation; the manual reminds: less than three minutes violates the mail standard.default-smtp-port<domain>DirectiveUsually 25; a change is needed where sending addresses are told apart by destination port.ignore-8bitmime<domain>DirectiveA workaround for a known incompatibility: the external gateway accepts 8BITMIME, while the internal one behind it does not.ignore-chunking<domain>DirectiveA debugging switch: returns the transfer to the ordinary DATA command.ignore-dsn<domain>DirectiveCancels the delivery report requests the message carries from submission.ignore-pipelining<domain>DirectiveThe second debugging switch: commands go one at a time, with a reply to each.max-rcpt-per-message<domain>DirectiveThe same splitting limit under another name — and a full namesake of the reception setting from the submission block.pix-bug-workaround<domain>DirectiveOn by default: a workaround for a known fault that causes messages to be duplicated.replace-smtp-421-service-response<domain>DirectiveReplaces the text after the 421 code with “service unavailable”, so that addresses from someone else’s reply do not get into the bounce report; pattern-based parsing keeps working.reuse-ssl-session<domain>set by the HubDirectiveSpeeds up a repeated handshake with the same host; does not work on TLS 1.3 and, according to the manual, is supported by only one known receiver.smtp-greeting-timeout<domain>DirectiveThe second wait of the conversation: there is a connection, the receiver is silent.track-jobs<domain>DirectiveEnables counting jobs per receiver and showing them on its page in the web monitor; off by default.How the policy for a receiver is assembledcriticalMechanismSettings are assembled from the most general pattern to the most precise; the order of blocks in the file means nothing.Backoff mode — the queue's second personalitycriticalMechanismA queue that a receiver has started refusing switches to a parallel set of limits, retries and routes — ten directives that act only in this mode.Different domains in one queue, because the gateway is the samecriticalMechanismDomains whose lowest-priority MX records match the list are combined into one queue and limited as a single receiver.A queue is a receiving server together with a sending addresscriticalMechanismThe engine groups messages by the “recipient domain plus sending address” pair: one domain from two addresses is two independent queues with their own counters, connections and mode.Four ways to say “slower”criticalMechanismMessages, data volume, connection rate and number of connections — each has its own limit, and each has a “per source address” variant and a backoff mode twin.Recipient eventscriticalMechanismThe last 50 delivery, bounce and deferral events per queue — enabled with track-recipient-events and visible in queue output.Reputation monitoring inside the nodecriticalMechanismThe engine itself watches the receiving servers’ replies and changes the queue mode on a pattern match — a reaction within the connection, not through telemetry.Four value types the whole config is written incriticalMechanismBoolean, domain pattern, regular expression and time interval — defined once in § 3.2 and then used by all directives.Recipients deferred after a temporary refusalMechanismA recipient to whom the receiver responded with 4xx moves into a separate waiting area with a per-receiver interval; two commands can release it early.A retry ladder of your ownMechanismretry-after and backoff-retry-after accept a list of intervals — up to 30 steps, and the last one applies until the bounce.The receiver declares an encryption requirement on its websiteMechanismThe node fetches the recipient domain’s policy over HTTPS and, if it is in enforce mode, delivers only when the MX matches, the connection is encrypted and the certificate is verified.Three pool rules the manual states directlyMechanismRotation-based distribution, inheritance of settings by members with the member’s own values overriding, and a namespace shared with sending addresses.Keeping selected domains resolved at all timesMechanismA file with a list of domains whose DNS records are refreshed on their own schedule, independently of the queue and regardless of their own time to live.Merging domains into one queue by hand, by naming itMechanismThe same merging, but by your list rather than by MX match: you set the queue name.Figure out why a queue to one receiver is growingProcedureFirst check the route and reachability with one command, then make the node attempt delivery with the session logged, and only for an intermittent problem enable per-receiver logging.<domain>criticalConfiguration blockThe largest PowerMTA block and the main one among those the Hub generates itself.set queuecriticalCommandSwitches queues to backoff or normal mode; stars change many queues at once.show queuescriticalCommandShows the selected queues and, unless told otherwise, the last fifty deliveries, bounces and delays; selection is by connection, mode and pause state.scheduleCommandImmediately schedules delivery attempts for queues without waiting for the retry interval; with an option it also releases deferred recipients.Details of one queuecriticalAPI endpointReturns one queue with short histories: the latest recipient events, errors and mode changes.Receiver policy inside an addressAPI endpointCreates, reads, extends and deletes receiver blocks inside a sending address created through the API.Temporary failureAccounting recordOne delivery attempt failed, and the recipient stays in the queue until the next one.Refusal at the greetingError codeThe receiver returned an error at the very first step of the conversation — usually 4xx: busy, temporarily not accepting mail or not allowing this connection.The receiver went silent mid-conversationError codeThe connection is established, but the receiver stopped responding; the engine waits ten minutes, and this time is not configurable.ConnectionsMetricThe number of simultaneous connections: now, the maximum and the allowed limit, in both directions.Three short histories for each queuecriticalMonitor screenThe page of a single queue carries the last fifty recipient events, the last ten queue errors and the last ten mode changes.Receivers summed across all sending addressesMonitor screenThe busiest recipient domains by number of recipients: volume, open connections and the last error, plus a form for selecting a specific domain.QueuesMonitor screenThe top queues — “receiver and sending address” pairs — and a filter form: by connections, mode, list length and order.