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-4-0.md b/content/momentum/changelog/5/5-4-0.md
new file mode 100644
index 000000000..5bbac5d60
--- /dev/null
+++ b/content/momentum/changelog/5/5-4-0.md
@@ -0,0 +1,13 @@
+---
+lastUpdated: "10/09/2026"
+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.4.0**. 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..372054120 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.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 6250aa3e0..53984f547 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-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