QR Code to Email Address: How to Make One That Works

Someone scans your poster. The camera buzzes. Nothing opens.
I’ve had this exact complaint from three different customers, and every time the code itself was fine. The problem sat somewhere else.
A QR code to an email address encodes a mailto: link instead of a web address. Scan it, and the phone opens a mail composer with your address already in the To field. No typing, no typos, no squinting at a hyphen in a long address.
I run linkutm, so I spend a lot of time looking at codes that work and codes that quietly fail. Email QR codes fail more often than URL codes. The reasons are predictable once you know them.
Here’s how to build one, why yours might be doing nothing, and the honest answer on tracking.

What Does a QR Code to an Email Address Actually Do?
It tells the scanning device to open its default mail app with your address prefilled. That’s the whole job. The code carries a mailto: URI, the phone recognises the scheme, and it hands the request to whatever app is registered to handle email.
A standard QR code usually holds a web URL. Your browser opens, a page loads, done. A mailto: code takes a different path. No browser opens. No page loads. Nothing hits a server anywhere.
That last part matters more than most people realise, and I’ll come back to it in the tracking section.
The mailto: scheme is not a QR invention. It’s defined in RFC 6068, the same specification that makes email links work on web pages. The QR symbol is just a container. Everything about behaviour comes from the URI inside it.
The honest limitation: you’re handing control to the recipient’s device. You cannot force which app opens, and you cannot make anything happen on a phone with no mail account set up.
How Do You Make a QR Code That Opens an Email?
Encode the string mailto: followed by your address, then generate the code. That’s it. Four steps:
- Write the payload. Start with
mailto:and add the address with no space between:
mailto:[email protected]
- Paste it into a QR generator as raw text or as a URL. Most generators have an “Email” preset that builds this string for you.
- Test before you print. Scan with an iPhone camera and an Android camera. Then scan with a third-party scanner app. They do not all behave the same.
- Export as SVG or high-resolution PNG. Vector survives resizing. A 400px PNG stretched onto a poster will not scan.
Keep the address short if you can. hello@ beats marketing.enquiries@. Every extra character adds data, and data adds modules to the symbol.
The honest limitation: the generator you pick controls nothing about reliability here. A free generator and a paid one produce an identical symbol for the same mailto: string. Paying only buys you editability and design, which I’ll cover below.
Can a QR Code Include a Subject Line and Message Body?
Yes. Add them as query parameters after a question mark, exactly like a web URL. RFC 6068 allows subject, body, cc, and bcc.
mailto:[email protected]?subject=Poster%20enquiry&body=Hi%2C%20I%20saw%20your%20poster%20at%3A%20
The structure is a standard query string. First parameter uses ?, every parameter after uses &.
Now the part that breaks most attempts. You cannot type spaces and punctuation directly into that string. They need URL encoding, the percent-encoding rules set out in RFC 3986.
| Character | Encode as | Why it matters |
|---|---|---|
| Space | %20 |
Raw spaces truncate the value at the space in some scanners |
| Line break | %0A |
The only way to format a multi-line body |
& |
%26 |
An unencoded & starts a new parameter and cuts your sentence in half |
? |
%3F |
An unencoded ? inside a body can confuse parsing |
# |
%23 |
Everything after a raw # gets dropped |
, |
%2C |
Safer encoded, especially in cc lists |
A prefilled subject is genuinely useful. If you run three posters in three cities, give each one a different subject line. Now your inbox sorts itself, and you know which poster produced the enquiry without any analytics at all. That’s the cheapest attribution trick in this article.
The honest limitation: prefilled body text gets deleted by roughly half the people who scan. Treat it as a prompt, not a data field. Never rely on someone leaving a tracking string in place.
Why Is My Email QR Code Not Working?
In almost every case I’ve looked at, the code decoded correctly and the phone had nowhere to send it. Five failure modes cover nearly all of it.
No default mail app is set
This is the big one. If the phone has no mail account configured, the mailto: request goes nowhere. The camera decodes the string and the tap does nothing. iOS 14 and later lets people set a third-party default, so a user with Gmail set as default is fine. A user with the Apple Mail app deleted and no default assigned is not.
Fix: you can’t fix this remotely. Print the address in readable text next to the code. Anyone whose phone fails can still copy it.
The generator added a stray space or line break
Copy-pasting mailto: [email protected] with a space after the colon produces a broken URI. Some scanners tolerate it. Most don’t.
Fix: decode your own code with a scanner app that shows the raw string, then read it character by character.
Special characters were never encoded
An apostrophe in your subject line, an ampersand in your company name, a line break in the body. Any of these unencoded will truncate the message or kill the link.
Fix: run the whole payload through a percent-encoder before you generate.
The printed code is too small for its payload
A mailto: with subject and body can be three times the length of a short URL. More data means more modules, and more modules at the same physical size means smaller modules that cameras struggle to resolve. The symbol format is standardised in ISO/IEC 18004, and the module math behind minimum sizing is in my breakdown of QR code smallest size.
Fix: shorten the payload or print bigger. Usually shorten.
There’s no quiet zone
The blank margin around a code is part of the specification, not decoration. Designers crop it constantly.
Fix: keep four modules of clear space on all sides.

