Mailto Link Generator — with subject, body, cc, bcc.
Type recipients, subject, and a pre-filled body. Get a properly URL-encoded mailto: URL and an HTML <a> snippet you can paste into any page. RFC 6068 compliant. Pure client-side — nothing leaves the browser.
A mailto link with a subject and body looks like this:
<a href="mailto:hello@yoursite.com?subject=Hello&body=Hi%20there">Email us</a>Spaces become %20, line breaks %0A. Getting that encoding wrong is the usual reason a mailto link opens to a blank draft. Fill the fields below, copy the result, and the encoding is handled for you — including multiple recipients, CC, and BCC.
Clicking opens the visitor's default email client (Gmail web, Outlook, Apple Mail, etc.) with the recipients, subject, and body pre-filled. On mobile, it opens the system email app.
Mailto vs contact form — what to use when
A mailto: link is the simplest possible contact mechanism — no backend, no JavaScript, no signup. Click it, your email client opens, you send the message. For a personal portfolio or a side project where the visitor probably has an email client configured, it's fine.
The failure mode is users without a default email client. Most Gmail-web users haven't set up the "handle mailto: links" permission. Mobile users without the Gmail app installed get nothing. They click the link, nothing happens, and they leave. For a business contact form, that's a missed lead — and you have no record it happened.
The fix is a form backend. The visitor fills out an HTML form on your page, the form POSTs to a backend, the backend emails you. The visitor doesn't need any email client configured. You get every submission in your inbox AND in a dashboard, even if your inbox classifies one as spam.
splitforms is one low-cost path to that backend. Drop a form into your page, set action="https://splitforms.com/api/submit" with a free access key, and you're done — 500 free submissions, then $5/month for 5,000 a month if you need more. See the free HTML contact form drop-in or the HTML contact form guide.
Mailto URL parameters
Mailto link generator FAQ
What is a mailto link?
A mailto link is a hyperlink whose URL starts with `mailto:` instead of `http://`. Clicking it opens the visitor's default email client with the recipient address pre-filled. You can also pre-fill subject, body, cc, and bcc via URL parameters. The format is defined in RFC 6068. It's pure HTML — no JavaScript, no backend, no third-party service required.
How do I add subject and body to a mailto link?
Append `?subject=Your%20Subject&body=Hello%20there` to the email. Spaces are encoded as `%20`, line breaks as `%0A`, and ampersands inside the body as `%26`. The generator handles all the encoding for you — type plain text, copy the result.
How do I add multiple recipients, cc, or bcc?
Multiple recipients: comma-separate them after `mailto:` (e.g. `mailto:a@x.com,b@x.com`). CC and BCC are URL parameters: `?cc=watcher@x.com&bcc=archive@x.com`. The generator accepts comma-separated lists in the To / CC / BCC fields and encodes them correctly.
Why doesn't my mailto link work for users without an email client?
That's the main weakness. mailto: relies on the user having a configured default email client. Modern users — especially mobile users and users of Gmail web only — often don't. They click the link, nothing happens, and they bounce. For any business contact, you should use a real form backend (like splitforms) that POSTs to your server and emails you directly, regardless of what email client the user has set up.
Mailto vs contact form — which should I use?
Use mailto for personal/portfolio sites where the visitor probably has Gmail or Outlook configured, and the email content is short ('hi, want to grab coffee'). Use a contact form for any business site where you can't afford to lose a lead because the user didn't have a configured email client. splitforms is the easiest backend — drop in a form, point the action at our endpoint, and accepted submissions are saved to the dashboard before owner notification email is attempted. Free captures 500 submissions total and includes owner email notifications; delivery varies by provider and recipient settings.
Will the body parameter work in Gmail web?
Yes, if the user has Gmail configured as their default mailto handler in the browser. Chrome and Firefox both support setting Gmail as the default mailto handler, but it requires a one-time user action that most users haven't done. This is another reason mailto is unreliable for business use — the body content frequently gets dropped or the link does nothing at all for users on Gmail web with no handler set.
Can I prevent the mailto link from being scraped by spam bots?
Yes — use the email obfuscator tool to encode the address as HTML entities or with a tiny JavaScript decoder. The obfuscator is at /tools/email-obfuscator. For mailto generators specifically, you can also output the link via a `data-email` attribute and assemble it on click — but for any real volume, a form backend is the right answer because it never exposes your email address in the page source at all.
Tired of users without email clients?
Drop in a free HTML contact form that POSTs to splitforms. Every visitor can submit — no email client required. 500 submissions total, free, and owner email notifications are included on every plan; delivery time and inbox placement depend on provider and recipient settings. See pricing.
Get a free splitforms key →More free form tools
Form backend cost calculator
Enter monthly submissions and compare the cheapest listed plan across eight form backends.
Form conversion rate calculator
Enter form views and submissions to get your contact form conversion rate, plus leads needed and total value for a target.
Email deliverability checker
Enter a domain to check its SPF, DMARC and MX records and get a plain-English fix for each.
SPF record checker
Look up a domain's SPF record, see each mechanism explained and count DNS lookups against the 10-lookup limit.
DMARC record generator
Pick a policy and report address and copy a ready _dmarc TXT record.
DMARC checker
Look up a domain's DMARC record and see the policy and every tag explained.
DKIM record checker
Enter a domain and selector to check its DKIM key, with presets for common senders.
SPF record generator
Tick your email providers and copy one SPF TXT record with a lookup count.
Contact form spam checker
Paste form HTML to audit its honeypot, endpoint, CAPTCHA markers and spam resistance.
Honeypot field generator
Generate a hidden anti-spam input with your chosen name and hiding technique.
HTML form action & method generator
Enter an endpoint, choose GET or POST, add an access key and field names, then copy the HTML.
HTML form validation tester
Paste a form snippet to inspect required, type=email, minlength and pattern checks in a live preview.
Form action URL tester
Check a form action URL for reachability, CORS headers, POST acceptance and backend.
Email obfuscator
Encode your email so spam scrapers can't read it but people can still click it.
Alphanumeric regex tester
Test letters and numbers only, spaces, handles and Unicode; copy validation patterns.
Email regex tester
Test the WHATWG email regex and two other patterns against edge cases and your own list.
Phone number regex tester
Test numbers against E.164, US/Canada and digits-only patterns and copy code snippets.
ZIP code regex tester
Test US ZIP, ZIP+4, Canadian and UK postal codes and copy the regex or HTML pattern.
Number regex tester
Test digits, decimals, money and thousands separators and copy validation patterns.
Date regex tester
Test dd/mm/yyyy, mm/dd/yyyy and ISO dates with leap-year checks and copy JS or HTML patterns.
Name regex tester
Test name patterns for O'Brien, accents and Unicode letters; copy JS or HTML pattern snippets.
Username regex tester
Test username presets for GitHub, Instagram and X; check reserved names and copy JS or HTML patterns.
IP address regex tester
Test IPv4, IPv6, CIDR and private-range patterns and copy JS or HTML pattern snippets.
URL regex tester
Test website URLs against http(s) regex patterns and new URL(), and copy JS, HTML or PHP code.
HMAC-SHA256 generator
Generate and verify webhook signatures for common providers in your browser.
URL encoder and decoder
Encode text, build an x-www-form-urlencoded body or parse a query string.
Password regex generator
Pick strength rules, test passwords live and copy the regex or HTML pattern.
UTM builder
Build campaign URLs with UTM parameters, tag a CSV in bulk and check tagged links.
HTML to JSX converter
Paste HTML and get JSX or a working React/Next.js form component.
Image to Base64 converter
Convert images to Base64 data URLs in your browser and copy HTML and CSS snippets.
Base64 to image converter
Paste a Base64 data URI to preview and download the decoded image.
Base64 decode & encode
Decode Base64 to readable UTF-8 text or encode text to Base64, locally in your browser.
URL to Base64 converter
Fetch a direct image URL in your browser and get its Base64 data URL.
HTML form generator
Build a form visually and copy HTML, React JSX or Tailwind code.
AI form generator
Describe your form in plain English and copy working HTML.
Time regex tester
Test 24-hour, AM/PM and ISO time patterns and copy JavaScript, Python or HTML snippets.
Credit card regex tester
Test Visa, Mastercard 2-series, Amex and more card patterns with brand detection and a Luhn check.
Hex color regex tester
Test #RGB, #RRGGBB and alpha hex colors plus rgb() and hsl() values with live color swatches.
UUID regex tester
Test UUID v1-v8, nil/max and GUID formats with version and variant checks; copy JS or HTML patterns.
Terms explained in the form glossary: Form backend, Autoresponder