What a mailto link is
A mailto: link is a special URL that, when clicked, opens the visitor’s default email program with a new message ready to go. You’ve used them without thinking — every “Email us” button that pops open your mail app is a mailto link. The simplest form is just an address:
mailto:hello@example.com
Click it and a blank draft opens, addressed to that recipient. The power comes from the extra fields you can pre-fill: a subject, a message body, and Cc/Bcc recipients. The Mailto Link Generator builds these for you and hands back clean, copy-ready code — but it’s worth understanding what’s happening under the hood, because that’s where the common mistakes live.
The anatomy of a mailto link
A full mailto link has two parts. The address list comes first, right after mailto:. Then an optional query string, introduced by ?, carries header fields like subject and body:
mailto:to@example.com?subject=Hello&body=Hi%20there
Each header field is a key=value pair, and multiple fields are joined with &. The recognised fields are cc, bcc, subject, and body. Multiple recipients in any field are separated by commas. So a richer link looks like:
mailto:a@x.com,b@x.com?cc=c@x.com&subject=Project%20update&body=Hi%20team
This is all defined by RFC 6068, the specification for the mailto scheme. The rules aren’t complicated, but one of them trips up almost everyone: encoding.
Why encoding is the whole game
URLs have reserved characters with special meaning. A space ends a token. An ampersand separates fields. An equals sign splits key from value. The moment your subject or body contains one of these — and they always do — a raw, hand-typed mailto link breaks.
Consider a subject like Q3 results & next steps. Drop it raw into a link and the browser reads subject=Q3 results and then hits the &, which it interprets as “new field starts here.” Your subject is truncated and the rest is misread. The fix is percent-encoding: every problematic character is replaced by a % followed by its hex code. A space becomes %20, an ampersand %26, an equals sign %3D. Line breaks in the body become %0D%0A.
There’s a subtle trap even for people who know to encode: in query strings, spaces are sometimes encoded as +. That convention is for HTML form submissions, not for mailto. If you use + in a mailto body, some clients show a literal plus sign instead of a space. The Mailto Link Generator always uses %20, so your text survives intact in every client. This is precisely the kind of detail a generator should handle so you never have to think about it.
Multi-line bodies
Pre-filling a multi-line message is one of the most useful things a mailto link can do — think support templates that ask users to include their order number and a description. Line breaks need to be encoded as %0D%0A (carriage return + line feed). Type your body with normal line breaks in the generator and it converts them correctly, so the recipient’s draft opens with proper paragraphs rather than one run-on line.
Cc, Bcc, and multiple recipients
To add carbon-copy or blind-carbon-copy recipients, use the cc and bcc fields. To address several people at once, separate addresses with commas. A good generator also de-duplicates addresses and does a basic validity check, so an accidental double-paste or an obvious typo like name@domain (missing the top-level domain) gets caught before you ship the link. The generator flags addresses that don’t look valid without refusing to build the link, so you stay in control.
Putting the link to work
Once you have a correct mailto URL, you’ll usually drop it into one of three places:
In HTML, wrap it in an anchor: <a href="mailto:...">Email us</a>. The generator produces this for you, with the URL properly escaped for an HTML attribute so characters like & don’t break your markup either.
In Markdown, use [Email us](mailto:...). Handy for READMEs, docs, and static-site content.
In an email signature, a mailto link with a pre-filled subject makes it easy for people to reply through the right channel. Pair it with our Email Signature Generator for a polished result, and see the email template guide if you’re designing reusable message bodies.
Test the link before you ship it
A mailto link is one of those things that looks right in the code and still surprises you in practice, so always test before publishing. The fastest check is to click the live link and watch what opens: does the correct address appear in the To field, is the subject intact, and did your multi-line body keep its paragraph breaks? The Mailto Link Generator includes a “test this link” button precisely so you can do this in one click without leaving the page.
Pay special attention to the body. Line breaks are the part most likely to misbehave across clients, so confirm that your %0D%0A sequences render as actual new lines rather than a single run-on paragraph or literal \n characters. If you used special characters — an em dash, an ampersand, an emoji — verify they survive the round-trip too.
It’s also worth testing on more than one client if your audience is mixed. Gmail’s web interface, Apple Mail, and Outlook can differ subtly in how they parse a draft, particularly around long bodies and unusual characters. A link that works in all three is one you can ship with confidence. And remember the one thing outside your control: if a visitor has no default mail handler configured, the link may appear to do nothing — that’s their setup, not your link.
Common mistakes to avoid
A few errors account for nearly every broken mailto link. Forgetting to encode is the big one — covered above. Using + for spaces in the body is the sneaky one. Putting Cc or Bcc before the ? instead of in the query string is another; they’re header fields, not part of the address. And relying on the user having a configured default mail client — if they use only webmail with no handler set, the link may appear to do nothing. That last one isn’t your bug, but it’s worth knowing the limitation.
The takeaway
Mailto links are a small, old, beautifully simple piece of the web — and they break far more often than they should, almost always because of encoding. Understand the two-part structure, respect percent-encoding (and never use + for spaces), and let the Mailto Link Generator handle the fiddly bits so your “Email us” button opens a clean, complete draft every time.