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:
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.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
- Nothing is guaranteed to be pre-filled except the address. Most mail apps honour
subjectandbody, but some web clients drop the body. Never put anything essential there — think of it as a friendly default, not a delivery mechanism. - Long text makes the code denser, not bigger. Add three sentences and the module grid grows from, say, 33×33 to 57×57. Printed at the same physical size, each module becomes smaller and harder for a camera to resolve. If the code must stay small, keep the message short.
- Line breaks are legal (
%0A), but a greeting plus a blank line is often all that survives across apps. Two lines are safe; a formatted letter is wishful thinking.
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.
- On a screen — L or M. Nothing is going to scratch it.
- On paper that gets handled — Q. Business cards, menus, packaging.
- Only if you overlay a logo — H, and keep the logo under ~20% of the area, centred. Anything more and you are betting on luck.
Two rules decide whether a printed code scans at all:
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.
@ 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
- Writing
mailto: anna@example.comwith a space. The URI breaks and the phone shows raw text. - Putting
http://in front of an address. It turns the code into a broken link instead of an email action. - Shortening a
mailto:through a URL shortener. Shorteners redirect over HTTP; a mail URI is not an HTTP address, and the redirect dies. - Using a dynamic QR service for a printed address. The code then points at that service, not at you. When their free tier ends or the domain lapses, every card you printed stops working. A code with the address inside has no owner and no expiry.
- Testing on one phone only. Check with at least one iPhone and one Android, and once from the built-in camera rather than a scanner app.
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.