Can You Track Email QR Code Scans?
No. Not with a plain mailto: code, and no tool can change that. I want to be direct here, because a lot of QR vendors are not.
Here’s the mechanism. A mailto: scan makes no HTTP request. Nothing contacts a server. Google Analytics 4 records what happens on your site, and nothing happened on your site, so there is nothing for GA4 campaign tracking to see. Zero sessions, zero events, zero attribution.
Vendors selling “dynamic email QR codes” are selling something real, but read the fine print. The dynamic layer tracks the redirect hop. It does not track the email. If the code resolves straight to mailto:, you learn nothing about whether a message was ever sent.
So here are the three options that actually work, ranked by how much data you get.
Option one: accept the blind spot. Use a plain mailto: code and measure with subject lines. One subject per placement, then count by subject in your inbox. Crude, free, surprisingly effective for small campaigns.
Option two: route through a tracked link. Point the QR at a short link that redirects to a page carrying a mailto button. Now the redirect is measurable. You get scan counts, timestamps, device, and rough location through standard click tracking. You still cannot see the send, but you finally know how many people scanned.
Option three: send them to a form instead. Point the code at a landing page with a contact form. Full funnel visibility, structured data, working spam protection, and routing rules. You lose the one-tap convenience of a mail composer, which is a genuine cost.
I use option two for print and option three for anything where the enquiry actually matters. The full setup for the tracked version is in my guide to QR code tracking.
The honest limitation: options two and three both need a working internet connection at scan time. A plain mailto: code drafts the email offline. At a trade show with terrible wifi, that difference is not academic.
Should an Email QR Code Be Static or Dynamic?
Static if the address will never change, dynamic if it might. The distinction is about where the data lives.
A static QR code holds the mailto: string inside the symbol itself. Print it and the destination is permanent. A dynamic QR code holds a short redirect URL, and you change where that URL points whenever you like.
| Static mailto QR | Dynamic QR to a tracked page | |
|---|---|---|
| Editable after printing | No | Yes |
| Scan analytics | None | Full |
| Works offline | Yes | No |
| Opens mail composer directly | Yes | One extra tap |
| Print size for same design | Larger payload, bigger symbol | Shorter payload, smaller symbol |
| Ongoing cost | None | Requires a service |
That print-size row surprises people. A dynamic code encodes something like lnk.to/abc123, which is far shorter than a mailto: with a subject and body. Shorter payload, fewer modules, smaller printable code. Dynamic codes genuinely print smaller.
The honest limitation: dynamic codes create a dependency. If the service goes away, every printed code breaks. Static codes are dumb and permanent, and sometimes that’s the right call. For a business card you’ll reprint anyway, static mailto: is fine.

