Email Testing Checklist for Developers: From Request to Expiry
Reviewed by Once Email technical review
Email testing is more than confirming that a message appeared. A reliable test follows the event from the application request through delivery, rendering, user action, expiry and retry behaviour. It also checks that the flow fails safely.
Use this checklist only on systems and accounts you own or are authorised to test. Do not use temporary inboxes to create bulk accounts, evade another website's limits or test a third-party reset flow without permission. Once Email receives messages only; it does not send replies and cannot prove what happened inside the sender's application.
1. Define one test case before requesting mail
Record the environment, build, browser, feature and expected result before pressing the button. Give each run a neutral identifier such as signup-valid-address or reset-expired-link; do not put a password, token or personal address in the test name.
Prepare cases for the paths the product actually supports:
- a valid sign-up or address-verification request;
- an address with an obvious input error;
- a repeated request while the first message is still valid;
- an expired or already-used code;
- a password-reset request for both an existing and a non-existing account;
- cancellation, return navigation and a second browser session where relevant.
The OWASP Web Security Testing Guide treats reset as an alternative route into an account and recommends reviewing every supported interface. Your test plan should therefore cover the web interface, mobile application and API separately when their behaviour can differ.
2. Check the request response without enumerating users
Submit one authorised request and note the visible response, status and time. For password recovery, existing and non-existing accounts should not disclose account membership through clearly different messages or response timing.
Do not generate a large sample to test this. Coordinate load, abuse and rate-limit testing with the system owner, use a dedicated environment and stop at the approved boundary. OWASP's Forgot Password Cheat Sheet recommends consistent responses and protection against excessive automated submissions because a reset endpoint can otherwise expose account existence or flood an inbox.
Verify that a second click does not silently create an unsafe collection of simultaneously valid secrets. The intended policy might invalidate the first code, reuse a pending request or allow a carefully limited number; the product team must define which result is correct.
3. Observe delivery as a timed state, not an instant assertion
Start a timer when the application accepts the request. Record when the message becomes visible, but use a reasonable observation window instead of treating a few seconds of delay as failure. Mail passes through queues and filters, so arrival time is a distribution rather than a fixed constant.
When using Once Email for an authorised low-risk test:
- Create or select a receive-only address with enough remaining lifetime.
- Copy the address exactly into the application under test.
- Request one message and keep the inbox open.
- If it does not appear, refresh deliberately and follow the verification email troubleshooting checklist.
- Record the request and observed-arrival times in UTC, plus the test environment.
Do not claim that a missing message proves the sender never sent it. Application logs, provider events and message headers are separate evidence sources. Use a correlation value created by the test system when possible, but do not expose it publicly if it grants access or identifies a user.
4. Validate the message as content and data
Compare the received subject, sender domain and visible purpose with the approved template. Check the plain-text and HTML alternatives when the application generates both. Review spacing, wrapping, colour contrast and the meaningful order of content on desktop and a narrow mobile viewport.
Then check the variable data:
- the intended test address appears where required and nowhere unexpected;
- the environment name is clear enough to prevent staging mail being mistaken for production;
- dates and expiry statements use an unambiguous time zone;
- the code or action is associated with the correct test case;
- links use HTTPS and the expected host;
- no internal stack trace, API key, password or unrelated customer data appears.
Do not open a suspicious link merely to discover its destination. Copy message HTML into the browser-local email link checker to list URLs and remote resources without rendering the email, then compare the destination host with the test specification.
5. Exercise success, reuse and expiry
For a code or link, test the approved happy path once. Confirm that it performs only the intended action, reaches the correct environment and does not expose the secret in an unnecessary page element or analytics event.
Next, check the security transitions:
- a single-use secret stops working after success;
- an expired secret is rejected without completing the action;
- a malformed value fails safely;
- a replacement request follows the documented invalidation rule;
- opening the action in a different browser does not bypass required context;
- a password reset does not automatically weaken multi-factor authentication or leave unwanted sessions active.
OWASP recommends random, sufficiently long, securely stored, single-use and expiring reset secrets. It also recommends HTTPS reset URLs and protections against guessing. Your test should verify product behaviour, not attempt uncontrolled brute force.
6. Test failure messages and recovery
A user needs a useful next step when delivery is delayed, a code expires or a link has already been used. Confirm that errors do not reveal account existence, secret fragments or internal infrastructure. The interface should allow a legitimate retry without encouraging repeated rapid requests.
Also test what happens when the temporary inbox expires before the account flow is complete. A disposable address is unsuitable when the account needs long-term recovery, receipts or security notices. The temporary versus permanent email guide explains when a permanent, controlled address is the safer test assumption.
7. Record a minimal, reproducible result
A useful test result includes the case, environment, build, UTC timeline, expected result, actual result and one carefully redacted evidence item. State whether the problem is in request creation, message delivery, content, action, expiry or recovery. Avoid a vague result such as “email broken.”
If the evidence contains an address, verification code, reset link, Message-ID, cookie or internal hostname, do not upload it unchanged. Follow the email test evidence redaction guide before attaching it to an issue.
Release decision checklist
Before marking the flow ready, confirm that authorised success cases pass, negative cases fail safely, retry and expiry rules match the specification, content works at narrow width, no secret enters logs or analytics, and evidence can reproduce failures without exposing a usable credential. One successful arrival is useful evidence, but it is not a complete email-flow test.
Why Once Email Is Receive-Only by Design
A factual introduction to Once Email, the problems a temporary inbox can solve, the cases where it should not be used, and the safety boundaries behind the service.
How to Save Email Test Evidence Without Exposing Secrets
Create useful screenshots, headers and bug reports while removing verification codes, reset tokens, email addresses, identifiers and unrelated personal data.