Signup testing / Email timeline

How to Test Signup Email Delivery Order

When a user says, “I didn’t get the verification code,” the real issue may be that an earlier email arrived late. Don’t just check whether an email eventually arrives—track every request and message on a timeline.

Field notesAbout 7 min read

The hardest signup-testing bugs to reproduce usually aren’t complete email failures. They’re cases where two emails arrive in a different order from the one they were sent in: the first arrives late, the second arrives early, and the user opens the message at the top of the inbox but enters an expired code. To spot these cases, start each test run with a clean inbox address, then track page events alongside inbox events.

Set a clear starting point for each test

Before sending, note the browser time, test environment, signup account, and recipient address. Use the temporary test inbox to get a fresh address. Make sure it has no messages from the previous run, then enter it in the signup form. Don’t assign the same address to multiple concurrent test cases; once their emails land in the same inbox, it’s hard to tell which case triggered each one.

A “Sent successfully” message on the page doesn’t necessarily mean the email has reached the user. It might only mean the frontend request succeeded or the message was added to a queue. Track four separate moments: when the user clicks Send, when the page confirms success, when the email appears in the inbox, and when the user actually opens it. If your team can access server logs, you can also record when the mail service accepted the request—but don’t mix internal log times with the user’s local time zone in the same field.

Track sending and delivery in one table

At minimum, a test record should include the request number, action, time, email subject, time displayed in the inbox, validity period stated in the message, and the request associated with the code actually entered. Choose the time precision your system requires; for retries within seconds, record times to the second. Keep records in a controlled test environment, and don’t upload raw verification codes to public tickets.

Example: record what you observe, not what you expect
Local time Action or observation Question to verify
10:00:00 Request A: Send verification code Does the Send button disable right away?
10:00:08 Page says you can retry or continue Does the cooldown match when the email was actually sent?
10:00:45 Request B: Click Resend Should the old code be invalidated?
10:00:48 Email B arrives first Can the user tell which message is the new one?
10:01:02 Email A arrives later Is the error clear when the old code is entered?

This isn’t a requirement for services to deliver email to the second. It’s a way to gather evidence for a bug: if the UI sorts only by arrival time, A might be mistaken for the newest verification code. Record the subject, message text, and email timestamp for both messages, then check whether the product clearly explains that only the latest code is valid.

What to test when resending

Repeated clicks during the cooldown

First check whether the button is disabled and whether the remaining wait time is shown. Click repeatedly or press Enter quickly during the wait, then see whether one email or several are sent. On mobile, test whether switching to another app and back resets the timer. The countdown should match the time when sending is actually allowed.

The earlier email arrives after the later one

Test the codes from emails A and B one at a time, and record the expected result and the message shown for each. Don’t assume that resending immediately invalidates the old code: check the product’s rules first, then write your assertions accordingly. Most importantly, users should be able to tell which email matches the code field they’re filling in.

At the edge of the validity period

Whether the countdown starts when the email is sent or received depends on the app’s rules. If the message says the code is valid for ten minutes, test just before and just after the cutoff. If a queue delays delivery, the time the code actually remains usable could be much shorter than promised. Record both the timestamps and the page messages instead of just noting that it “sometimes expires.”

When an email is missing, find where the process stopped

First, make sure the address copied into the form has no extra spaces, then check whether the form accepted it. Next, manually refresh the inbox and confirm that the address hasn’t changed or expired. If the provider has delivery logs, check whether it accepted the send request; an email not appearing for the user doesn’t prove the inbox is at fault. Some services reject disposable email domains as an input policy issue, not a delivery delay.

New addresses are valid for 3 hours by default. For longer regression tests, use the inbox lifetime planner to estimate how much time you’ll need. If you need to revisit signup emails the next day, don’t use an inbox that will be deleted. Use a long-term forwarding alias or a team-managed test inbox instead. To cover normal signups, invalid codes, duplicate accounts, and other cases, work through the signup test checklist one item at a time.

What to include when sharing a timeline with developers

Include the environment, a redacted version of the test address, request numbers, timestamps for each event, actual email subjects, and expected behavior. Screenshots should show only the UI states needed to investigate the issue. Don’t share verification codes, full addresses, or activation links in public attachments. If you can reproduce the issue consistently, details like “which resend, after how long, which email arrived first, and which code worked” are far more useful for investigating queues and state updates than “email is slow.”

Keep each batch of tests within a manageable time window, and use a fresh address for every new run. This way, even if the delay turns out to be caused by a third party, you can explain to your team what you observed—and what you haven’t yet proved.

Start tracking with a fresh email

Use a dedicated address to test sending and resending, then compare the delivery order against your timeline.

Open the test inbox