Per-Provider Tuning Baselines
Community-maintained per-provider MTA shaping baselines — connection limits, messages per connection, rates, TLS requirements, and automated-throttle rules — from the KumoMTA shaping files, attributed and dated.
Reference7 min read
Who it is for ESP operators
ContentsOn this page — 5 sections
When you configure how your MTA shapes traffic to each destination, you need concrete values to start from. The values below come from the shaping files that the KumoMTA project maintains publicly. There are two files:
- the
policy-extras/shaping.tomlfile maintained by the vendor, with defaults and the major providers (several sections are marked "provided directly by" the provider); - the
community/shaping.tomlfile contributed by the community, with more providers and automation rules driven by bounces.
Fetched 2026-07-20 from the main branch. These values drift as providers change their policies. Treat them as attributed starting points to check against your own deferral data, not as facts about current provider limits. See MTA Delivery Tuning for what each parameter means and how the automation model works.
How to read the tables:
- MX rollup: limits apply to each receiving MX infrastructure, so all recipient domains that resolve to the same set of MX hosts share one bucket. Provider blocks match by MX suffix. For example, anything with an MX under
.google.comor.googlemail.comcounts as "google", which covers Gmail and domains hosted on Google Workspace. According to the file's note of 2024-09-03, their MX hostnames resolve to common IP addresses, so they are shaped together. provider_connection_limitvsconnection_limit: the provider variant is enforced across the whole provider rollup, and the plain variant applies to each site. Mimecast deliberately uses limits for each site, because each Mimecast site name is a separate regional fleet of MTAs.- Where a cell is blank, the global default applies.
Global defaults
| Parameter | Default |
|---|---|
| connection_limit | 10 |
| max_connection_rate | 100/min |
| max_deliveries_per_connection | 100 |
| max_message_rate | 100/s |
| idle_timeout | 60 s |
| data_timeout / data_dot_timeout | 30 s / 60 s |
| enable_tls | Opportunistic |
| consecutive_connection_failures_before_delay | 100 |
| remember_broken_tls | 3 days |
A default automation rule, for all destinations, matches the family of deferral messages that many providers use: Messages from <IP> temporarily deferred, All messages from <IP> will be permanently deferred, has been temporarily rate limited due to IP reputation, Unfortunately, messages from <IP> weren't sent, Server busy. Please try again later from. On a match, it sets max_message_rate = 1/minute and connection_limit = 1 for 90 minutes.
Provider baselines
| Provider (MX match) | Conn. limit | Deliveries per conn. | TLS | Other |
|---|---|---|---|---|
Google (.google.com, .googlemail.com) |
5 (provider-wide) | 50 | Required: Google tempfails and rate-limits injection without TLS | consecutive_connection_failures_before_delay = 5 |
Yahoo (.yahoodns.net), values "provided by Yahoo directly" |
default (10) | 20 | default | |
Microsoft consumer (.olc.protection.outlook.com) |
5 (provider-wide) | 50 | default | The consumer, O365 and DANE sets of MX hosts are separate groups of edge servers, shaped separately |
Office 365 (.mail.protection.outlook.com) |
5 (provider-wide) | 50 | default | |
Office 365 DANE (.mx.microsoft) |
5 (provider-wide) | 50 | default | DANE left off in the baseline (DNSSEC is not ready at most sites) |
Apple iCloud (.icloud.com) |
10 (provider-wide) | 5 | default | Note the very low number of deliveries per connection |
Comcast (comcast.net), "provided directly by Comcast" |
25 | 1000 | Required | idle_timeout = 30 s; consecutive_connection_failures_before_delay = 24 |
Mimecast (.mimecast.com, .mimecast.co.za, .mimecast-offshore.com), "provided directly by Mimecast" |
10 per site | 100 | default | For each site, not provider-wide (regional fleets) |
| mail.com, "provided directly by mail.com" | default | 100 | default | |
Orange (.orange.fr) |
2 (provider-wide) | 100 | Required | |
GMX and WEB.DE (.web.de, .gmx.net) (community) |
4 | 20 | Required | consecutive_connection_failures_before_delay = 5 |
Yahoo Japan (yahoo.co.jp) (community) |
2 | 20 | default | max_message_rate = 10/s; a separate fleet of MX hosts from Yahoo itself |
Barracuda (.barracudanetworks.com.) (community, dated 2026-03-27) |
10 (provider-wide) | 15 | Required | |
Netvigator (.netvigator.com.) (community, dated 2026-03-27) |
5 (provider-wide) | 10 | Required | |
KPN (.kpnmail.nl.) (community) |
10 | 10 | Required | |
Tencent QQ (.qq.com) (community) |
4 | 8 | Required | |
NetEase 163.com (.netease.com) (community) |
4 | 7 | RequiredInsecure (TLS forced, but certificates not validated) | |
Mailgun smarthost (smtp.mailgun.com), "provided directly by Mailgun" for senders relaying through Mailgun |
7000 | 3 | default | A smarthost, not a mailbox provider |
Automated-throttle rules per provider (community-contributed)
The community file adds these adjustments on top of the baselines, in response to bounces. A trigger of N/hr means the rule fires once the response has matched N times in an hour, and every action expires after its duration. For what each response means, see the error codes for Gmail, Yahoo, Microsoft, Apple, Comcast and GMX and WEB.DE.
| Provider | Response matched (regex, abridged) | Trigger | Action | Duration |
|---|---|---|---|---|
| Gmail | "Our system has detected that this message" | 5/hr | Suspend | 1 h |
| Gmail | "Our system has detected an unusual rate" | 2/hr | max_message_rate = 10/min | 30 m |
| Gmail (example, shipped commented out, because it suspends whole tenants) | "This message does not have authentication information" | None | SuspendTenant | 3 h |
| Yahoo | [TS02] (unusual traffic patterns, submit IPs for review) |
3/hr | max_message_rate = 1/min | 30 m |
| Yahoo | [TS03] (unusual traffic patterns) |
3/hr | max_message_rate = 10/min | 30 m |
| Yahoo | 421 4.7.0 [TSS04] (deferred, user complaints). The vendor file also has: any [TS?S04] leads to Suspend for 2 h, with no threshold |
2/hr | Suspend | 2 h |
| Yahoo | 421 4.7.0 [TSS05] (deferred, user complaints) |
2/hr | Suspend | 4 h |
| Yahoo | 421 [IPTS04] |
2/hr | Suspend | 2 h |
| Yahoo | 421 [IPTS05] |
2/hr | Suspend | 4 h |
| Yahoo | 553 5.7.1 [BL (IP listed by Spamhaus) |
5/hr | Suspend | 2 h |
| Yahoo | "Max message per connection reached" | 3/hr | max_message_rate = 10/min | 1 h |
| Yahoo Japan | "VS98-IP0 deferred" (553 Mail from <IP> not allowed) |
2/hr | Suspend | 1 h |
| Yahoo Japan | 421 [TSS04] or 421 [IPTS04] (volume or complaints) |
2/hr | Suspend | 1 h |
| Yahoo Japan | "Timeout waiting for command" | 2/hr | Suspend | 30 m |
| GMX and WEB.DE | "Too many connections" | 3/hr | connection_limit = 1 | 30 m |
| GMX and WEB.DE | "Reject due to policy restrictions." | 5/hr | max_message_rate = 1/min | 1 h |
| GMX and WEB.DE | "Reject due to policy violations." | 5/hr | Suspend | 1 h |
| GMX and WEB.DE | 554 … Reject due to policy restrictions. |
5/hr | Suspend | 2 h |
| Outlook | "Unfortunately … part of their network is on our block list" | 5/hr | Suspend | 2 h |
| Outlook | "Access denied, please try again later" | 5/hr | Suspend | 1 h |
| Outlook | "Server busy. Please try again later" | 5/hr | Suspend | 30 m |
| Outlook | same "Server busy" text (second rule) | 3/hr | max_message_rate = 1/min | 15 m |
| Outlook | "has been temporarily rate limited" | 3/hr | Suspend | 30 m |
| Outlook | "exceeded the maximum number of connections" | 2/hr | connection_limit = 1 | 1 h |
| Outlook | "exceeded maximum number of messages per connection" | 2/hr | max_deliveries_per_connection = 2 | 1 h |
| Outlook | "Connection refused … exceed max concurrent connections. IB007" | 2/hr | connection_limit = 1 | 1 h |
| Outlook | "Temporary server error. Please try again later" | 5/hr | Suspend | 1 h |
| Apple | "Service unavailable - try again later" | 5/hr | Suspend | 15 m |
| Apple | [BS02] Temporary server error. |
5/hr | Suspend | 15 m |
| Apple | [HCM1] Your mail from <IP> was deferred |
3/hr | Suspend | 15 m |
| Apple | "rejected due to having a domain present in the Spamhaus DBL" | 3/hr | Suspend | 4 h |
| Comcast (vendor file) | RL0000 (rate limited) |
2/hr | max_connection_rate = 10000/h | 2 h |
| Comcast (vendor file) | RL000010 (domain throttled) |
Immediate | SuspendTenant | 5 m |
| Orange | "Trop de connexions" | 2/hr | connection_limit = 1 | 1 h |
| Orange | "Service refuse" | 2/hr | Suspend | 1 h |
| Orange | "Client host blocked for spamming issues" (variant with the Cloudmark reset URL) | 5/hr | Suspend | 2 h |
| Orange | "Client host blocked for spamming issues … spamhaus" | 5/hr | Suspend | 2 h |
| Mimecast | "Internal resource temporarily unavailable" | 3/hr | Suspend | 30 m |
| Netvigator | "Too many messages for this session" | 3/hr | Suspend | 30 m |
550 Sender frequency limited / 550 Ip frequency limited / 550 Connection frequency limited / 550 Domain frequency limited / 550 Mail content denied |
5/hr each | Suspend | 1 h | |
| 163.com | 451 DT:SPM (anti-spam deferral) |
5/hr | Suspend | 15 m |
| 163.com | 421 Too many connections |
2/hr | connection_limit = 1 | 1 h |
| 163.com | 554 DT:SPM |
2/hr | connection_limit = 1 | 1 h |
| 163.com | 550 RP:ORQ or 554 HL:ITC (daily limit reached) |
2/hr each | Suspend | 1 h |
Reading the pattern
Across providers, the community's throttling logic follows the design principles in MTA Delivery Tuning:
- Responses about mechanical limits (too many connections, or too many messages per session) get a parameter cut for about an hour.
- Brief capacity problems ("server busy", "service unavailable") get short suspensions of 15–30 minutes.
- Reputation events (deferrals for user complaints, blocklist rejections) get the longest suspensions (2–4 hours), because continuing to send through them makes reputation worse.
Note also how low the baselines are compared with the global default. The biggest providers are shaped to 5 connections across the provider, and several regional providers (Orange, Yahoo Japan) to just 2.
Caveats
- The values are what worked for KumoMTA operators as of the fetch date. Providers change limits without notice, and the reputation of each IP address affects what a given sender actually gets. Check the values against your own deferral logs.
- Several entries carry dates in the file (Barracuda and Netvigator are marked 2026-03-27, and the note on the Google and Workspace rollup is dated 2024-09-03). Each row has its own freshness.
- The community file states explicitly that its rules are contributed as-is, and must be combined with the vendor's defaults file for full coverage.
- These are limits that senders impose on themselves, not guarantees published by providers, except where a row is marked "provided directly by" the provider (Yahoo, Comcast, Mimecast, mail.com, Mailgun).
Check your own record
The free check reads what your domain publishes in DNS.
In this topic
- Deliverability Metrics and Benchmarks
- List Hygiene and Sunset Policies
- Sending Infrastructure Practices
- MTA Delivery Tuning