What the code does
It carries a mailto: link — the same thing behind an email link on a web page. Scanning it opens the phone’s mail app on a new draft addressed to you, with whatever subject and body you set already in place. The person still writes and sends it, so nothing happens without them.
A prefilled subject is the quietly useful part. "Warranty claim — model X" or "Booking enquiry — poster at the station" turns an inbox of identical blank subjects into something you can filter, and tells you where the code was scanned without any tracking at all.
How the parts are encoded
The address goes straight after mailto:. The subject and body become query parameters, percent-encoded so that spaces, accents, ampersands and line breaks survive intact — that is why the payload preview looks like %20 soup. Leave a field blank and it is left out of the link entirely rather than sent empty.
Line breaks in the body are kept, so a short template with a couple of lines arrives formatted. Long bodies make a dense code and get trimmed by some mail apps, so treat the body as a prompt rather than a letter.
Where it gets inconsistent
The address is universally respected. The subject is respected almost everywhere. The body is where apps differ: most fill it in, a few ignore it, and a handful of in-app browsers open a webmail compose window that drops it. Test with the mail app your audience actually uses before printing.
Also worth saying: a printed email QR code publishes your address to anyone with a camera, including people harvesting them. For a support or sales address that is the point; for a personal one, use an alias you can retire.
What goes inside the code
The code contains a standard mailto link:
mailto:hello@example.com?subject=Menu%20question&body=Hi%20there%2C- the address comes first, immediately after
mailto: subjectandbodyare optional and percent-encoded- blank fields are omitted rather than sent empty
Before you print it
- Use a subject that identifies where the code was printed. It is free routing information.
- Test on the default mail app of both an iPhone and an Android before a print run.
- Prefer a role address (support@, hello@) over a personal one on anything public.