Developer & QA checklist

Check every test email before and after delivery

Receiving an email is only the beginning. Use this checklist to verify business triggers, recipient identity, content hierarchy, calls to action, timing, failure paths, and privacy boundaries so release decisions are reproducible.

Coverage

Six check groups for a complete regression

These cards are not decoration. Work from left to right in test order, and never approve a blocked check just by sending the email again.

1. Test preparation

Use a non-production environment and synthetic users, and confirm that the recipient address is still valid.
Record the build number, template version, language, trigger time, and expected result.
Assign a unique event ID to this test case so you can trace it from the logs to the inbox.

2. Trigger & delivery

The business action generates exactly one email for the correct recipient, with no duplicates or misdirected messages.
The queue completes successfully, and the sender's event matches the same message ID.
Delivery time falls within the expected range, with understandable statuses for delays and bounces.

3. Subject & preview

The sender name and address are recognizable, and Reply-To points to the intended channel.
The subject is clear and all variables are populated; it does not expose environment names, object IDs, or placeholders.
Preview text complements the subject without repeating the heading or exposing CSS or unsubscribe fragments.

4. Body & call to action

Headings, explanations, and the primary button have a clear hierarchy, so users never have to guess what to do next.
Button copy is specific, the destination domain is correct, and tracking parameters do not break the redirect.
Images have alt text, and the core task remains clear when images are disabled.

5. Codes & security

The code length, validity period, and page instructions match; the code is prominent but never placed in the subject.
When a code is resent, the relationship between old and new codes follows the rules, and expired codes fail clearly.
Logs and error messages do not expose complete codes, tokens, or recovery links.

6. Compatibility & wrap-up

There is no horizontal overflow on desktop or narrow screens, and text remains readable in both light and dark modes.
The plain-text version conveys the same action, and long links and words wrap correctly.
Delete test data as planned, and do not leave temporary addresses in production account profiles.

Identity and triggers must be reproducible

Before testing, document who did what, and in which state, then list the conditions that should and should not send an email. Testing only the happy path misses important branches such as disabled notifications, already-verified accounts, and duplicate-event handling.

Copy the recipient address from the current test toolbar instead of typing it manually. When you change the address, update the test user as well: old messages do not migrate, and mixing old and new addresses undermines trustworthy results.

Test verification codes and reset links together

Check code length, character set, validity period, one-time use, and resend rules. If the page says 10 minutes but the backend expires the code after 5, that is a product defect—not a minor copy issue.

Also test feedback for invalid and expired codes, repeated entry, and frequent resends. For link-based verification, check the protocol, hostname, environment, one-time token, and final page after the redirect; do not stop at confirming that the button works.

Check HTML, images, and plain text separately

In the email body, verify container width, heading wraps, button height, paragraph spacing, and image scaling. Long names, project names, and French or Portuguese button labels are more likely than Chinese to break the layout, so regress with the longest reasonable samples.

With images disabled, the brand and core task should remain recognizable. The plain-text version should retain the code, expiry, links, and support details. Do not put everything in an image or let hidden preview text appear as the first line of the body.

Keep language, time zones, and accessibility consistent

The subject, preview, body, buttons, and error messages must use the same language. Format dates, amounts, and time zones for the user's locale. If a translation is missing, use a controlled fallback instead of mixing languages at random in one email.

Heading levels should be sequential, link text should describe its purpose, and images should have suitable alt text. Color must not be the only way to convey status; light text on white and dark text on colored backgrounds both need sufficient contrast.

Failures, delays, and duplicates are part of the product experience

Simulate queue delays, temporary provider rejections, and permanent bounces. Check that retries follow policy without creating duplicate notifications. The UI should provide actionable statuses instead of labeling every failure a network error.

If a test email does not arrive, diagnose it layer by layer using evidence from the app, queue, sending platform, DNS, and receiving end. Preserve evidence of the first failure, then verify the fix; do not delete the original trail just because a resend succeeds.

Set release gates by risk

LevelExampleRelease gateFailure handling
BlockerEmail not generated, wrong recipient, unusable code, incorrect primary linkAll checks must passStop the release and fix the root cause
HighDuplicate send, inconsistent expiry, mobile body clippedFix it or obtain written acceptance from the ownerSet a clear deadline and regression case
MediumDuplicate preview, unclear secondary-link labels, poor wrapping for long textAssess audience and frequencySchedule it for the next iteration and retain evidence
LowMinor visual discrepancy that does not affect the taskDoes not block the core flowRecord the template and client scope

Turn check results into traceable evidence

Record the case ID, environment, template version, language, recipient-address prefix, trigger and delivery times, message ID, result, and defect link. Screenshots should include the subject and key body content, with tokens and real personal data redacted.

After a fix, run the regression under the same conditions and add the nearest failure path. If you need help locating a delivery issue, use the email delivery diagnostics guide or contact support@msgtmp.com.