<domain>set by the Hub
After the specified number of messages, the node closes the connection and opens a new one. Zero means “no limit”: the connection lives as long as there is something to send or until connection-idle-timeout fires.
Too few is also bad. Each reconnect means a TCP handshake, a TLS handshake and an SMTP greeting all over again. The provider counts connections too, so max-msg-per-connection 1 at high volume looks more aggressive than a hundred messages over one connection.
For addresses under warm-up the line is not written at all: they have the vendor’s “no limit,” and the pace is held by a single connection and max-msg-rate.
| Mode | Per address (vMTA) | In the provider rule | When this is your case |
|---|---|---|---|
| Warm-up, cold address | 1 | — | An address younger than 4–6 weeks or back from a pause |
| Careful | 20 | — | Strict receivers, questionable reputation, the first weeks after warm-up |
| Balanced default | 50 | — | Normal operation of an established fleet |
| Aggressive | 100 | — | Warmed-up addresses, friendly receivers, urgent volumes |
| PowerMTA default | 0 | — | If the directive is not written at all |
The default pays off almost always. The manual says directly: it is usually more efficient to send as many messages as possible over a connection. Limiting is worth it where the receiver itself asks for reconnects — not “just in case.”
Count it together with the connection rate. The number of messages per connection and max-connect-rate are two sides of one thing: the fewer the first, the more often new connections have to be opened. Twenty messages per connection at a thousand messages an hour is fifty connections an hour, and they must fit into the allowed rate.
Zero is not “off” but “no limit.” The connection lives as long as there is something to send or until connection-idle-timeout fires.
# the message limit and the connection rate are chosen together <domain hotmail.com> max-msg-per-connection 50 max-connect-rate 30/m connection-idle-timeout 5m </domain>
what people get wrong and how it ends2 mistakes▶
§ 3.3.10.81
our experience
3 relations
max-connect-rate<domain>Two sides of one thing: the fewer messages per connection, the more often new ones have to be opened. inferenceconnection-idle-timeout<domain>The second way to end a connection — by idle time rather than by the number of messages. inferencemax-rcpt-per-transaction<domain>A neighboring granularity: that one splits a message by recipients, this one the message flow by connections. § 3.3.10.81
pmta show queues --maxitems=20 pmta show settings hotmail.com/vmta1 | grep -i max-msg-per-connection
3 articles
◇How the policy for a receiver is assembledSettings 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 personalityA 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.◇Reputation monitoring inside the nodeThe engine itself watches the receiving servers’ replies and changes the queue mode on a pattern match — a reaction within the connection, not through telemetry.