Skip to main content
OpenQRS
Tools
Current language: English
100% Private

Email QR code generator

100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.

Email settings

One address. RFC 6068 allows several separated by commas, but mobile mail apps commonly keep only the first.

Enter the address the email should be sent to.

Optional. Goes into the ?subject= parameter, where spaces are encoded as %20 rather than as a plus sign.

Optional. Line breaks are encoded as %0D%0A, which is what RFC 6068 requires. Every character adds to the symbol.

Design

Module shape
Presets
Corner frame
Add a centre logo
Choose an image, or drop one herePNG, JPEG, WebP or GIF, up to 1000 KB

The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.

More design options

The dark half of the code. Keep it well below the background in lightness.

Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.

Contrast 11.5:1 between the modules and the background.

Presets

PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.

Gradient

A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.

The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.

45°

Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.

Module shape

Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.

Corner frame

The ring of the three finder patterns.

Corner centre

The eye inside each finder pattern.

4 modules

The blank margin around the code, measured in modules. 4 is the specified minimum.

Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.

A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.

Live preview & export

Export

Export

Raster, for screens

Complete the form to enable the downloads.

Export size and encoded text
Payload
Nothing encoded yet
Symbol
Not built yet
Recovery
M

Waiting for input

Export size

Between 64 and 4096 pixels. Exporting at 1024 px.

Encoded text

A mailto: QR code opens the phone's mail app with the recipient, subject and message already written, leaving the sender only to press send. The whole message sits in readable text inside the symbol, so it is a prompt rather than a private channel.

When someone scans it

The phone opens a new draft in its default mail app, addressed and pre-filled. Nothing is sent until the person taps send.

How the mailto: URI is put together

The payload is a URI defined by RFC 6068. The address follows the scheme directly, and anything else arrives as a query: the first parameter after a question mark, the rest joined by ampersands. mailto:hello@example.com?subject=Stand%2014%20enquiry&body=Please%20send%20a%20quote. is a complete payload.

Encoding is where hand-built mailto: codes break. Reserved characters have to be percent-encoded, and non-ASCII text has to be converted to UTF-8 first and then percent-encoded byte by byte. RFC 6068 is explicit that spaces should be written as %20, not as a plus sign, because a plus cannot be told apart from a literal plus in an address.

Line breaks in the body must be encoded as %0D%0A. A raw newline in the payload either truncates the body at the break or produces a URI a mail app will not parse at all.

What mail apps actually honour

RFC 6068 sets a deliberately low bar for readers: a client that resolves a mailto: URI must handle the subject header and the body, and nothing more is guaranteed. In practice cc and bcc are honoured by most desktop clients and ignored by a good number of mobile ones, which is why this page does not offer fields that would silently disappear.

The scan opens whatever the phone has set as its default mail app. If the person has removed the stock mail app and not signed into a replacement, the tap does nothing visible, and that is a device setting rather than a fault in the code.

Long bodies are the other soft limit. Some clients truncate a pre-filled body, and every character also enlarges the symbol, so a mailto: code works best as a subject line plus one or two sentences that identify where the person is standing.

A draft, not a send, and not a secret

Scanning never sends anything. The mail app opens a composed draft in the sender's own account, from their own address, and they can edit every part of it before sending. That also means the message reaches you as an ordinary email with an ordinary reply-to.

Everything in the code is readable. Anyone who photographs the poster can decode the address, the subject and the body with any scanner, so a reference number or a discount phrase in the body is public the moment it is printed.

A printed address is machine-readable in the same way a mailto: link on a web page is, so it can be harvested. A role address such as enquiries@ or stand14@ keeps a personal mailbox out of the printed material and can be retired without reprinting anything else.

Questions and answers

Does scanning send the email automatically?

No. The mailto: scheme can only open a draft. The person sees the recipient, subject and body in their own mail app, can change any of it, and has to press send themselves. No mail app on any platform sends a mailto: message without that step.

Can I add cc and bcc addresses?

RFC 6068 defines cc and bcc as header fields in the query string, but it only obliges a client to understand subject and body. Mobile mail apps frequently drop the rest, so those fields are not offered here rather than appearing to work and then vanishing.

Why are spaces encoded as %20 instead of a plus sign?

Because RFC 6068 says so. In a mailto: URI a plus sign can be a real character in an address, as in name+tag@example.com, so a plus standing for a space cannot be distinguished from a plus that belongs there. %20 removes the ambiguity.

Will printing my address like this get it scraped?

It can be. A mailto: payload is as machine-readable as a mailto: link on a web page, and anyone can decode a photographed code. Use a role address you can retire, and expect it to attract the same unsolicited mail any published address does.

How a static QR code works

Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.

Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.