NowTempMail for VS Code
A disposable inbox and its verification code, without leaving your editor.
No account. No sign-in. No PII. The mailbox expires on its own in 24 hours.
⌘⇧P → NowTempMail: New Inbox → a1b2c3@nowtempmail.com, on your clipboard
paste it into the app you are testing
⌥⌘; → Copy Latest Code → 482913, on your clipboard
What it does
- One command for an address.
NowTempMail: New Inbox creates a mailbox and copies
the address. There is no signup step, because there is no account.
- One shortcut for the code.
Ctrl+Alt+; / Cmd+Alt+; copies the latest
verification code — instantly if one is already sitting there, otherwise it waits for
the next one and copies it the moment it lands.
- Codes are extracted server-side, at the moment the mail arrives. There is no regex
to write here, and none in your test suite either.
- A live inbox in the sidebar, with the code on the message row itself rather than
buried in the body.
- A reader that opens as plain text, because message HTML is attacker-controlled.
The HTML preview is opt-in, script-free, and blocks remote images until you ask.
Install
Marketplace, or Open VSX for Cursor, Windsurf and VSCodium. Requires VS Code 1.90+.
Desktop and remote (SSH, WSL, Containers, Codespaces) only — not vscode.dev. That is not
an oversight: the keyed API rejects any request carrying an Origin header, which every
browser attaches and no extension host does.
Commands
| Command |
Default keybinding |
| NowTempMail: New Inbox |
— |
| NowTempMail: Copy Latest Code |
Ctrl+Alt+; / Cmd+Alt+; |
| NowTempMail: Copy Inbox Address |
— (or click the status bar) |
| NowTempMail: Insert Inbox Address at Cursor |
— |
| NowTempMail: Open HTML Preview |
— |
| NowTempMail: Open a Link From This Message |
— |
| NowTempMail: Set API Key |
— |
| NowTempMail: Get Started |
— |
Free, without a key
Everything above works with no key at all, on the same account-less service the web app
uses: one live inbox at a time, 24-hour lifetime, generated address.
With a free API key
Sign in with GitHub at nowtempmail.com/developers/keys,
then run NowTempMail: Set API Key. That adds:
- several inboxes at once,
- custom addresses and longer lifetimes (plan permitting),
- your real plan and remaining daily quota in the view header,
- the same key your test suite uses, so the editor and the suite share one account.
The key is stored in the OS keychain through VS Code's SecretStorage — never in
settings.json, which syncs to the cloud and ends up in dotfile repos. If the extension
finds a key in your settings it will offer to move it and then clear it.
In your tests
The same inboxes are available to Playwright, Cypress, Vitest and Jest through the
nowtempmail package:
import { test, expect } from "nowtempmail/playwright";
test("a new user verifies their email address", async ({ page, inbox }) => {
await page.goto("/signup");
await page.getByLabel("Email").fill(inbox.address);
await page.getByRole("button", { name: "Create account" }).click();
const code = await inbox.waitForCode();
await page.getByLabel("Verification code").fill(code);
await page.getByRole("button", { name: "Verify" }).click();
await expect(page.getByText("Welcome")).toBeVisible();
});
Type ntm-playwright in a JS/TS file for that as a snippet.
Settings
| Setting |
Default |
What it does |
nowtempmail.notifications.onNewMessage |
true |
One notification per poll, never while the window is unfocused. |
nowtempmail.polling.enabled |
true |
Watch inboxes in the background at all. |
nowtempmail.mailbox.ttlSeconds |
0 |
Lifetime for new inboxes. Needs a key. |
nowtempmail.mailbox.domain |
"" |
Domain for new inboxes. Needs a key. |
nowtempmail.htmlPreview.allowRemoteImages |
false |
Load remote images without asking. |
nowtempmail.telemetry.enabled |
false |
Local counters in the output channel. No network transport exists in this build. |
Privacy and security
- No account, no PII. The account-less mode asks for nothing about you.
- Credentials live in the keychain, never in settings or workspace state.
- Message HTML is treated as hostile. Scripts,
<base>, forms, frames and event
handlers are stripped before rendering; the preview panel runs with scripts disabled,
no local resource access, and a default-src 'none' CSP. Links are never clickable
inside a rendered message — opening one shows you the full URL first.
- Remote images are blocked by default. An image in an email is a read receipt.
- No analytics. This build ships no telemetry transport at all.
Polling, and your rate limit
There is no push channel to an editor, so live inboxes are polled: every 2s for 90s
after you create an inbox or insert an address, 5s while the view is open, 20s in the
background, 60s when the window is unfocused, and not at all when nothing is live. A
429 is honoured to the second and drops the rate a tier. On the Free plan's 30
requests/minute, every sustained tier fits with room to spare.
Feedback
nowtempmail.userjot.com · nowtempmail.com