Email QR code generator
Point a camera at this kind of code and the mail app opens with the address, the subject and the first line already written. It is the shortest path there is between a printed thing and an enquiry you can actually reply to.
Generate the code
Logo overlay (optional)
Everything is encoded in your browser. The address and the message text are never sent to this site or to anyone else.
How to make an email QR code
Make a QR code that opens a prefilled email: enter the recipient, add a subject that names the placement, optionally prefill the message, then test it on a phone before printing.
-
Enter the recipient
The generator below already opens on the Email content type. Put the address that should receive the replies in the To field — the one you are happy to see printed, because it is readable to anything that scans the code.
-
Write the subject
A subject that names the placement, such as "Enquiry from the market stall", sorts the replies for you later. It is also the cheapest tracking you will ever set up.
-
Prefill the message, or leave it empty
Anything in the message field arrives as editable text in the compose window. A first line the sender completes gets you a usable enquiry; a long paragraph mostly gets deleted, and every character makes the code denser.
-
Test on a phone, then download
Scan the preview and check the compose window opens with all three fields filled. Download the SVG for print and give it at least 2.5 cm of width, or the PNG for a screen.
What the code actually contains
No server, no redirect, no account. The code encodes a
mailto:
URL — the same scheme behind every email link on the web, standardised in RFC 6068 — and
the phone hands it to whichever mail app is set as the default. With only an address, the
whole payload is this:
mailto:hello@example.com
A subject arrives as a query parameter, percent-encoded, which is where the
%20 in place of every space comes from:
mailto:hello@example.com?subject=Enquiry%20from%20the%20poster Add a message and it joins as a second parameter. That is the complete contents of the code — 156 characters for the example below, and every one of them makes the pattern denser and the print size larger:
mailto:hello@example.com?subject=Enquiry%20from%20the%20poster&body=I%20saw%20the%20code%20at%20the%20market%20stall%20and%20would%20like%20to%20ask%20about
Spaces are written as %20 rather than as the
plus sign the other half of the URL world uses, and deliberately so: a plus is legal in a
query string but several mail clients drop it into the subject as a literal character. The
generator encodes it the safe way, so a prefilled subject reads as a sentence rather than
as Enquiry+from+the+poster.
The three fields
| Field | Where it goes | Rule |
|---|---|---|
| To | The address before the ? | One recipient. The scheme allows several separated by commas, but mail apps disagree about it often enough that a single address is the only reliable form. |
| subject | Query parameter | Percent-encoded. Keep it short and specific — it is what tells you which poster the message came from. |
| body | Query parameter | Percent-encoded, newlines included. Everything you put here lands in the compose window as editable text, so treat it as a prompt rather than as the message. |
Length is the only real constraint. An address on its own is a small, coarse symbol that survives being printed at a couple of centimetres; the same code carrying a paragraph of prefilled text has far more, far smaller modules and needs to be printed bigger to stay readable. The size calculator turns whatever you end up with into a minimum width.
What it will not do
It does not send anything. The scan opens a draft; a person sends it. It cannot attach a file, cannot set a reply-to address, and cannot reach a mailbox that is not configured on the device — on a laptop with no mail client set up, the link may open nothing at all, which is worth knowing before a code goes on a trade-show banner rather than a flyer.
It also cannot be changed after printing. The address lives in the pattern, so a code on a thousand leaflets is committed to that mailbox for as long as the leaflets exist. Where that matters, encode a link to a contact page instead and let the page carry the address — the difference between a static and a dynamic code is exactly this.
Common questions
Does scanning the code send the email?
No, and nothing about the format allows it to. The code opens the compose window of whatever mail app the phone uses, with the fields filled in, and the person still has to press send. That is a feature on a poster: it puts a written, editable message in front of someone instead of firing one off on their behalf.
Why are the spaces in my subject line written as %20?
Because that is what a mailto URL requires. The other legal spelling for a space in a query string is a plus sign, and several mail clients paste it into the subject literally, so this generator percent-encodes throughout. You never type the encoding yourself — put plain text in the fields and read the string below the preview to see what was produced.
Can I attach a file to it?
No. A mailto link carries text fields only, and no mail app will let a scanned link attach anything from your device. If the point is to hand over a document, encode a link to where the file is hosted instead and let the recipient download it.
Will the address get harvested by spammers?
Treat it as published, because it is. The address sits in the code as readable text, and a printed code in a public place is as scrapeable as one on a web page. Use the address you already publish, not a personal mailbox you would not print on a sign.
Other contact codes made the same way