What Size Does an Email QR Code Need to Be?
Start at 2 x 2 cm, then go bigger if your payload is long. The 2cm floor applies to a short payload scanned at arm’s length.
An email QR code often needs more than that floor. Compare the payloads:
mailto:[email protected]is 19 characters. Small symbol.mailto:[email protected]?subject=Poster%20enquiry&body=Hi%2C%20I%20saw%20your%20poster%20at%3A%20is over 100 characters. Noticeably denser.
More characters means more modules, and the modules have to stay physically large enough for a camera to resolve. Error correction adds to this too. Level H recovers the most damage but produces the biggest symbol for the same data.
Three practical rules I follow:
- Scan distance divided by ten equals minimum width. Scanning from 1 metre, print at least 10 cm wide.
- Drop the body parameter if the code is going somewhere small. Business cards rarely have room for a 100-character payload.
- Test at final printed size, not on screen. A code that scans on your monitor can fail at 2 cm on matte card stock.
The honest limitation: the 2cm figure is convention, not specification. Old phones, cracked lenses, and dim rooms all push your real minimum higher.
Where Email QR Codes Are Actually Worth Using
Short list, because the honest answer is that they suit fewer situations than vendors suggest.
- Business cards and email signatures. One tap to compose beats typing an address. This is the strongest use case.
- Trade show booths and event signage. Works offline, which matters when venue wifi collapses.
- Print ads with a support or enquiry angle. Prefilled subject lines sort your inbox automatically.
- Product packaging for warranty or support claims. Prefill the subject with the SKU and support saves a question.
- Recruitment posters. Prefill the subject with the role, and applications route themselves.
Where I’d skip it: anything where you need conversion data, anything with a long form’s worth of information to collect, and anything aimed at an audience likely to be on a shared or locked-down device.

Frequently Asked Questions
What is a QR code to an email address?
A QR code to an email address is a QR code that encodes a mailto: link rather than a web page URL. When scanned, it opens the device’s default mail app with your address already filled into the To field. It can also prefill the subject line and message body.
How do I create a QR code for my email address?
Write the string mailto: followed by your address with no space, then paste it into any QR generator. For example, mailto:[email protected]. Test the result on both an iPhone and an Android device before printing, and export as SVG so it stays sharp at any size.
Can a QR code send an email automatically?
No. A QR code can only open a prefilled draft. The person still has to press send. This is a deliberate security boundary in the mailto: specification, and no generator can bypass it.
Why does my email QR code open a blank message?
Usually the address was encoded with a stray space, such as mailto: hello@ instead of mailto:hello@. The other common cause is unencoded special characters in the subject or body, which truncate the string. Decode your own code with a scanner app that displays the raw text to see exactly what’s inside.
Can you track how many people scanned an email QR code?
Not with a plain mailto: code, because scanning it makes no web request for analytics to record. To get scan counts, point the QR at a tracked short link that redirects to a page with a mailto button. You will see the scan, though still never the send.
Should I use an email QR code or a contact form?
Use an email QR code when speed matters and the enquiry is casual, such as a business card or a booth. Use a form when you need to capture structured information, filter spam, route enquiries, or measure conversions. Forms win on data, email QR codes win on friction.
Getting the Tracked Version Set Up
If the plain mailto: version does everything you need, use it. Print the address in text beside it, keep the payload short, and test on two phones. That’s a complete job.
If you need to know whether the code is working at all, you need the redirect version. That’s the piece linkutm handles: every link you create gets a trackable QR code with scan analytics, and you can repoint the destination after the posters are printed. Tag the destination first with the QR code UTM builder so the scans land in GA4 under a campaign name you chose, not as direct traffic.
Start with the address in plain text. Add the code. Then decide how much you need to measure.