The administration of a hybrid deployment that connects on-premises Exchange Server with Exchange Online, enabling seamless integration and centralized control.
Hi @JayJ
Thank you for posting your question in Microsoft Q&A.
Based on my research, the SMTP 354 response indicates that the remote server is ready to receive the email message body following the DATA command. If outgoing messages from your Exchange Server 2019 are stalling at this point, such as the connection hanging, timing out, or failing without transmitting the message body, it typically suggests that the Exchange transport service is not sending the message data after receiving the 354 response. This isn't a rejection but a transmission halt, often due to connectivity, configuration, or resource issues.
Could you try to follow these steps to troubleshoot it:
For Firewall:
Check firewall to ensure ports 25/587 aren’t blocked.
TLS Certificate:
Check certificates: Get-ExchangeCertificate | fl Thumbprint,Services.
Rebind: Enable-ExchangeCertificate -Thumbprint <Thumbprint> -Services SMTP.
Restart service: Restart-Service MSExchangeTransport.
Using Telnet to test SMTP communication on Exchange servers:
You can refer to: Use Telnet to test SMTP communication on Exchange servers | Microsoft Learn
By following the steps in this guide, you will manually send an email by typing the SMTP commands yourself. This completely bypasses your automated application.
It forces you to perform the missing step. The guide will instruct you to type the DATA command, and after receiving the 354 response, you will type the message headers and body. Crucially, it will then tell you to type a single period (.) on a new line and press Enter.
When you correctly send the final period (.), your Exchange server will respond with a 250 OK message, confirming it has accepted the email.
When you successfully send an email using Telnet, you have definitive proof that your Exchange Server 2019 is configured correctly. The problem is therefore isolated to your automated application.
The fix is to modify the code of your application to replicate the final step you performed in Telnet: ensuring that after the entire email body is sent, the application sends the termination sequence (<CRLF>.<CRLF>).
Please understand that our initial reply may not always immediately resolve the issue. However, with your help and more detailed information, we can work together to find a solution.
If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.