Outbound emails marked as "Sent" but never delivered – No error, no retry, no Message ID
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 hours ago
Hello everyone,
We are currently facing a critical issue in our production instance and would like to know if other customers have encountered similar behavior.
Problem Summary:
We have identified multiple outbound emails that exhibit the following behavior:
Marked as "Sent" in the sys_email table
A 421 timeout error is visible in the logs on the ServiceNow SMTP side
No retry attempt is made, even though it was scheduled
Message ID field is empty
Emails are never received by the recipients
No trace of delivery attempt appears in our own SMTP server logs
Despite this, ServiceNow marks the message as successfully sent. In some cases, the logs indicate that a retry is scheduled, but no actual retry takes place.
Environment:
SMTP Relay: Custom SMTP server configured
glide.smtp.defer_retry_ids includes 421
glide.smtp.send_partial is enabled
glide.smtp.debug is enabled
Key Concerns:
Why is the status set to Sent if the message was never delivered or accepted by the receiving SMTP server (no 250/354 response)?
Why is the retry mechanism not triggered, even when it’s logged as scheduled?
Is this a known limitation or an undocumented platform defect?
We’ve had a ticket open with support for over two weeks, but still no clear technical explanation or resolution has been provided.
This behavior is extremely dangerous in a production environment, especially when the platform is relied upon for sending critical notifications.
Has anyone else experienced this issue?
Any feedback, workaround, or confirmation from the community would be highly appreciated.
We’re happy to share sanitized log samples if needed to move the discussion forward.
Thanks in advance for your help!
Sandrine
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 hours ago
hey @SandrineH
When glide.smtp.send_partial = true, ServiceNow marks an email as Sent as soon as it hands the message to the SMTP socket, not after receiving a 250/354 acceptance.
If the connection later fails with 421, the email:
stays Sent
has no Message-ID
is never accepted by the SMTP server
is excluded from retry processing
This is why logs show “retry scheduled” but no retry actually happens.
Solution -
Disable partial sends (critical)
glide.smtp.send_partial = false
Create an After Insert or Update Business Rule on sys_email to catch false “Sent” emails and force retry.
script:
(function executeRule(current, previous) {
if (current.state == 'sent' && !current.message_id) {
var smtpError = (current.smtp_error || '').toString();
if (smtpError.indexOf('421') > -1) {
gs.error('Email incorrectly marked as Sent. Forcing retry. sys_id=' + current.sys_id);
current.state = 'retry';
current.setWorkflow(false);
current.update();
}
}
})(current, previous);
*************************************************************************************************************
If this response helps, please mark it as Accept as Solution and Helpful.
Doing so helps others in the community and encourages me to keep contributing.
Regards
Vaishali Singh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
an hour ago
Hello Vaishali,
Thank you very much for your detailed and helpful explanation — it clarifies a lot.
Given the potential impact of this behavior (emails incorrectly marked as "Sent", silently dropped, and excluded from retry), this seems quite serious, especially in production environments.
Do you know if this issue is officially documented by ServiceNow?
For example, is it listed in any known error database, release notes, or official best practices regarding glide.smtp.send_partial?
Having a reference to an official article or known limitation would help us better communicate the risk internally and justify the proposed workaround.
Thanks again for your contribution!
Best regards,
Sandrine
