Email delivery diagnostics

Trace missing test emails through the evidence chain

Don’t start by changing the template or sending repeatedly. First confirm that the app generated the message, then check whether the queue and sending service accepted it, and finally verify authentication, policies, and the receiving inbox. Record the timestamp and message ID at every step.

Quick triage

Four checkpoints: find where the chain breaks

Proceed in order. Don’t jump ahead and guess without evidence from the previous checkpoint.

1App generation

Did the business action create a message for the correct recipient address?

2Queue processing

Did the asynchronous job leave the queue successfully, or is it delayed, failing, or duplicated?

3Sender acceptance

Did the provider report acceptance, delay, bounce, or a policy rejection?

4Inbox delivery

Is the address still valid, and are list refreshes and message content loading correctly?

1. Establish a baseline with a minimal test

Create a new test inbox, copy its address, and immediately trigger a simple email with a unique subject. You may include the test ID in the subject, but never include production keys or real customer data.

Record when you click the business button, when the job enters the queue, and when the provider accepts it. If a simple email arrives but a complex template does not, the issue is more likely template rendering, attachments, or content policy than basic network connectivity.

2. Confirm that the app actually generated the email

Check whether the business event met the sending conditions, such as account status, environment flags, deduplication rules, and notification preferences. Logs should show the final recipient address—not just a generic “email job created” message.

Verify the address character by character, especially if the app has cached an old address after you changed test inboxes. If there is no message record, fix the trigger and template parameters first; don’t investigate DNS yet.

Evidence you should see

  • Business event ID and template version
  • Normalized recipient address
  • Successful message creation or a clear error

3. Check the queue, retries, and timing

Asynchronous email often gets stuck in the queue connection, worker process, scheduled time, or retry backoff. Compare the enqueue time, first execution, each retry, and final status to confirm that the job is not still waiting.

If one event produces multiple emails, check whether the idempotency key is stable and whether the consumer timed out before receiving a success response. Don’t hide deterministic template errors with unlimited retries, or the receiving inbox may get duplicate messages.

4. Read the sending provider’s events

An HTTP 2xx response usually means only that the provider accepted the request—not that the recipient’s server accepted the message. Continue checking for events such as queued, sent, delivered, deferred, bounced, or rejected, and retain the provider message ID.

SMTP 4xx responses usually indicate a temporary delay and can be handled with the recommended backoff. 5xx responses are generally permanent rejections; fix the address, authentication, or policy first. If the provider has no corresponding message, the break is still between the app and the provider.

5. Verify sender domain authentication

Check that SPF covers the actual sending source, that the DKIM signing domain aligns with the From domain as configured, and that DMARC alignment and policy match the test environment. After a DNS change, also account for TTLs and resolver caches.

Don’t rely only on a green status in the dashboard. Read the authentication results in the specific email event or raw headers. Shared test domains that frequently switch sending platforms can also retain stale records or exceed the SPF lookup limit.

6. Isolate template and content policy issues

Send a plain-text baseline first, then add HTML, images, links, and attachments step by step. If delivery fails after adding one item, check URL reputation, attachment type, encoding, message size, and unreplaced template variables.

Don’t imitate phishing language in the subject or body, and never use real credentials. For verification-code tests, use a fixed test code and clearly label the environment so testers don’t mistake the message for a production notification.

7. Rule out receiving-inbox issues

Confirm that the test inbox countdown has not reached zero and that the current toolbar address matches the sending target. Click Refresh manually. If you just changed addresses, messages from the old inbox will not move to the new one.

After the real email arrives, the demo row should disappear from the list and only real data should remain. Open the details and check the subject, sender, arrival time, HTML body, and plain-text fallback. Don’t judge template completeness from the list preview alone.

8. Analyze delays, ordering, and duplicates

Use the same time zone to compare the business trigger, enqueue, provider acceptance, and inbox arrival times. Attribute the delay to a stage only when one checkpoint is clearly longer; inconsistent time zones can lead to false conclusions.

For resend tests, use a new unique event ID while retaining the old message ID. If the later message arrives first, check queue priority, concurrent consumers, and provider retries instead of assuming the inbox sorted the list incorrectly.

9. Narrow the issue with a symptom matrix

SymptomCheck firstNext step
No send log in the appTrigger conditions, environment flags, template parametersFix the business flow, then rerun the minimal test
Queued, but no provider eventConsumer, credentials, network, and timeoutsReview job errors and retry records
Provider shows deferredSMTP 4xx responses, rate limits, and reputationWait for the backoff period; don’t resend continuously
Provider shows bouncedAddress, domain authentication, and rejection reasonFix the issue using the enhanced status code
Plain text arrives, HTML does notLinks, attachments, size, and content policyAdd components one at a time to identify the trigger
Shows delivered, but the list is emptyTarget address, inbox expiry, and message IDProvide complete evidence to receiving-inbox support

10. When to escalate and what to provide

If the steps above do not identify the issue, compile a minimal evidence package containing the timeline, target address, business event ID, provider message ID, final status, and ruled-out possibilities. Redact sensitive message content and retain only what is needed to reproduce the issue.

When contacting MSGTMP support, include the inbox creation and expiry times, whether you changed the address, and the final response recorded by the sending provider. Never send passwords, login codes, or complete private keys. The support email is support@msgtmp.com.

Definition of diagnostic complete

Success is not “it happened to arrive after a resend.” You should be able to identify the break, explain the cause, and prove with the same minimal test that the fix works consistently.