Skip to main content

Email to MD Link — Free Mailto Markdown Link Generator

Turn any email address into a valid Markdown mailto link in one click. Paste an address, get [text](mailto:...) syntax with pre-filled subject and body, CC/BCC, email validation, Markdown text escaping, optional anti-scraper obfuscation, and a batch mode that converts a whole list of addresses at once. Everything runs 100% in your browser — no signup, no server, your addresses never leave the page.

Mailto Markdown link generator

Create a Markdown email link — with pre-filled subject, body, CC/BCC and optional obfuscation.

Obfuscation slows down naive scrapers that regex raw text — it will not stop bots that parse HTML. A contact form remains the only strong protection.

Markdown
Raw mailto URL
HTML anchor
Live preview — updates as you type. Nothing is sent anywhere.

Worked examples

Real input → output pairs produced by the generator above.

InputOutputNotes
Email hello@example.com, text Email us [Email us](mailto:hello@example.com) The simplest mailto link — addr-spec characters stay readable.
Email support@example.com, text Report a bug, subject Bug report, body Hi team, + newline + The button is broken. [Report a bug](mailto:support@example.com?subject=Bug%20report&body=Hi%20team%2C%0D%0AThe%20button%20is%20broken.) Space → %20, comma → %2C, newline → %0D%0A per RFC 6068. One unencoded & would silently cut the body.
Email sales@example.com, text Contact sales, CC manager@example.com, BCC crm@example.com [Contact sales](mailto:sales@example.com?cc=manager@example.com&bcc=crm@example.com) CC/BCC are validated as addresses too; in the HTML output the & separators become &.
Email docs@example.com, text Docs [v2] (draft) [Docs \[v2\] \(draft\)](mailto:docs@example.com) Brackets and parentheses in link text are escaped — an unescaped ] would close the link early.
Email me@example.com, text Email me, obfuscation on <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">&#69;&#109;&#97;&#105;&#108;&#32;&#109;&#101;</a> Every character becomes an HTML entity. Renders as a normal "Email me" link; HTML-only because entities are an HTML feature.
Batch: a@example.com | Site A + b@example.com | Site B [Site A](mailto:a@example.com)
[Site B](mailto:b@example.com)
One address per line becomes a list of Markdown links; add | text for custom labels.

All example outputs above were generated by this page's own engine and are covered by the automated test suite — the page eats its own dog food.

How the generator validates and encodes your input

Small details that keep the mailto link valid:

  • Email validation. Exactly one @, a dot-atom local part and domain, no spaces, no numeric-only TLD. Quoted local parts ("a b"@x.com) and IP-literal domains are rejected on purpose — flagging them catches far more real typos than it rejects legitimate addresses.
  • Multiple recipients. Separate addresses with commas (semicolons and new lines also work). Every address is validated — one bad address fails the whole link with a message naming the culprit, instead of silently producing a half-broken mailto:.
  • RFC 6068 encoding. mailto:to?subject=...&body=...&cc=...&bcc=... — values are percent-encoded, newlines normalized to CRLF (%0D%0A). The address itself keeps readable addr-spec characters (a@example.com, not a%40example.com).
  • Text escaping. \, [, ], ( and ) in the link text get a backslash prefix so they cannot break the Markdown syntax.
  • Honest obfuscation. HTML entities defeat naive regex harvesters, not HTML parsers. The mode is opt-in, labelled, and documented with its limits — here and in the FAQ.
  • Length guard. Links over 2,000 characters trigger a warning — some email clients truncate very long mailto links, so keep subject and body short.

Email to Markdown mailto link — frequently asked questions

Is a mailto: link still relevant?

Yes — for personal contact links, READMEs, docs and signatures it is still the simplest way to let someone reach you: one click opens their own mail client, no account or backend needed. Where it shines is pre-filled context: mailto:support@example.com?subject=Bug%20report&body=Hi%20team%2C%0D%0A opens a draft that already says what the email is about, which measurably increases the chance of a useful reply versus a blank compose window. What mailto cannot do is tracking, attachments or spam protection — for those you need a contact form.

Will obfuscating my email really stop spam scrapers?

Only partially — and any tool that promises otherwise is not being honest. Encoding an address as HTML entities (mailto:...) defeats naive harvesters that regex raw text for name@domain patterns, which still make up a large share of scraping traffic. But any bot that parses HTML can decode entities instantly, and modern scrapers do exactly that. The only strong protection is never publishing the address at all (use a contact form). This tool gives you the honest middle ground: one-click entity obfuscation plus a visible note about its limits.

What is the difference between this tool and URL to MD Link?

Intent. Email to MD Link wraps an email address in a mailto: link — [Email us](mailto:hello@example.com) — with optional subject, body, CC and BCC fields. URL to MD Link wraps web addresses — [text](https://example.com) — and deliberately rejects the mailto: scheme, because validating http/https URLs and validating emails are different jobs with different rules. If you need a plain web link, use URL to MD Link; if you need a clickable email, stay here.

How are the subject and body encoded in the mailto link?

Per RFC 6068: recipients go right after mailto:, then fields are joined as ?subject=...&body=...&cc=...&bcc=..., and every value is percent-encoded. A space becomes %20, a comma becomes %2C, an ampersand becomes %26, and line breaks become %0D%0A (the CRLF pair the standard requires). So subject "Bug report" plus a two-line body "Hi team," / "The button is broken." becomes mailto:support@example.com?subject=Bug%20report&body=Hi%20team%2C%0D%0AThe%20button%20is%20broken. — write plain text and let the generator encode it; one unencoded & would silently cut your body in half.

What counts as a valid email address in this generator?

A pragmatic subset of the rules: one @ sign, a dot-atom local part (letters, digits and !#$%&'*+-/=?^_`{|}~), and a dot-atom domain ending in a non-numeric label — support@example.com passes, while missing @, double dots, spaces and numeric-only TLDs fail with a plain-language error. Deliberately rejected are the exotic-but-legal forms: quoted local parts ("a b"@x.com) and IP-literal domains. Those are almost never what you mean when hand-writing a mailto link, and flagging them catches far more real typos than it rejects legitimate addresses.

Can I generate many mailto links at once?

Yes — switch to the Batch tab and paste one address per line, optionally followed by | and custom link text: a@example.com | Site A on one line, b@example.com | Site B on the next. The subject, body, CC, BCC and obfuscation settings apply to every line, each line is validated independently, and invalid lines are skipped with a report instead of silently producing broken links. The output is a ready-to-paste list of Markdown links.

Why does the obfuscated output use HTML instead of Markdown?

Because HTML entities are an HTML feature — there is no such thing as an "entity" in Markdown syntax itself, so a Markdown-style [text](mailto:...) link cannot carry them reliably across renderers. Instead the obfuscation mode emits <a href="mailto:...">Email me</a>: browsers decode the entities and the visitor sees a perfectly normal "Email me" link. Inline HTML is valid inside Markdown documents — GitHub, GitLab and most static-site generators render it fine — so you can paste it straight into your .md file.

Related tools

Free tool by NRTechStudio