SMS Not Delivered? Causes, DLR Codes and How to Fix Them
SMS not delivered? Diagnose by delivery receipt status, sender ID and registration, content filtering, DND, number validity and route, then follow the fix checklist.
By OmniChannels.ai Editorial Team · Reviewed by BroadNet Messaging Solutions Team
SMS & OTP
Short answer
When an SMS is not delivered, start with the delivery receipt status: UNDELIV or REJECTD points to the number, sender ID, registration or content; EXPIRED means the handset was unreachable for the whole validity period; no receipt at all points to the route. Then check number validity, sender ID registration for the destination country, content filtering, do-not-disturb registries and route quality, in that order, and retest with your own handsets.
On this page
- How do you start diagnosing an undelivered SMS?
- What do the DLR statuses mean?
- Is the number valid and reachable?
- Is the sender ID registered and accepted?
- Is content or link filtering blocking the message?
- Is a do-not-disturb registry blocking promotional traffic?
- Is the route the problem?
- What is the fix checklist?
- Worked example: a clinic chain's missing reminders
- How do you keep delivery rate high over time?
- How OmniChannels.ai helps
Key takeaways
- Read the final delivery receipt status first: DELIVRD, EXPIRED, UNDELIV and REJECTD each point to a different cause.
- No receipt is a different problem from a failed receipt, and usually indicates the route or operator rather than the number.
- Many destination countries require registered sender IDs; sending unregistered IDs can lead to rejection or replacement.
- Content, links and sending patterns are filtered by operators, and promotional traffic is also subject to do-not-disturb registries in some markets.
- Validate numbers before sending, and test each operator with your own handsets before blaming the message.
This guide is for developers, marketers and support teams who see messages stuck in "sent", failed or simply missing. It gives you a diagnostic order, so you can find the cause from the data you already have instead of guessing.
How do you start diagnosing an undelivered SMS?
Start with the final status of the individual message, not the campaign average. A delivery report (DLR) tells you what the network told the platform; handset tests tell you what actually reached a person. You need both.
Collect for a sample of failures: destination number, operator (MCC/MNC), sender ID, timestamp, status, error code and message text. Then group by operator and sender ID. Patterns jump out quickly: failures on one operator point to registration or routing; failures across all operators point to content or the number list.
What do the DLR statuses mean?
The SMPP 3.4 specification defines the delivery receipt states that most platforms map to their own statuses. Use this table to translate them.
| DLR status | Meaning in the SMPP specification | Most likely causes | First action |
|---|---|---|---|
| DELIVRD | Delivered to destination | None. If the user says they got nothing, suspect a false receipt or a filtered inbox | Test on handsets; review route |
| EXPIRED | Validity period expired | Handset off, out of coverage or full | Check validity period; retry if content still valid |
| UNDELIV | Undeliverable | Invalid, barred or ported number; operator refusal | Validate numbers; check error code |
| REJECTD | Rejected | Sender ID, content, blocked prefix or policy rejection | Check registration and content |
| DELETED | Deleted | Removed by the SMSC or cancelled | Ask your provider why |
| ACCEPTD | Accepted (message read on behalf of the subscriber) | Rare; manual handling | Ask provider |
| UNKNOWN | Invalid state | Route returned an unknown state | Escalate with message IDs |
The receipt also carries an error field where "a Network specific error code or an SMSC error code" may be present. These codes are not standardised, so ask your provider for the mapping per operator. Our delivery report decoder and the guide to message delivery status help translate platform statuses, and the delivery receipt glossary entry gives the basics.
Note the difference between a submission error and a delivery failure. If your platform rejects the request before it leaves (invalid format, no credit, blocked destination), the cause is in your request. If it accepts the message and a receipt later says UNDELIV, the cause is further down the chain. The errors and limits reference lists the platform's own codes.
Is the number valid and reachable?
Check this first when failures concentrate on a few numbers. Typical problems are wrong formats (missing country code, extra zero), landlines, disconnected numbers and numbers that have moved between operators.
Fixes:
- Normalise numbers to E.164 with the phone number formatter.
- Run an HLR lookup on lists before big sends. It tells you whether a number is active, which network it is on and whether it has been ported, so you stop paying for messages that cannot arrive. See also the HLR lookup glossary.
- Remove numbers that fail repeatedly. Continued sending to dead numbers hurts your reputation with operator filters.
Is the sender ID registered and accepted?
If failures are concentrated on one operator or one country, suspect the sender ID. Many countries require alphanumeric sender IDs to be registered with the operators or regulator before they can be used. Unregistered IDs may be rejected, or replaced by a numeric sender, depending on the network.
Checks:
- Confirm whether the destination requires registration. The sender ID checker and our country pages, for example Nigeria, list the rules.
- Confirm the registered ID matches what you send, character for character (case and spaces matter on some networks).
- Check that the registration covers the use case. In some markets registrations are made per use case (transactional or promotional).
- Look for a change: a new ID, a changed account or a new route often triggers failures.
Our team can prepare and file registrations with you through the registration service. Approval decisions stay with operators and regulators, so plan ahead and allow for the lead times published on each country page.
Is content or link filtering blocking the message?
If delivery fails across operators for specific campaigns but works for others, look at the content. Operators filter A2P traffic with SMS firewalls and look for patterns that resemble spam or phishing.
Common triggers:
- Shortened or unfamiliar links, especially public link shorteners shared by many senders. Use a branded domain.
- Phishing-like wording: urgent account warnings, requests to "verify" details, prize language.
- Identical text to many recipients at high speed from a new sender ID.
- Wrong traffic type: promotional content sent as transactional.
- Blocked keywords that vary by country and operator.
Fixes: put your brand name first, keep the message short, use one clear link on a domain you own, and send promotional and transactional traffic separately. Text length also matters: Arabic and other non-GSM characters change encoding and segment counts, which affects cost and rendering. The SMS character counter shows segments, and our guide to Unicode and Arabic SMS explains the limits that follow from 3GPP encoding rules.
Is a do-not-disturb registry blocking promotional traffic?
In some countries subscribers can register to block promotional messages, and operators enforce it. In Nigeria, for example, the NCC's DND service lets any subscriber text STOP to 2442 to block unsolicited promotional messages, or pick categories they still want. Promotional messages to registered numbers are suppressed.
What to do: check the destination country rules, separate marketing from transactional traffic honestly, keep proof of consent and honour opt-outs. See our bulk SMS Nigeria guide for a worked case, and the DND registry glossary entry. Labelling a promotion as transactional to avoid a registry is a policy violation that can get the sender ID blocked.
Is the route the problem?
If numbers, sender IDs and content are clean but delivery still swings from day to day, suspect the route. Signs include missing receipts on one operator, sender IDs replaced by random numbers, long delays and receipts for phones that are off.
Check with your provider which route carries the traffic to that operator, and read grey route vs direct route SMS. Test on your own handsets, on each operator, at different times. If your provider cannot say how the path reaches the operator, that is your answer.
What is the fix checklist?
Work through this list in order and stop when the data explains the failures.
- Pull a sample of failed messages with status, error code, operator and sender ID.
- Group by operator, then by sender ID, then by campaign.
- Identify the status: UNDELIV or REJECTD (go to steps 4 to 6), EXPIRED (step 7), no receipt (step 8).
- Validate and normalise numbers; remove dead ones.
- Confirm sender ID registration for each affected country and operator.
- Review content and links; test a plain version of the message.
- Review the validity period and retry policy; do not retry stale OTPs.
- Test on your own handsets per operator; ask the provider about the route and receipts.
- Fix one variable at a time and re-measure delivery per operator.
Worked example: a clinic chain's missing reminders
"Palmview Clinics" (synthetic) sends appointment reminders and sees many patients on one operator reporting nothing. The DLR report shows a block of UNDELIV on that operator, while the others deliver. The sender ID turns out to be registered on two of three networks. The team files the missing registration, switches reminders to plain text with the clinic name first, and runs an HLR check on the patient list, which removes a set of disconnected numbers.
Two weeks later delivery on the third operator matches the others. The team also sets a validity period of a few hours for reminders, so patients do not receive stale messages after an appointment passes.
How do you keep delivery rate high over time?
- Monitor delivery by operator and destination, not as one global figure.
- Alert on drops, since a registration change on one network can silently affect a whole segment.
- Keep opt-out and consent records, and clean lists regularly.
- Use fallback for critical messages, for example WhatsApp then SMS.
- Review sender IDs and templates whenever you add a country.
How OmniChannels.ai helps
SMS on OmniChannels.ai runs over BroadNet Technologies' direct operator connectivity, with summary and advanced delivery reports, filters and CSV export, and delivery webhooks that normalise statuses. HLR and number lookup is available, and we prepare and file sender ID registrations with you. If you want us to review a failing destination, book a demo and bring a sample of your delivery report. When SMS fails, a call can help; see the voice API for call fallback page.
Frequently asked questions
Why is my SMS not being delivered?
Common causes are an invalid or switched-off number, an unregistered or blocked sender ID, content or link filtering by the operator, a do-not-disturb registration for promotional messages and a poor route. The delivery receipt status narrows the cause. Check that first, then test the same message to your own handsets on each operator in the destination.
What does the DLR status UNDELIV mean?
In the SMPP 3.4 specification, UNDELIV is the delivery receipt text for a message in the undeliverable state, meaning the network could not deliver it. The receipt's error field may carry a network or SMSC-specific code that explains why. The number may be invalid, barred or ported, or the operator may have refused the message.
What does EXPIRED mean in an SMS delivery report?
EXPIRED means the message validity period ended before delivery. This happens most often when the handset is switched off or out of coverage. A short validity period, such as for OTPs, makes expiry more likely, which is intended: an old code is useless. Retry only if the content is still valid.
Can an SMS be delivered without a delivery receipt?
Yes. Some operators and routes return no final receipt, or return it late, so a missing receipt is not proof of failure. Compare against handset tests. If the same operator never returns receipts for your traffic, ask your provider whether the route supports them.
Do I need a registered sender ID to deliver SMS?
In many countries alphanumeric sender IDs must be registered with operators or the regulator before use, and unregistered IDs may be rejected or replaced. Rules differ by country, so check the market's page in our sender ID guides or ask us to handle the registration with you.
How do I improve SMS delivery rate?
Validate numbers, register and keep a consistent sender ID, keep content clean and avoid suspicious shortened links, respect opt-outs and do-not-disturb lists, set sensible validity periods and use direct routes. Then monitor delivery rate by operator and destination, so you notice a drop on one network quickly.
Sources
Keep reading
More guidesSMS & OTP
OTP Not Received? Causes, Diagnostic Table and Fixes
OTP not received? Find the cause fast: number format, DND, sender ID filtering, roaming, delays and pumping controls, with a diagnostic table and fixes.
10 min read
SMS & OTP
Two-Way SMS: How It Works, Use Cases and Setup Guide
Two-way SMS explained: how replies reach you, which sender types can receive them, STOP and keyword handling, use cases with templates, setup steps and country limits.
10 min read
Integration
Send SMS via API: Python, Node.js, PHP and cURL Examples
Send SMS with an API in Python, Node.js, PHP and cURL: single and bulk sends, Unicode and Arabic, segment counting, delivery status webhooks and error handling.
10 min read
