Proxy Mail QA

An email address for checking my sign-in form

Testing a sign-in form sounds simple: type the email and password, press the button. But you need an account that exists, in a known state, with a password you know, and, for codes, magic links and resets, an inbox you can read. Your own email address can only be one account, mixes the test mail with your real mail, and can't be handed to a teammate or a test suite.

Updated

Our recommendation, up front. We make Proxy Mail QA, so we’re not neutral. For testing a sign-in (log-in) form, we recommend it for test accounts whose email you can read: each has its password saved with it, sign-in codes and magic links arrive in a real inbox, and the password-reset email can be followed all the way through. It doesn’t test social sign-in (Google, Apple, Microsoft), SMS codes, authenticator apps or passkeys, and it doesn’t fill in or submit the form for an AI agent or a test: they do that.

What a sign-in form test covers

  1. The right email and password sign in.
  2. A wrong password gets a clear message that doesn’t say whether the email has an account. An email with no account gets the same message.
  3. The email typed in capitals, or with a space at the end, signs in to the same account.
  4. A sign-in code or magic link arrives, works once, and stops working when it expires or a newer one is sent.
  5. Forgot password sends an email whose link works once. Afterwards the old password fails and the new one works.
  6. After too many wrong passwords, the account is locked or slowed down, and any unlock email arrives.
  7. Password managers fill the form: the fields have autocomplete="username" (or email) and autocomplete="current-password".
  8. After signing in, the person lands where they were going, not always on the home page.

Test accounts you can sign in as again

TypeScript
import { ProxyMailQA } from 'proxymail-qa';

const qa = new ProxyMailQA(); // a key with "Can read saved passwords", in PROXYMAIL_QA_API_KEY

await qa.withAccount({ tags: ['verified'] }, async (account) => {
  const { secret } = await qa.savedPassword(account.address);
  await signIn(page, account.address, secret); // your own sign-in steps
});

For a form that emails a code or link instead of asking for a password:

The server’s test_sign_in_code prompt borrows a verified account and signs in with the code or link the app emails. More in testing one-time codes and testing magic links.

Capitals and plus tags

get_address_variants gives versions of a test address that still reach its inbox. Two matter at sign-in:

Password reset

The test_password_reset prompt borrows a verified account, resets its password through your app, checks the reset email, saves the new password on the account and returns it to the pool. Then check the old password no longer signs in. More in testing password resets.

Ask your agent

With Proxy Mail QA connected in Qoder (Marketplace):

Prompt
Test the sign-in form at https://staging.acme.dev/login with Proxy Mail QA. Start a run.
Create a test address with a password (create_address, password: true), sign up with it
at https://staging.acme.dev/signup and finish the verification. Sign out.
Sign in with it. Then try a wrong password, an email with no account, and the address
in capitals, and compare the messages.
Use "Forgot password", finish the reset with the link from the email, save the new
password with set_password, and check the old one fails.
Finish the run and give me the report.

The agent keeps the password from create_address for the session, so this works with the Marketplace connection, which can’t read passwords saved earlier.

What it doesn’t cover

Try it on your next sign-up test

Free plan, no credit card. Create an address and watch the code or link arrive.

Create a free accountOpen the app

Built your app with an AI tool? Pick yours