From fd3f59960f6cf44498593c67571a539dab63a98b Mon Sep 17 00:00:00 2001 From: Doug Koerich Date: Fri, 9 Oct 2026 12:10:26 -0300 Subject: [PATCH 1/2] Doc: CHUNKING (BDAT) on ESMTP listeners (SparkPost/Momentum#1755) - New CHUNKING section on the SMTP Extensions page: how to enable it, how BDAT relates to DATA, refusals, size limits, no BINARYMIME. - CHUNKING in the listeners SMTP_Extensions example. - 5.3.1 changelog row. Co-Authored-By: Claude Opus 5.5 --- .../momentum/4/esmtp-listener-extensions.md | 28 ++++++++++++++++++- content/momentum/4/listeners.md | 4 +-- content/momentum/changelog/5/5-3-1.md | 13 +++++++++ content/momentum/changelog/5/index.md | 1 + content/momentum/navigation.yml | 2 ++ 5 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 content/momentum/changelog/5/5-3-1.md diff --git a/content/momentum/4/esmtp-listener-extensions.md b/content/momentum/4/esmtp-listener-extensions.md index cf2a4d621..ffca6ae69 100644 --- a/content/momentum/4/esmtp-listener-extensions.md +++ b/content/momentum/4/esmtp-listener-extensions.md @@ -1,9 +1,35 @@ --- -lastUpdated: "03/26/2020" +lastUpdated: "10/09/2026" title: "SMTP Extensions" description: "Implements the receiving side of an XCLIENT capable interaction XCLIENT allows trusted senders to alter the connecting IP address and other connection level identifiers to appear to be someone they are not This is used for internally trusted re mailing More information on XCLIENT can be found at http www..." --- +### CHUNKING Extension for SMTP + +Advertises the CHUNKING extension defined in [RFC 3030](https://www.rfc-editor.org/rfc/rfc3030) and accepts the `BDAT` command, which a sending server uses instead of `DATA` to transmit a message as one or more chunks of announced size. Microsoft 365, Exchange and Gmail send with `BDAT` whenever the receiving server advertises CHUNKING. + +CHUNKING is not advertised by default. To enable it, add it to the `SMTP_Extensions` list of a listener, `Listen` or `Peer` scope: + +``` +ESMTP_Listener { + Listen ":25" { + SMTP_Extensions = ( "ENHANCEDSTATUSCODES" "CHUNKING" ) + } +} +``` + +A message received with `BDAT` is handled exactly like one received with `DATA`: policy runs once per message, the same limits apply (including `Max_Message_Size` and the idle timeout), and the message is stored, logged and delivered the same way. Momentum always delivers with `DATA`, whether or not the next hop supports CHUNKING. + +* `DATA` remains available on a listener that advertises CHUNKING, but one transaction cannot mix the two. `DATA` or `RCPT TO` after a `BDAT` chunk is answered with `503`; send `RSET` to start over. + +* When a chunk cannot be accepted, for example `BDAT` before `MAIL FROM` or `RCPT TO`, or after `RSET`, Momentum reads and discards the chunk before replying, as RFC 3030 requires. A chunk that takes the message over `Max_Message_Size` is read and discarded, and the message is rejected with `552 5.3.4`. + +* A `BDAT` command announcing more than `Max_Message_Size` or 64 MiB, whichever is larger (2 GiB when there is no size limit), is rejected with `552` and the connection is closed without reading the chunk. + +* If the last chunk does not end with a line break, Momentum adds one. + +* The BINARYMIME extension, also defined in RFC 3030, is not supported. Sending servers only use `BODY=BINARYMIME` when the receiving server advertises it. + ### XCLIENT Extension for SMTP Implements the receiving side of an XCLIENT capable interaction. XCLIENT allows trusted senders to alter the connecting IP address and other connection-level identifiers to appear to be someone they are not. This is used for internally trusted re-mailing. More information on XCLIENT can be found at [http://www.postfix.org/XCLIENT_README.html](http://www.postfix.org/XCLIENT_README.html). diff --git a/content/momentum/4/listeners.md b/content/momentum/4/listeners.md index e997377e2..e12eadc5e 100644 --- a/content/momentum/4/listeners.md +++ b/content/momentum/4/listeners.md @@ -1,5 +1,5 @@ --- -lastUpdated: "08/03/2026" +lastUpdated: "10/09/2026" title: "Listeners" description: "Momentum is built around a powerful event based scheduling engine A key part of that engine is responding to events that occur on inbound sockets known as listeners These listeners are configured in Momentum's configuration files The following is an example of a basic listener syntax In this example the..." --- @@ -51,7 +51,7 @@ ESMTP_Listener { Listen ":25" { Peer "10.0.0.1" { # options for 10.0.0.1 here - SMTP_Extensions = ( "ENHANCEDSTATUSCODES" "AUTH LOGIN" ) + SMTP_Extensions = ( "ENHANCEDSTATUSCODES" "AUTH LOGIN" "CHUNKING" ) } } } diff --git a/content/momentum/changelog/5/5-3-1.md b/content/momentum/changelog/5/5-3-1.md new file mode 100644 index 000000000..a305def68 --- /dev/null +++ b/content/momentum/changelog/5/5-3-1.md @@ -0,0 +1,13 @@ +--- +lastUpdated: "10/09/2026" +title: "Momentum 5.3.1 Changelog" +description: "This section will list all of the major changes that happened with the release of Momentum 5.3.1. Depending on installation type, all changes may not be applicable" +--- + +This section will list all of the major changes that happened with the release of **Momentum 5.3.1**. Depending on installation type, all changes may not be applicable + + + +| Type | Ticket | Description | +| --- | --- | --- | +| Feature | I-1755 | ESMTP listeners can now advertise the [CHUNKING](/momentum/4/esmtp-listener-extensions#esmtp.listener.extensions.chunking) extension (RFC 3030) and accept `BDAT`, which Microsoft 365, Exchange and Gmail use instead of `DATA` when it is offered. It is off by default; add `CHUNKING` to `SMTP_Extensions` to enable it. Delivery still uses `DATA`, and BINARYMIME is not supported. | diff --git a/content/momentum/changelog/5/index.md b/content/momentum/changelog/5/index.md index 25c3fcd29..d1edcf389 100644 --- a/content/momentum/changelog/5/index.md +++ b/content/momentum/changelog/5/index.md @@ -6,6 +6,7 @@ name: "Momentum 5.x Changelogs" description: "Momentum 5.x Changelogs" --- +* [Momentum 5.3.1 Changelogs](/momentum/changelog/5/5-3-1) * [Momentum 5.3.0 Changelogs](/momentum/changelog/5/5-3-0) * [Momentum 5.2.1 Changelogs](/momentum/changelog/5/5-2-1) * [Momentum 5.2.0 Changelogs](/momentum/changelog/5/5-2-0) diff --git a/content/momentum/navigation.yml b/content/momentum/navigation.yml index 6250aa3e0..084760945 100644 --- a/content/momentum/navigation.yml +++ b/content/momentum/navigation.yml @@ -2003,6 +2003,8 @@ - link: /momentum/changelog/5 title: Momentum 5.x Changelog items: + - link: /momentum/changelog/5/5-3-1 + title: Momentum 5.3.1 Changelog - link: /momentum/changelog/5/5-3-0 title: Momentum 5.3.0 Changelog - link: /momentum/changelog/5/5-2-1 From ff8536e1b6dcd0a84442779eccd7c9823caadb4e Mon Sep 17 00:00:00 2001 From: Doug Koerich Date: Fri, 9 Oct 2026 13:21:48 -0300 Subject: [PATCH 2/2] Doc: CHUNKING lands in 5.4.0, not 5.3.1 Co-Authored-By: Claude Opus 5.5 --- content/momentum/changelog/5/{5-3-1.md => 5-4-0.md} | 8 ++++---- content/momentum/changelog/5/index.md | 2 +- content/momentum/navigation.yml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) rename content/momentum/changelog/5/{5-3-1.md => 5-4-0.md} (78%) diff --git a/content/momentum/changelog/5/5-3-1.md b/content/momentum/changelog/5/5-4-0.md similarity index 78% rename from content/momentum/changelog/5/5-3-1.md rename to content/momentum/changelog/5/5-4-0.md index a305def68..5bbac5d60 100644 --- a/content/momentum/changelog/5/5-3-1.md +++ b/content/momentum/changelog/5/5-4-0.md @@ -1,12 +1,12 @@ --- lastUpdated: "10/09/2026" -title: "Momentum 5.3.1 Changelog" -description: "This section will list all of the major changes that happened with the release of Momentum 5.3.1. Depending on installation type, all changes may not be applicable" +title: "Momentum 5.4.0 Changelog" +description: "This section will list all of the major changes that happened with the release of Momentum 5.4.0. Depending on installation type, all changes may not be applicable" --- -This section will list all of the major changes that happened with the release of **Momentum 5.3.1**. Depending on installation type, all changes may not be applicable +This section will list all of the major changes that happened with the release of **Momentum 5.4.0**. Depending on installation type, all changes may not be applicable - + | Type | Ticket | Description | | --- | --- | --- | diff --git a/content/momentum/changelog/5/index.md b/content/momentum/changelog/5/index.md index d1edcf389..372054120 100644 --- a/content/momentum/changelog/5/index.md +++ b/content/momentum/changelog/5/index.md @@ -6,7 +6,7 @@ name: "Momentum 5.x Changelogs" description: "Momentum 5.x Changelogs" --- -* [Momentum 5.3.1 Changelogs](/momentum/changelog/5/5-3-1) +* [Momentum 5.4.0 Changelogs](/momentum/changelog/5/5-4-0) * [Momentum 5.3.0 Changelogs](/momentum/changelog/5/5-3-0) * [Momentum 5.2.1 Changelogs](/momentum/changelog/5/5-2-1) * [Momentum 5.2.0 Changelogs](/momentum/changelog/5/5-2-0) diff --git a/content/momentum/navigation.yml b/content/momentum/navigation.yml index 084760945..53984f547 100644 --- a/content/momentum/navigation.yml +++ b/content/momentum/navigation.yml @@ -2003,8 +2003,8 @@ - link: /momentum/changelog/5 title: Momentum 5.x Changelog items: - - link: /momentum/changelog/5/5-3-1 - title: Momentum 5.3.1 Changelog + - link: /momentum/changelog/5/5-4-0 + title: Momentum 5.4.0 Changelog - link: /momentum/changelog/5/5-3-0 title: Momentum 5.3.0 Changelog - link: /momentum/changelog/5/5-2-1