Repository navigation
v0.26.0
MillionSend v0.26.0 changes three things. Teams on Scale can add 100 sending domains an hour, up from 10 (#211). Every rate limit and quota refusal now says when to try again (#211). Header values and subjects with quotes now go out as written, so OTP-Token headers can be sent (#209). No database migrations.
Domains
- Scale adds 100 domains an hour (#211). Every other plan stays at 10, counted per team and reset at each full UTC hour. A refusal is
429 rate_limit_exceededwithretry-after(the seconds to the next hour). The dashboard now tells you how many minutes are left. Self-hosted instances have no hourly limit, as before. - A failed add no longer blocks the name (#211). If SES created a domain's identity but setting its MAIL FROM failed, the identity used to stay in SES with nothing recording it. Every later attempt to add that name was then refused as "domain already registered". The identity is now removed before the error is returned, so retrying works.
Retry-After everywhere (#211)
Every 429 now carries retry-after, in whole seconds:
- API:
monthly_quota_exceeded(POST /emails, the batch endpoint and inbox sends) counts down to the end of the billing period. The hourly domain limit counts to the next hour. Per-key and per-team limits, failed sign-ins, daily quotas and inbox limits already sentretry-afterand are unchanged. - MCP: the per-person limit on
/mcpnow gives the seconds left in its minute instead of a fixed 60. Any tool call the API refuses withretry-afternow also includes the wait asretry_afterin the tool's error. - Dashboard and sign-in:
- The dashboard's own limits now send
retry-after: adding domains, console codes, webhook test deliveries, broadcast test sends, invitations and inbox refusals. - Sign-in rate limits answer with a standard
retry-after; before, only the nonstandardX-Retry-Afterwas set. - The daily cap on accounts per network now sends
retry-aftertoo.
- The dashboard's own limits now send
- Docs: the API reference lists what each 429's
retry-aftercounts down to.
A forward from an inbox that the monthly quota refuses still ends there and isn't retried at renewal.
Headers (#209)
- Quoted values go out as written. Printable-ASCII header values and subjects that contain a double quote are no longer RFC 2047-encoded. A structured header like
OTP-Token: "123456"; origin="https://example.com"now reaches receivers as sent. Subjects with quotes no longer trip Rspamd'sSUBJ_EXCESS_QP. Non-ASCII text is encoded as before. OTP-Tokenis an allowed custom header. An allowed header name given twice in different letter cases is now a422instead of two fields. SES refuses a second copy of those headers anyway.X-*names may still repeat.
Upgrading a self-hosted instance
Pull the new image and restart. No migrations and no configuration changes.