When a customer says an invoice or password reset never arrived, start with one message. Find the time the app created it, the sending provider's record for that attempt, and the last status recorded for the recipient. Without that chain, changing SPF records or rewriting the subject line is a guess.
For example, imagine your support team gets two tickets saying “I never got the reset email.” One request never made it past a background job. The other reached a company's mail gateway and ended up in quarantine. The customer sees the same result. The first fix belongs in your app; the second starts with the receiving company's mail administrator. Sending a third reset from the same broken route helps neither person.
This guide is for messages a business app sends in response to an action: resets, invoices, receipts and order confirmations. It explains how to locate the failure and what to ask your developer or email provider to check.
What does “sent” mean in your app?
A success message on the website may tell you that the app accepted a request. It does not tell you that a worker ran, a provider accepted an email, or a receiving server put it in an inbox. Start by finding out which of those events your interface actually records.
Take Amazon SES as an example. Its sending event documentation distinguishes a successful send request from delivery to the recipient's mail server. It also documents a case in which a send is counted but delivery is suppressed. Other providers use different labels, so check the definition in the tool you use rather than matching words across dashboards.
| Evidence you have | What to check next | Who can usually check it |
|---|---|---|
| The app recorded the request, but has no send attempt | Look for a pending job, a failed template or a worker error | App team |
| The sending service accepted the request and assigned an ID | Trace that ID to a delivery, delay, bounce or suppression outcome | App team or sending provider |
| The recipient server deferred or rejected the message | Read the response for that recipient; check whether the provider is still retrying | Sending provider or mail administrator |
| The recipient server accepted the message | Check spam, quarantine, forwarding and mailbox rules; ask an administrator to trace it if needed | Recipient or mail administrator |
| The recipient received the message but the reset or invoice link fails | Check link expiry, account and permissions; investigate the application flow | App team |
Record the time, message type and internal event ID. Use the provider's message ID to find the delivery trail. Where the provider permits a multi-recipient send, check the specific recipient's outcome: one success is not evidence that every recipient received the message. Keep full addresses in systems with restricted access, and keep reset links, tokens and invoice contents out of general logs and support tickets.
An empty dashboard is not proof that a message disappeared. Confirm event reporting was enabled for the route that sent it. Check the right account, environment and sending region, and compare time zones when matching events. If the provider has the delivery outcome but your app doesn't, you have a gap in reporting as well as whatever happened to the message.
What should you do with a delay, bounce or suppression?
A delay means something different from a permanent rejection. Read the reason and the provider's retry status before taking action. When the provider is still retrying the original message, repeatedly starting new sends can create multiple copies without clearing the original delay. For a time-sensitive reset, the delay can outlast the link even if the email eventually arrives.
If a bounce says an address does not exist, verify the address through an appropriate account or support process instead of resending to the same destination. A policy rejection needs a different response: read the diagnostic and follow the receiving provider's guidance. A provider may also accept a message initially and report a later failure. Amazon SES's deliverability guide explains the difference between immediate and asynchronous bounces. Keep the later event attached to the original attempt.
A suppressed send needs investigation before anyone removes the entry. Check why the address was suppressed, whether it is still valid and whether the message should be sent to it. Bulk clearing a suppression list to get one overdue invoice out can restore sends that were stopped for good reason. If your app receives provider notifications, make sure support can distinguish a suppression from a normal delivery delay.
For a critical document, give the authorised customer another way to retrieve it, such as the billing screen in a signed-in account. That lets them get on with their work while you trace the email. Use the existing account recovery process when login itself is the problem; opening access to an invoice or account is not an email troubleshooting step.
How can you tell whether SPF, DKIM or DMARC is the problem?
Start with the receiving provider's diagnostic or a copy received by a mailbox you control. In Gmail on a computer, use Show original to see the full header. A test is useful when it travels through the same app, provider and sender identity as the missing message. A note you compose from a staff mailbox with the same visible From address can take an entirely different route.
SPF checks whether the sending system is permitted to use the relevant mail envelope domain. DKIM verifies a signature associated with a signing domain. DMARC connects those checks to the domain the recipient actually sees in From. Under the DMARC specification, at least one of SPF or DKIM must pass with an aligned domain for DMARC to pass. An SPF pass for the provider's domain alone does not establish that your own From domain is aligned.
Take a fictional sender, receipts@example.com. If the provider's envelope domain passes SPF but does not align with example.com, and no aligned DKIM signature passes, that SPF pass does not satisfy DMARC. If an aligned DKIM signature does pass, DMARC can pass through DKIM. You still need to meet any separate SPF or DKIM requirements imposed by the mailbox provider.
Make an inventory before editing production DNS. Include your helpdesk, invoicing system, CRM, newsletter service and every production app that uses the domain. Use each service's actual instructions for its records, and verify alignment on received test messages. If you are introducing a stricter DMARC policy, review legitimate sender coverage and reporting first. Tightening the policy while a billing platform sends unaligned mail can create a new incident while you are fixing the old one.
Which Gmail rules matter for transactional mail?
Google's sender guidelines apply to mail sent to personal Gmail accounts. Even senders below the bulk threshold need to meet the baseline, including SPF or DKIM. Google's bulk sender rules require both, plus DMARC and alignment for direct mail. Its sender FAQ explains that the threshold is close to 5,000 messages to personal Gmail accounts in 24 hours, counted across the same primary domain. Google treats a sender that qualifies once as a bulk sender going forward.
So a small app should check what the rest of the business sends under the same primary domain. Putting receipts on a subdomain can make ownership and monitoring clearer, but it does not remove those messages from Google's primary-domain counting. The one-click unsubscribe rule in Google's bulk sender guidelines applies to marketing and subscribed messages, not purely transactional ones. Keep optional promotions out of essential account messages so the purpose of the email stays clear.
Google's rules are a useful starting point, not a placement test for every mailbox. If Gmail accepts a message and a corporate recipient has a problem, compare the two delivery records. A recipient's own filtering or quarantine can still be the difference. Similarly, one successful test to Gmail does not clear every sender identity in your system.
What should the app do before this becomes a support problem?
Trace each essential notification from the business event to the send attempt. For an invoice, that means recording the invoice event and the provider ID separately, so support can check whether delivery failed without creating another invoice. For password resets, keep request responses consistent whether or not the account exists. Give legitimate users a way to get help without disclosing account existence or reset details to anyone else.
Use a controlled test to verify the whole workflow before release. A representative reset test starts at the reset screen, checks the provider event, confirms receipt in a mailbox you own and uses the link before it expires. Test what the customer sees when the email comes late or the link expires. For invoices, confirm the notification points to the right document and account; a message arriving in the inbox is only half the test. If you also use SMS, check its separate delivery and expiry behaviour using the OTP delivery checklist.
During a web application build, agree who monitors permanent failures, abnormal delays and gaps in event reporting. Set thresholds based on how the workflow is used. A delay that is acceptable for a monthly statement may be too long for a password reset. Give support the record they need to answer “did it send?” without access to the credentials that let the app send mail.
What should you avoid fixing first?
Do not change the sending domain, provider, subject and template together. You lose the evidence needed to tell what helped, and you risk moving healthy mail onto an untested route. Compare one known message before and after a change. If there is no provider attempt, the DNS settings are not where to start. If only one recipient organisation is affected, trace that delivery before planning a migration.
Likewise, do not assume that passing all three authentication checks guarantees an inbox placement. If a message reached the receiving server, investigate filtering, reputation and whether recipients expect the mail. Check recent changes in volume, sender identity, links or templates against when the problem began. Use a controlled mailbox or the recipient's administrator to isolate the issue; a copy in Spam on one test account is evidence about that account, not about your entire customer base.
If you want help narrowing this down, contact Cloud 9 Digital with the message type, approximate time and sanitised provider status. Those three details are a better starting point than buying a new email service.
Bharat Vasireddy
Founder & Digital Marketing Strategist8+ years of experience in performance marketing and web development. I help businesses scale through data-driven SEO, Google Ads, and high-performance websites.