Email QR Code Generator
This page opens on an email code: a mailto: link in the Link field. Replace the example with your own address, and a bare address such as you@example.com gets mailto: added in front. A phone that scans the code offers to start a new email to that address; the person still decides whether to send it.
mailto:asha@cafe.example?subject=Table%20booking
Reading the code back.
A logo is optional. It covers modules in the middle of the code, so each code is read back with the logo in place before it can be saved. The background stays white, and a code colour needs a contrast of at least 4.5 to 1 against it.
Worked examples
- decoded by an independent reader, identical
- 500 uniquely named files, a repeat gets -2, -3 in row order
- kept only if it reads back, otherwise marked failed
Common questions
- How do I add a subject or a message?
- Write the whole link: mailto:you@example.com?subject=Table%20booking&body=Hello. Put ?subject= after the address and &body= before the message, and write %20 for every space, because a link cannot contain spaces and the page refuses one and says why. Most mail apps fill in both; what each app does with them is up to the app.
- Can I make email codes for a whole list of addresses?
- Yes. Switch to Many from a list with Link selected and put the addresses in the link column. Each bare address gets mailto: added, becomes its own code named from its label, and is read back before it goes into the ZIP.
- Does scanning the code send an email?
- No. The code holds the address, and any subject and message, as text. Scanning only offers to open a draft in the phone's mail app, and nothing is sent until the person presses send. The address you type is not stored by this page.
Each code holds your text or link itself, with no redirect in between, so it never expires and no scan is counted. Every code is read back by a separate decoder before it can be downloaded, with a quiet zone of at least 4 modules; a logo covers modules and lowers readability, so a code that fails the read back is marked failed, and one that passes here can still fail on some cameras. Payment codes (UPI, bank transfer, crypto and merchant payment formats) are refused.