Visual RFC.
ALL RFCs / RFC 6068
Read the RFC ↗
RFC 6068 / MAILTO LINKS AND MESSAGE TEMPLATES

Separate recipient syntax from query fields

02

mailto has an optional recipient list and optional name=value query fields. Parse the components before interpreting their percent-encoded data.

RFC 6068 · § 2EXAMPLE
3 / 3
Separate recipient syntax from query fieldsThree address anatomy examples. A public comma-separated addr1 and addr2 address component supplies one recipient list. An equivalent empty address component with a to query supplies the same recipients, at most one To field. Verified erratum7919 permits a literal ampersand in Mike ampersand family in the address component: the question mark starts the query and percent26 inside subject decodes to a data ampersand, not another field delimiter. Display names/comments and arbitrary repeated hfield behavior are not promised.Separate the address from query fieldsURI template:mailto:Mike&family@example.org?subject=A%26BAddress: Mike&family@example.orgSubject: A&BRaw & in address ≠ query-value separatorVerified erratum 7919: component matters
03
Keep a literal address ampersand distinct.

The verified-erratum example has Mike&family in the address component and subject=A%26B in the query. Only the query separates fields at raw ampersands, so the decoded subject is A&B.

Source for this drawing: RFC 6068 · Read RFC section 2 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

Component boundaries determine which characters are separators.

  • The shape is mailto: followed by an optional comma-separated addr-spec list and an optional query starting with ?. Query fields use name=value and & between fields; a second ? is not a field separator.
  • Recipients can be supplied in the address component or a to query field. Mixing both is valid syntax but NOT RECOMMENDED because clients differ. A resulting message MUST NOT have two To fields. Creators SHOULD NOT repeat hfname and MUST NOT duplicate fields that may occur only once.
  • Verified erratum7919 removes the blanket requirement to encode &, ; and = in addr-spec. A literal & in the address component need not be a query delimiter; query-value & must be encoded. Verified4020 names the prohibited obsolete obs-NO-WS-CTL production correctly.
DETAILS

The first two public§2 forms designate the same recipients in one To field; address de-duplication is permitted and duplicate addresses SHOULD be avoided. Query field names are case-insensitive; their values generally are not. addr-spec excludes display-name/comment forms; quoted local parts still require appropriate URI escaping, e.g. the public %22not%40me%22@example.org example. Unverified4706 about quoted whitespace is not silently adopted.

Read the RFC section ↗

All chapters in RFC 6068

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