QR code email generator

Printing an email address on a poster, a business card or a shop window has one old problem: people mistype it. A QR code removes the typing — the phone reads the address and, if you want, opens a new message with it already filled in. This page makes that code for you, and explains the one decision that actually matters: what to put inside it.

What is encoded:

Three ways to put an email address in a QR code

A QR code is just a container for text. What you write into that text decides what the phone does after the scan — and this is where most generators quietly choose for you:

Plain
anna@example.com — the scanner shows the address as text and offers to copy it. Works with every reader ever made, does nothing by itself.
mailto:
mailto:anna@example.com?subject=Order — a real URI from RFC 6068. The phone recognises it and opens the mail app with the recipient (and subject, and text) already filled in.
Contact
BEGIN:VCARD … EMAIL:anna@example.com … END:VCARD — a contact card. The phone offers Add to contacts, so the address is saved with a name instead of living in one message.

Which to pick is not a matter of taste:

Want a message right now? Use mailto:. A poster with «scan to write to us», a support desk, a feedback sign on a door — the person scans and is already typing.
💡
Want to be remembered? Use the contact card. On a business card or a conference badge the address should end up in the phonebook under your name, not in a half-written email that gets discarded.
⚠️
Not sure what the scanner will be? Plain text is the safest. Old stock scanners, industrial readers and some in-app cameras only display text — with plain you lose the automation but never the address.

What is actually inside the code

Look at the What is encoded box above while you switch modes — the string changes in front of you. Two details are worth knowing, because they are the usual source of «it works on my phone but not on hers».

Everything after the address is percent-encoded. A space becomes %20, a line break becomes %0A, an ampersand becomes %26. That is not decoration: an unencoded & in your subject would be read as the start of the next parameter, and the rest of the sentence would disappear into a field nobody shows. The tool above encodes it for you.

There is also an old format called MATMSG: (and its cousin SMTP:) left over from pre-smartphone scanners. Some generators still emit it. Modern phones understand mailto: natively, and MATMSG is silently shown as raw text on many of them — so it is a downgrade, not a compatibility win.

Subject and body: the part that usually breaks

Size, error correction and printing

Error correction decides how much of the code can be damaged and still read: roughly 7% for L, 15% for M, 25% for Q and 30% for H. The redundancy is not free — a higher level means more modules for the same text.

Two rules decide whether a printed code scans at all:

📐
Keep the quiet zone. The empty margin around the code must be at least four modules wide. It is not padding for beauty — the reader uses it to find where the code ends. A code cropped flush to the edge of a photo often will not scan at all. The download button above keeps that margin for you.
📏
Print big enough. The working rule of thumb: the code should be about one tenth of the distance it is scanned from. Read at arm's length (~30 cm) → at least 3 cm across. On a wall people scan from two metres → 20 cm. And keep it dark-on-light: inverted codes are read by some cameras and ignored by others.

Before you print it: a QR code is not a mailbox

Anything you encode is readable by anyone who points a camera at it — a QR code is a font, not a lock. A poster in a public place is, effectively, publishing that address in plain text where any scraper with a camera or a photo can collect it.

That is worth a thought when the code is going somewhere public and permanent. If the address is only needed for one campaign, one event or one form, generate a temporary address here, put that in the code, and let it go quiet when the campaign ends — your real inbox never appears on the wall.

Addresses that are not written in Latin letters

If the domain contains accented or non-Latin characters — café.com, пошта.укр — the code should carry its ASCII spelling, the xn-- form. Mail servers, DNS and scanners all agree on that spelling; the pretty Unicode one depends on the app that reads the code, and that is exactly where silent failures come from.

The generator above does this for you. Type such an address and a checkbox appears: the domain is converted before it goes into the code, and the What is encoded box shows the result, so you can see precisely what a scanner will get. Untick it if you deliberately want the Unicode form. The full story — including how look-alike letters are used for spoofing — is in Punycode email domains.

⚠️
The part before the @ is a different matter. Punycode applies to domains only. A non-Latin nameольга@example.com — needs SMTPUTF8 support on both the sending and the receiving side, and plenty of systems still refuse it. The tool leaves that part exactly as you typed it and warns you instead of pretending it is solved.

Common mistakes

Frequently asked questions

Does the QR code expire?

The one made here does not: the address is inside the image, so nothing can go stale, and no service has to stay alive. Codes that expire are the «dynamic» ones that store a link to a third-party site.

Is my address sent anywhere?

No. The code is drawn in your browser by a script already on this site; nothing is uploaded, logged or stored.

Will scanning it send a message automatically?

No, and that is deliberate in the standard. mailto: only opens a draft — the person still reads it and presses send.

Which format should I put on a business card?

The contact card. It saves the address under your name; a mailto: code opens an empty message that most people close without saving anything.

Can one code hold a phone number and an address together?

Yes — that is exactly what the contact card is for. Add the fields you need to a vCard and the phone stores them as one contact. The tool above keeps to name, organisation and email, because a card with more fields becomes noticeably denser to scan.

← Back to all docs