From 33c1d7a3601798bce374d8ef47a31c9f703f0fd2 Mon Sep 17 00:00:00 2001 From: Roshan Jonnalagadda Date: Mon, 6 Jul 2026 14:41:35 +1000 Subject: [PATCH 1/3] docs: update MAIL FROM API docs --- changelog.mdx | 11 +++ openapi-app.json | 83 ++++++++++++++++++- ...sendmux-management.postman_collection.json | 2 +- 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/changelog.mdx b/changelog.mdx index fa9984a..d558d05 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -4,6 +4,17 @@ description: "New features, improvements, and fixes across the Sendmux platform. rss: true --- + + ## Domain verification + +Custom domains now show the extra bounce-handling DNS records needed for Amazon SES MAIL FROM, including the `bounce.` subdomain MX and TXT records. + +Domain verification now checks those bounce records separately and keeps already verified domains active while the extra DNS records are pending. + +The Management API now returns MAIL FROM status and DNS check results for domains, and zone file exports include the new records. + + + ## Mailbox API diff --git a/openapi-app.json b/openapi-app.json index 8879a73..a3ff212 100644 --- a/openapi-app.json +++ b/openapi-app.json @@ -2057,6 +2057,13 @@ "null" ] }, + "ses_mail_from_status": { + "description": "Amazon SES MAIL FROM status (pending/success/failed/temporary_failure/not_started)", + "type": [ + "string", + "null" + ] + }, "verification_status": { "description": "Current verification state", "enum": [ @@ -2080,6 +2087,7 @@ "mode", "verification_status", "ses_dkim_status", + "ses_mail_from_status", "verified_at", "created_at", "mailbox_count", @@ -2107,6 +2115,9 @@ } ] }, + "mail_from": { + "$ref": "#/components/schemas/MailboxDomainMailFromRecords" + }, "mx": { "description": "MX records the customer must place. All point at Sendmux's inbound mail servers.", "items": { @@ -2115,7 +2126,14 @@ "type": "array" }, "spf": { - "$ref": "#/components/schemas/MailboxDomainNameValueRecord" + "allOf": [ + { + "$ref": "#/components/schemas/MailboxDomainNameValueRecord" + }, + { + "description": "SPF TXT record covering Amazon SES sending" + } + ] }, "verification": { "allOf": [ @@ -2130,6 +2148,7 @@ }, "required": [ "mx", + "mail_from", "spf", "dmarc", "dkim", @@ -2137,6 +2156,23 @@ ], "type": "object" }, + "MailboxDomainMailFromRecords": { + "additionalProperties": false, + "description": "Custom MAIL FROM records for Amazon SES bounce handling", + "properties": { + "mx": { + "$ref": "#/components/schemas/MailboxDomainNamedMxRecord" + }, + "spf": { + "$ref": "#/components/schemas/MailboxDomainNameValueRecord" + } + }, + "required": [ + "mx", + "spf" + ], + "type": "object" + }, "MailboxDomainMxRecord": { "additionalProperties": false, "properties": { @@ -2155,9 +2191,33 @@ ], "type": "object" }, + "MailboxDomainNamedMxRecord": { + "additionalProperties": false, + "description": "MX record for Amazon SES bounce handling", + "properties": { + "name": { + "example": "bounce.acme.com", + "type": "string" + }, + "priority": { + "example": 10, + "type": "integer" + }, + "target": { + "example": "feedback-smtp.eu-central-1.amazonses.com", + "type": "string" + } + }, + "required": [ + "name", + "priority", + "target" + ], + "type": "object" + }, "MailboxDomainNameValueRecord": { "additionalProperties": false, - "description": "SPF TXT record covering Amazon SES sending", + "description": "SPF TXT record for the custom MAIL FROM subdomain", "properties": { "name": { "example": "_sendmux.acme.com", @@ -2181,6 +2241,14 @@ "description": "DMARC TXT record matches expected value", "type": "boolean" }, + "mail_from_mx": { + "description": "Custom MAIL FROM MX record matches expected value", + "type": "boolean" + }, + "mail_from_spf": { + "description": "Custom MAIL FROM SPF TXT record matches expected value", + "type": "boolean" + }, "mx": { "description": "MX record present when the domain is configured for receiving. Always true for send-only domains.", "type": "boolean" @@ -2198,7 +2266,9 @@ "mx", "verification_txt", "spf", - "dmarc" + "dmarc", + "mail_from_mx", + "mail_from_spf" ], "type": "object" }, @@ -2212,6 +2282,10 @@ "description": "Latest Amazon SES DKIM status", "type": "string" }, + "ses_mail_from_status": { + "description": "Latest Amazon SES MAIL FROM status", + "type": "string" + }, "status": { "description": "Post-check verification status", "enum": [ @@ -2224,6 +2298,7 @@ "required": [ "status", "ses_dkim_status", + "ses_mail_from_status", "checks" ], "type": "object" @@ -8512,7 +8587,7 @@ }, "/domains/{public_id}/verify": { "post": { - "description": "Runs an immediate DNS-over-HTTPS check of the domain's required DNS records, then asks Amazon SES for the latest DKIM status. If every required check passes the domain is marked verified. Domains automatically re-verify every 6 hours — this endpoint is only needed to trigger a check on demand.", + "description": "Runs an immediate DNS-over-HTTPS check of the domain's required DNS records, enables Amazon SES MAIL FROM after its DNS records are present, then asks Amazon SES for the latest DKIM and MAIL FROM statuses. If every required check passes the domain is marked verified. Domains automatically re-verify every 6 hours — this endpoint is only needed to trigger a check on demand.", "operationId": "managementVerifyDomain", "parameters": [ { diff --git a/postman/sendmux-management.postman_collection.json b/postman/sendmux-management.postman_collection.json index 009e034..472a174 100644 --- a/postman/sendmux-management.postman_collection.json +++ b/postman/sendmux-management.postman_collection.json @@ -817,7 +817,7 @@ }, "request": { "description": { - "content": "Runs an immediate DNS-over-HTTPS check of the domain's required DNS records, then asks Amazon SES for the latest DKIM status. If every required check passes the domain is marked verified. Domains automatically re-verify every 6 hours — this endpoint is only needed to trigger a check on demand.", + "content": "Runs an immediate DNS-over-HTTPS check of the domain's required DNS records, enables Amazon SES MAIL FROM after its DNS records are present, then asks Amazon SES for the latest DKIM and MAIL FROM statuses. If every required check passes the domain is marked verified. Domains automatically re-verify every 6 hours — this endpoint is only needed to trigger a check on demand.", "type": "text/plain" }, "header": [ From acb1593790a5deed68f516b6062213c29a04695f Mon Sep 17 00:00:00 2001 From: Roshan Jonnalagadda Date: Mon, 6 Jul 2026 14:43:54 +1000 Subject: [PATCH 2/3] docs: clarify MAIL FROM changelog --- changelog.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.mdx b/changelog.mdx index d558d05..7e06be6 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -11,7 +11,7 @@ Custom domains now show the extra bounce-handling DNS records needed for Amazon Domain verification now checks those bounce records separately and keeps already verified domains active while the extra DNS records are pending. -The Management API now returns MAIL FROM status and DNS check results for domains, and zone file exports include the new records. +The Management API now returns MAIL FROM status and DNS check results for domains, and zone file exports include the same records so teams can copy the full DNS set at once. From 8d218659821bea81ecbb7be710ebc67aa4065855 Mon Sep 17 00:00:00 2001 From: Roshan Jonnalagadda Date: Mon, 6 Jul 2026 14:45:34 +1000 Subject: [PATCH 3/3] docs: document MAIL FROM domain records --- guides/domain-management.mdx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/guides/domain-management.mdx b/guides/domain-management.mdx index 6ae058b..206e232 100644 --- a/guides/domain-management.mdx +++ b/guides/domain-management.mdx @@ -2,7 +2,7 @@ title: "Domains" description: "Add, verify, and manage custom domains for sending and receiving." keywords: - ["domains", "DNS", "SPF", "DKIM", "DMARC", "verification", "custom domain"] + ["domains", "DNS", "SPF", "DKIM", "DMARC", "MAIL FROM", "verification"] --- Use a custom domain when you want branded sending, hosted mailboxes, or both. Choose the domain mode when you add it: sending only avoids MX changes, while sending & receiving lets you create mailboxes after verification. @@ -42,20 +42,21 @@ Use a custom domain when you want branded sending, hosted mailboxes, or both. Ch Select **Verify** after the records have propagated. Sending-only domains - check ownership, sending policy, message policy, and email signing. Sending - & receiving domains also check inbound routing. + check ownership, sending policy, message policy, email signing, and bounce + handling. Sending & receiving domains also check inbound routing. ## DNS records -| Purpose | Record | Required for | What it does | -| -------------- | ------ | ----------------------------- | ---------------------------------------------- | -| Ownership | TXT | Both modes | Confirms you control the domain. | -| Email signing | CNAME | Both modes | Enables DKIM signing through Amazon SES. | -| Sending policy | TXT | Both modes | Authorises Sendmux to send for the domain. | -| Message policy | TXT | Both modes | Defines DMARC handling for suspicious mail. | -| Receive mail | MX | Sending & receiving | Routes inbound mail for the domain to Sendmux. | +| Purpose | Record | Required for | What it does | +| --------------- | ---------- | ------------------- | ---------------------------------------------- | +| Ownership | TXT | Both modes | Confirms you control the domain. | +| Email signing | CNAME | Both modes | Enables DKIM signing through Amazon SES. | +| Sending policy | TXT | Both modes | Authorises Sendmux to send for the domain. | +| Message policy | TXT | Both modes | Defines DMARC handling for suspicious mail. | +| Bounce handling | MX and TXT | Both modes | Routes bounce handling through a subdomain. | +| Receive mail | MX | Sending & receiving | Routes inbound mail for the domain to Sendmux. | You can download the records as a zone file from the domain detail page. @@ -90,6 +91,11 @@ Sendmux rechecks domains every six hours. A short DNS issue does not immediately Keep only one SPF record for the same domain name. Merge all `include:` values into the same TXT record. + + Check the MX and TXT records on the `bounce.{your-domain}` subdomain. The MX + record must use the target Sendmux shows, and the TXT record must match the + generated SPF value. + Check that the TXT record is published at `_dmarc.{your - domain}` and still includes the policy value Sendmux generated.