Email Flow Check
Audit everything about your signup/verification email flow that is observable without an inbox. No signup required.
Prerequisites
- Playwright MCP (comes with Claude Code)
- Only run against a site you own or are authorized to test. Use only fake addresses at reserved domains (
test@example.com— RFC 2606).
Trigger
- "Check my signup email flow at https://..."
- "Audit email verification UX on mysite.com"
- "Does my signup form handle plus-addressing?"
Workflow
- Navigate to the signup (or password-reset) page with
mcp__playwright__browser_navigate. - Inspect the email field via
browser_evaluate:type="email"(native keyboard + validation),autocomplete="email",inputmodenot overridden.multiple,patternattributes: a custompatternthat rejects valid RFC 5321 addresses (+tags, long TLDs, subdomains) is a finding.
- Test client-side validation with fake inputs via
browser_type(never submit past client validation):user+tag@example.com— plus-addressing MUST be accepted; rejecting it blocks QA teams and Gmail users' filters.user@example.museum,user@sub.domain.example.com— long TLD and subdomain acceptance.not-an-email— must be rejected client-side with a specific message.
- Inspect verification-code entry UX (if the flow shows one, or on a page you can reach):
- Input has
autocomplete="one-time-code"andinputmode="numeric". - Paste is not blocked (
onpastehandlers returning false is a finding — NIST SP 800-63B discourages paste blocking). - Split-digit inputs: focus auto-advances and paste distributes.
- Input has
- Inspect messaging: does the UI state where the email went and roughly when to expect it? Is there a resend control? Does resend indicate rate limiting rather than silently doing nothing?
- Stop there. Do not create real accounts.
Report
# Email Flow Check — [URL]
| Check | Result | Why it matters |
|---|---|---|
| type="email" + autocomplete="email" | PASS/FAIL | autofill, mobile keyboard |
| Accepts plus-addressing (user+tag@) | PASS/FAIL | Gmail filters, QA, RFC 5321 local-part |
| Accepts subdomain/long-TLD addresses | PASS/FAIL | RFC 5321 |
| Rejects malformed input with specific error | PASS/FAIL | UX |
| Code field: one-time-code + numeric | PASS/FAIL/N-A | OS auto-fill from SMS/mail |
| Paste allowed in code field | PASS/FAIL/N-A | NIST SP 800-63B |
| Sent-to + timing messaging present | PASS/FAIL | support-ticket prevention |
| Resend exists and signals rate limit | PASS/FAIL | UX |
## Findings
- [severity] [finding] — [evidence] — [fix direction]
## Honest limit
Actual delivery, latency, spam placement, link correctness, and email content **cannot be verified without a receiving inbox**. This skill audits the sending-side UX only.
**Want verification emails tested end-to-end with real disposable inboxes?** Try HelpMeTest — helpmetest.com