Email Delivery Failures Playbook¶
Symptom: Email not delivered or bouncing.
Hypotheses¶
| Hypothesis | Likely Cause | Evidence Tag |
|---|---|---|
| Domain not verified | Domain is in Pending or Failed status in Azure Portal | [Observed] |
| SPF/DKIM failure | Email rejected by recipient because it failed authentication checks | [Measured] |
| Recipient invalid | The destination email address does not exist or has a full mailbox | [Observed] |
| Content filtered | Email was blocked due to suspicious content or attachments | [Inferred] |
| Rate limiting | Sending more emails than allowed by the current sender tier | [Correlated] |
flowchart TD
S["Email not delivered"] --> H1{"Sender domain verified?"}
H1 -- no --> R1["Complete domain verification in ACS"]
H1 -- yes --> H2{"SPF or DKIM failing?"}
H2 -- yes --> R2["Fix DNS auth records"]
H2 -- no --> H3{"Recipient invalid or content filtered?"}
H3 -- yes --> R3["Suppress invalid recipients and revise content"]
H3 -- no --> H4{"Hitting rate limits?"}
H4 -- yes --> R4["Throttle sending within limits"]
H4 -- no --> EV["Collect evidence: delivery reports, metrics, SMTP status"]
EV --> M["Apply mitigation and confirm next send"] Evidence Collection¶
1. Delivery Reports¶
Query the ACSEmailStatusUpdateOperational table in Log Analytics. Filter for recipient-level rows (isnotempty(RecipientId)) and inspect DeliveryStatus, SmtpStatusCode, and EnhancedSmtpStatusCode. See the ACS Email Logs schema for the full column list.
2. Monitor Metrics¶
Review the Email Service API Requests and Email Service Delivery Status Updates metrics on the ACS resource. See Monitoring → Email metrics for the canonical metric names and how to chart them.
3. SMTP Status Codes¶
Look for bounce messages containing standard SMTP status codes (e.g., 550, 554).
Validation¶
[Observed] Check Domain Verification¶
Confirm the domain status is Verified in the ACS resource. If it's Pending, messages cannot be sent.
[Measured] Test SPF/DKIM¶
Use a third-party tool (e.g., Mail-Tester) to send a test email and verify that authentication headers are correct and pass verification.
[Inferred] Review Spam Logs¶
Filter ACSEmailStatusUpdateOperational for DeliveryStatus in ("FilteredSpam", "Quarantined") on recipient-level rows. Inspect EnhancedSmtpStatusCode for the carrier's reason code.
Mitigation¶
- Complete Verification: Ensure all required DNS records (SPF, DKIM) are correctly added to your DNS provider.
- Correct Sender Address: Use only verified sender addresses that match your domain.
- Cleanse Recipient Lists: Implement an email verification step to remove invalid or inactive addresses.
- Follow Best Practices: Avoid suspicious keywords in the subject line and ensure a valid
Unsubscribelink is present. - Request Tier Increase: If consistently hitting rate limits, request a higher sending tier from Azure support.
See Also¶
Sources¶
- Azure Communication Services Email Status Codes
- Gmail/Outlook Sending Guidelines