| Internet-Draft | Structured Quoted Content | November 2026 |
| Tao, et al. | Expires 5 May 2027 | [Page] |
This document describes a machine-readable format for conveying quoted content in email messages. This can be used when replying to or forwarding an email message.¶
Structured quoted content is expected to be used in conjunction with conventional, human-readable quote formatting. They are based on the forthcoming "structured email" specification defined in [I-D.ietf-sml-structured-email-03] and related drafts.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://ptao.github.io/id-structured-quoted-content/draft-tao-sml-structured-quoted-content.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-ietf-sml-structured-quoted-content/.¶
Discussion of this document takes place on the Structured Email Working Group mailing list (mailto:sml@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/sml/. Subscribe at https://www.ietf.org/mailman/listinfo/sml/.¶
Source for this draft and an issue tracker can be found at https://github.com/ptao/id-structured-quoted-content.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 5 May 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Email messages often content quoted sections of earlier email messages, typically as part of a reply or a forwarded message. The presentation is entirely determined by the sending MUA. Though various conventions have evolved around this quoting, the behavior is still largely unstandardized, and behavior differs widely between MUAs.¶
Some notable differences include:¶
Where newly authored content may be inserted relative to the quoted content.¶
Some MUAs allow inserting new content only above the quoted message, while some allow inserting new content inline between blocks of quoted text.¶
The formatting used to denote the quoted section.¶
Whether some set of headers are also quoted, or whether an attribution line or preamble is inserted.¶
Whether the headers, attribution line, or preamble are localized into the sender's device language.¶
Due to the above, an email chain in a user's inbox may involve a wide mix of differing quoting styles, which can be visually disorienting.¶
The goal of this draft is to introduce a standardized way to structure quoted content in message replies and forwarded messages. This allows the sending MUA to annotate the various components of the quoted content in such a way that the receiving MUA can then apply a consistent presentation across all messages.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
An MUA that supports Structured Quoted Content composes the HTML part of a reply or forward as usual, in its own quoting style. It then:¶
marks each part of the quoted content in the HTML part with an element that has a data-id attribute (Section 6); and¶
adds an application/ld+json part with a JSON-LD object for each marked element, whose @id matches the element's data-id (Section 5).¶
The figure below shows this for a quote introduced by an attribution line.¶
HTML part JSON-LD part
--------- ------------
<div data-id="quoted-content:1"> ..... QuotedContent
message --> EmailMessage
<div data-id="quote-attribution:2"> QuoteAttribution
On Sep 15, Alice Chen wrote: from --> sender
</div> date --> dateSent
<blockquote>
<div data-id="text-content:3"> ... TextContent
(Alice's text)
</div>
</blockquote>
</div>
A receiving MUA that supports Structured Quoted Content can therefore find each part of the quoted content in the HTML part, know what it is and which message it comes from, and render it differently (Section 7). A receiving MUA that does not support it renders the HTML part as usual.¶
All quoted content will be transmitted as "Partial representation" as defined in Section 4.3.2 of [I-D.ietf-sml-structured-email].¶
Structured Quoted Content uses the Schema.org vocabulary [SchemaOrg], as well as a custom vocabulary to be defined at INSERT LINK.¶
The structured data is an array containing two kinds of objects:¶
EmailMessage objects describe a message being quoted. There is one for each message that appears anywhere in the quoted content.¶
QuotedContent, QuotedHeaderBlock, QuotedHeader, QuoteAttribution, TextContent, and ForwardPreamble objects describe how the quoted content is laid out in the HTML part. These objects mark parts of the HTML part.¶
Where this document says a property references an object, its value is that object's @id, or an array of them.¶
The relationships between the object types are:¶
QuotedContent +-- message -------> EmailMessage +-- preamble ------> ForwardPreamble +-- headerBlock ---> QuotedHeaderBlock | +-- header: QuotedHeader objects | +-- value --> a property of the | EmailMessage +-- attribution ---> QuoteAttribution | +-- date --> dateSent | +-- from --> sender +-- content -------> TextContent and nested QuotedContent¶
A QuotedHeaderBlock and a QuoteAttribution are alternative ways of introducing a quoted message, so a QuotedContent has at most one of them (Section 5.3).¶
Every object has @context, @type, and @id. Each object type defines its own @id format. EmailMessage defines its own @context (Section 5.2); for all other object types, @context is "https://sml.draft.iana.org".¶
Unless stated otherwise, a receiving MUA MUST ignore properties it does not recognize, and MUST process the rest of the object as if they were absent.¶
An EmailMessage object describes one message that appears in the quoted content. It holds the header field values [RFC5322] that MUAs typically show for a quoted message, such as its sender, recipients, subject, and date.¶
The structured data contains one EmailMessage object for each distinct message in the quoted content, at any level of nesting. A sending MUA SHOULD NOT include EmailMessage objects that no QuotedContent object references. When the sending MUA splits one quoted message into several blocks, for example to insert inline comments, each block has its own QuotedContent object, and they all reference the same EmailMessage.¶
EmailMessage uses the Schema.org [SchemaOrg] EmailMessage type, with terms from the sml.draft.iana.org vocabulary for dates. Its @context MUST be the following:¶
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended": "https://sml.draft.iana.org/iso8601Extended"
}
]
¶
Unlike Schema.org's dateSent, these dates are nodes with their own @id, so that QuotedHeader and QuoteAttribution objects can reference them.¶
Its @id is a mid: URL [RFC2392]: "mid:" followed by the value of the message's Message-ID header field, without the enclosing angle brackets and percent-encoded as [RFC2392] requires. For example, a message with Message-ID: <msg-ex1-001@example.com> has the @id "mid:msg-ex1-001@example.com". Characters such as #, /, and % are allowed in a Message-ID but have special meaning in the URL, so they have to be encoded: Message-ID: <a#b/c@example.com> gives "mid:a%23b%2Fc@example.com".¶
The EmailMessage properties in Section 5.2.2 use the following value types. Each property defines the @id format of its values.¶
A DateTime is a DateTime object from the sml.draft.iana.org vocabulary, representing a date and time. It has this property:¶
iso8601ExtendedREQUIRED. The date and time in ISO 8601 extended format, with a UTC offset, using the date-time syntax of Section 5.6 of [RFC3339], for example "2025-09-15T09:47:00-07:00".¶
The following table lists the properties of an EmailMessage, with the requirement level and value type of each. Each property is defined after the table.¶
| Property | Requirement | Value |
|---|---|---|
dateSent
|
REQUIRED | DateTime (Section 5.2.1.1) |
sender
|
REQUIRED | Person (Section 5.2.1.2) |
toRecipient
|
RECOMMENDED | Person, or array of Person (Section 5.2.1.2) |
ccRecipient
|
RECOMMENDED | Person, or array of Person (Section 5.2.1.2) |
about
|
RECOMMENDED | Thing (Section 5.2.1.3) |
bccRecipient
|
MUST NOT appear |
The RECOMMENDED properties apply only when the message has the corresponding header field (To, Cc, or Subject).¶
In addition, an EmailMessage MUST include every property that a QuotedHeader or QuoteAttribution object references. For example, if a header block shows a "Cc:" line, the EmailMessage for that message includes ccRecipient.¶
The properties are defined as follows:¶
dateSentThe message's Date header field, as a DateTime. Its @id is the message's @id followed by "#dateSent", for example "mid:msg-ex1-001@example.com#dateSent". The UTC offset in its iso8601Extended SHOULD be the one in the Date header field.¶
senderThe author of the message, from its From header field (not its Sender header field), as a Person. Its @id is a mailto: URI [RFC6068]: "mailto:" followed by the mailbox's address, for example "mailto:alice@example.com". The address in the @id, with any percent-encoding decoded, MUST be the same as the Person's email.¶
toRecipientThe recipients in the message's To header field, as a Person or an array of Person, in the order they appear in the header field. Each Person is as described for sender.¶
ccRecipientThe recipients in the message's Cc header field, as a Person or an array of Person, in the order they appear in the header field. Each Person is as described for sender.¶
aboutThe message's Subject header field, as a Thing. Its @id is the message's @id followed by "#subject", for example "mid:msg-ex1-001@example.com#subject". Its name is the subject text with any encoded-words [RFC2047] decoded.¶
The same mailbox often appears more than once in the structured data, for example as the sender of one message and a recipient of another. A sending MUA SHOULD include the full Person object only once, and use a node reference [JSON-LD] containing only its @id, for example {"@id": "mailto:alice@example.com"}, for the other occurrences.¶
The bccRecipient property is defined by Schema.org for EmailMessage, but MUST NOT be included. Bcc recipients are hidden from the message's other recipients by design, and including them would disclose them to everyone who receives the new message.¶
A sending MUA MAY include other properties that Schema.org defines for EmailMessage, other than bccRecipient. This document does not define any behavior for such properties, and a receiving MUA MAY ignore them.¶
When a receiving MUA ignores a property, it MUST process the rest of the object as if that property were absent. The presence of such a property does not make the object or the structured data invalid.¶
A QuotedContent object represents one block of quoted content: a contiguous part of a quoted message, as it appears in the HTML part. It links the block to the message it was quoted from, to any preamble, header block, or attribution line that the sending MUA placed above it, and to the content of the block itself.¶
QuotedContent objects nest. When a quoted message itself contains quoted content, the inner block is a separate QuotedContent object, listed in the content of the outer one. When the sending MUA splits a quoted message into several blocks, for example to insert inline comments between them, each block is a separate QuotedContent object that references the same EmailMessage. Typically only the first of these blocks has an attribution line or header block.¶
A sending MUA introduces a quoted message either with a header block or with an attribution line, depending on its quoting style. A QuotedContent object therefore has at most one of headerBlock and attribution, never both. It has neither when the block has no introduction, for example when it continues a message after an inline comment.¶
Its @type is "QuotedContent", and its @id is "quoted-content:" followed by a UUID [RFC9562]. It has the following properties:¶
messageREQUIRED. References the EmailMessage that this block is quoted from.¶
preambleOPTIONAL. References the ForwardPreamble shown above the block. Present only when the block is a forwarded message and the sending MUA shows a preamble.¶
headerBlockOPTIONAL. References the QuotedHeaderBlock shown above the block. MUST NOT be present if attribution is present.¶
attributionOPTIONAL. References the QuoteAttribution shown above the block. MUST NOT be present if headerBlock is present.¶
contentREQUIRED. A JSON-LD list ({"@list": [...]}) [JSON-LD] of references to the TextContent and nested QuotedContent objects that make up the block, in the order they appear in the HTML part.¶
A QuotedHeaderBlock object represents the lines of header fields (such as "From:", "Date:", and "Subject:") that some MUAs show above a quoted or forwarded message.¶
Its @type is "QuotedHeaderBlock", and its @id is "quoted-header-block:" followed by a UUID. It has the following property:¶
headerREQUIRED. A JSON-LD list ({"@list": [...]}) of one or more QuotedHeader objects, one for each line of the block, in the order they are displayed. A QuotedHeaderBlock with no QuotedHeader objects is not allowed.¶
A QuotedHeader object represents one line of a header block. It identifies the EmailMessage property whose value the line shows.¶
QuotedHeader objects appear only in the header list of a QuotedHeaderBlock; they are never top-level objects in the structured data, and no other JSON-LD object refers to them.¶
A QuotedHeader's property and value refer to the EmailMessage referenced by the QuotedContent that the header block belongs to.¶
Its @type is "QuotedHeader", and its @id is "quoted-header:" followed by a UUID. It has the following properties:¶
propertyREQUIRED. References the EmailMessage property that the line shows, by that property's IRI: https://schema.org/sender, https://schema.org/toRecipient, https://schema.org/ccRecipient, https://schema.org/about, or https://sml.draft.iana.org/dateSent. For example, a "From:" line has {"@id": "https://schema.org/sender"}.¶
valueREQUIRED. References the value that the line shows: the Person objects of sender, toRecipient, or ccRecipient, the subject object of about, or the DateTime of dateSent. When a line shows several recipients, this is an array.¶
A QuoteAttribution object represents the attribution line that some MUAs place above quoted text, for example "On Sep 15, 2025, at 9:47 AM, Alice Chen <alice@example.com> wrote:". Its properties reference the date and sender that the line shows.¶
Its @type is "QuoteAttribution", and its @id is "quote-attribution:" followed by a UUID. It has the following properties:¶
A TextContent object represents a section of a quoted message's body [RFC5322], not including any content that the message itself quotes.¶
Its @type is "TextContent", and its @id is "text-content:" followed by a UUID. It has no properties other than the common ones.¶
A ForwardPreamble object marks the line that some MUAs place at the start of a forwarded message, such as "---------- Forwarded message ---------" or "Begin forwarded message:".¶
Its @type is "ForwardPreamble", and its @id is "forward-preamble:" followed by a UUID. It has no properties other than the common ones.¶
Each QuotedContent, QuotedHeaderBlock, QuotedHeader, QuoteAttribution, TextContent, and ForwardPreamble object MUST correspond to exactly one element in the HTML part, typically a div or span. The element has the following attributes:¶
data-idREQUIRED. The @id of the object, as defined in Section 4.4.2 of [I-D.ietf-sml-structured-email].¶
data-source-hintOPTIONAL. A hint for where to find the object: a cid: URI [RFC2392] referencing the MIME part that contains the structured data. The object is identified by its data-id; this attribute only suggests where to look for it.¶
An object's element MUST be inside the element of the object that refers to it. The elements of a QuotedContent's preamble, header block, attribution line, and content are inside the QuotedContent's element, and the element of each QuotedHeader is inside the element of its QuotedHeaderBlock.¶
EmailMessage objects describe messages rather than parts of the HTML part, and have no element.¶
Structured Quoted Content identifies the parts of the quoted content in the HTML part, and the messages they were quoted from. A receiving MUA can use it to change or replace how the quoted content is rendered, in any number of ways. For example, it can:¶
Switch between quoting styles, for example rendering a header block as an attribution line or an attribution line as a header block, using the values in the EmailMessage.¶
Add or remove quoted header lines. For example, an MUA that always shows exactly the Date, Subject, and To of each quoted message can add any of those lines that a header block lacks, using the values in the EmailMessage, and remove any other lines.¶
Translate the attribution line or quoted header labels into the user's preferred language.¶
Show the date of a quoted message in the user's own time zone, or as the sender saw it, using the UTC offset in dateSent.¶
Replace, translate, or hide a forward preamble.¶
Add an attribution line to a quoted block that has none, such as a block that continues a quoted message after an inline comment, so that the author of every block is clear.¶
Identify quoted text reliably, including deeply nested quotes, and collapse or condense it, without having to infer the quote structure from the HTML.¶
A receiving MUA can use as much or as little of the structure as it needs. At one end, it can work on a single kind of object and leave the rest of the HTML part as the sending MUA wrote it, for example translating the labels of quoted header lines while ignoring the rest of the quoted structure. At the other end, it can replace the HTML of an entire top-level QuotedContent block with HTML it generates itself from the structured data. It can also do anything in between.¶
The text of the quoted messages is not in the structured data; it is only in the HTML part, in the elements of the TextContent objects. A receiving MUA that generates its own HTML for a block therefore still uses the HTML of those elements for the quoted text.¶
Not every MUA in a reply chain will support Structured Quoted Content. This creates two situations:¶
An MUA that supports Structured Quoted Content quotes a message that has none.¶
An MUA that does not support Structured Quoted Content quotes a message that has it.¶
An MUA that quotes a message without Structured Quoted Content SHOULD NOT try to reconstruct that message's quote structure, for example by parsing its HTML. Instead, it treats the quoted message as containing no quoted content: the message's body, including anything that it quotes in turn, is TextContent, with no nested QuotedContent. Section 9.3 shows this.¶
An MUA that does not support Structured Quoted Content is not bound by this document. When it quotes a message that has Structured Quoted Content, it can break it, for example by:¶
editing the HTML, so that its elements no longer match the objects in the structured data;¶
removing or changing the application/ld+json part, or keeping it only as an attachment, as some MUAs do with a quoted or forwarded message's attachments; or¶
changing the MIME structure, so that the message is no longer a partial representation.¶
The resulting message has no usable Structured Quoted Content, even if its HTML still contains data-id attributes copied from the message it quoted.¶
As a result, the structured data in a message describes only the most recent part of the reply chain: the messages back to the first one sent by an MUA without Structured Quoted Content support. Older messages are part of that message's TextContent, as ordinary HTML.¶
When rendering a message, a receiving MUA SHOULD use only the structured data in that message's own application/ld+json part: the one in the same multipart/related entity as the HTML part it describes (Section 4.3.2 of [I-D.ietf-sml-structured-email]). An application/ld+json part elsewhere in the message, such as one attached from a quoted message, is not that message's structured data. A receiving MUA SHOULD ignore any data-id attribute that does not match an object in that part, and render that HTML as ordinary content.¶
The examples in this section illustrate how Structured Quoted Content is applied across a range of common quoting scenarios. In each example, the application/ld+json MIME part carries all JSON-LD objects, its Content-Id is referenced by the data-source-hint attributes in the HTML part, and HTML elements use data-id to identify their corresponding JSON-LD object.¶
Each Person is included in full once, at its first occurrence, and referenced by its @id elsewhere (Section 5.2.2).¶
All examples use the following MIME structure, with a unique Content-Id per message:¶
multipart/alternative
+-- text/plain
+-- multipart/related; type="text/html"
+-- text/html
+-- application/ld+json
Content-Id: <sml-example@example.com>
¶
Alice emails Bob. Bob replies and CCs Carol. Carol forwards Bob's reply to Dave.¶
Carol's message has the following structure:¶
Carol's note
+-- Bob's text (the forwarded reply)
+-- Alice's text (Bob's nested quote of Alice)
¶
=============== NOTE: '\' line wrapping per RFC 8792 ================
<!-- Carol's note -->
<div data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-content:A1000001-0000-0000-0000-000000000001">
<div data-source-hint="cid:sml-ex1@example.com"
data-id="forward-preamble:A1000006-0000-0000-0000-\
000000000001">
---------- Forwarded message ---------
</div>
<div data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-header-block:A1000002-0000-0000-0000-\
000000000001">
<span data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-header:A1000003-0000-0000-0000-\
000000000001">
<b>From:</b> Bob Kumar <bob@example.com>
</span><br>
<span data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-header:A1000003-0000-0000-0000-\
000000000002">
<b>Date:</b> Mon, Sep 15, 2025 at 2:23 PM
</span><br>
<span data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-header:A1000003-0000-0000-0000-\
000000000003">
<b>Subject:</b> Re: Lorem ipsum
</span><br>
<span data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-header:A1000003-0000-0000-0000-\
000000000004">
<b>To:</b> Alice Chen <alice@example.com>
</span>
</div>
<blockquote>
<div data-source-hint="cid:sml-ex1@example.com"
data-id="text-content:A1000004-0000-0000-0000-000000000001">
<!-- Bob's reply text -->
</div>
<div data-source-hint="cid:sml-ex1@example.com"
data-id="quoted-content:A1000001-0000-0000-0000-\
000000000002">
<blockquote type="cite">
<div data-source-hint="cid:sml-ex1@example.com"
data-id="quote-attribution:A1000005-0000-0000-0000-\
000000000001">
On Sep 15, 2025, at 9:47 AM, Alice Chen
<alice@example.com> wrote:
</div>
<div data-source-hint="cid:sml-ex1@example.com"
data-id="text-content:A1000004-0000-0000-0000-\
000000000002">
<!-- Alice's original text -->
</div>
</blockquote>
</div>
</blockquote>
</div>
¶
[
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex1-001@example.com",
"sender": {
"@type": "Person",
"@id": "mailto:alice@example.com",
"name": "Alice Chen",
"email": "alice@example.com"
},
"toRecipient": [{
"@type": "Person",
"@id": "mailto:bob@example.com",
"name": "Bob Kumar",
"email": "bob@example.com"
}],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex1-001@example.com#subject",
"name": "Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex1-001@example.com#dateSent",
"iso8601Extended": "2025-09-15T09:47:00-07:00"
}
},
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex1-002@example.com",
"sender": {
"@id": "mailto:bob@example.com"
},
"toRecipient": [{
"@id": "mailto:alice@example.com"
}],
"ccRecipient": [{
"@type": "Person",
"@id": "mailto:carol@example.com",
"name": "Carol White",
"email": "carol@example.com"
}],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex1-002@example.com#subject",
"name": "Re: Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex1-002@example.com#dateSent",
"iso8601Extended": "2025-09-15T14:23:00-07:00"
}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:A1000001-0000-0000-0000-000000000001",
"message": {"@id": "mid:msg-ex1-002@example.com"},
"preamble": {
"@id": "forward-preamble:A1000006-0000-0000-0000-000000000001"
},
"headerBlock": {
"@id":
"quoted-header-block:A1000002-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:A1000004-0000-0000-0000-000000000001"},
{"@id": "quoted-content:A1000001-0000-0000-0000-000000000002"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:A1000001-0000-0000-0000-000000000002",
"message": {"@id": "mid:msg-ex1-001@example.com"},
"attribution": {
"@id": "quote-attribution:A1000005-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:A1000004-0000-0000-0000-000000000002"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeaderBlock",
"@id":
"quoted-header-block:A1000002-0000-0000-0000-000000000001",
"header": {"@list": [
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:A1000003-0000-0000-0000-000000000001",
"property": {"@id": "https://schema.org/sender"},
"value": {"@id": "mailto:bob@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:A1000003-0000-0000-0000-000000000002",
"property": {"@id": "https://sml.draft.iana.org/dateSent"},
"value": {"@id": "mid:msg-ex1-002@example.com#dateSent"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:A1000003-0000-0000-0000-000000000003",
"property": {"@id": "https://schema.org/about"},
"value": {"@id": "mid:msg-ex1-002@example.com#subject"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:A1000003-0000-0000-0000-000000000004",
"property": {"@id": "https://schema.org/toRecipient"},
"value": {"@id": "mailto:alice@example.com"}
}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuoteAttribution",
"@id": "quote-attribution:A1000005-0000-0000-0000-000000000001",
"date": {"@id": "mid:msg-ex1-001@example.com#dateSent"},
"from": {"@id": "mailto:alice@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:A1000004-0000-0000-0000-000000000001"
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:A1000004-0000-0000-0000-000000000002"
},
{
"@context": "https://sml.draft.iana.org",
"@type": "ForwardPreamble",
"@id": "forward-preamble:A1000006-0000-0000-0000-000000000001"
}
]
¶
Carol emails Dave and Eve. Dave replies, quoting Carol's message. Eve replies, inserting an inline comment between Carol's message text.¶
Eve's message has the following structure:¶
Eve's first comment
+-- Dave's text (Eve's quote of Dave)
+-- First portion of Carol's text (Dave's nested quote of Carol)
Eve's inline comment
+---+-- Carol's remaining text (continuation of Carol's
message)
¶
=============== NOTE: '\' line wrapping per RFC 8792 ================
<!-- Eve's first comment -->
<div data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-content:B2000001-0000-0000-0000-000000000001">
<div data-source-hint="cid:sml-ex2@example.com"
data-id="quote-attribution:B2000005-0000-0000-0000-\
000000000001">
On Mon, Oct 6, 2025 at 2:15 PM, Dave Nguyen
<dave@example.com> wrote:
</div>
<blockquote>
<div data-source-hint="cid:sml-ex2@example.com"
data-id="text-content:B2000004-0000-0000-0000-000000000001">
<!-- Dave's response text -->
</div>
<div data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-content:B2000001-0000-0000-0000-\
000000000003">
<hr>
<div data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-header-block:B2000002-0000-0000-0000-\
000000000001">
<span data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-header:B2000003-0000-0000-0000-\
000000000001">
<b>From:</b> Carol Davies <carol@example.com>
</span><br>
<span data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-header:B2000003-0000-0000-0000-\
000000000002">
<b>Sent:</b> Monday, October 6, 2025 9:00 AM
</span><br>
<span data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-header:B2000003-0000-0000-0000-\
000000000003">
<b>To:</b> Dave Nguyen <dave@example.com>;
Eve Larsson <eve@example.com>
</span><br>
<span data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-header:B2000003-0000-0000-0000-\
000000000004">
<b>Subject:</b> Lorem ipsum
</span>
</div>
<div data-source-hint="cid:sml-ex2@example.com"
data-id="text-content:B2000004-0000-0000-0000-\
000000000003">
<!-- First portion of Carol's text -->
</div>
</div>
</blockquote>
</div>
<!-- Eve's inline comment -->
<div data-source-hint="cid:sml-ex2@example.com"
data-id="quoted-content:B2000001-0000-0000-0000-000000000002">
<blockquote>
<div data-source-hint="cid:sml-ex2@example.com"
data-id="text-content:B2000004-0000-0000-0000-000000000002">
<!-- Carol's remaining text -->
</div>
</blockquote>
</div>
¶
[
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex2-001@example.com",
"sender": {
"@type": "Person",
"@id": "mailto:carol@example.com",
"name": "Carol Davies",
"email": "carol@example.com"
},
"toRecipient": [
{
"@type": "Person",
"@id": "mailto:dave@example.com",
"name": "Dave Nguyen",
"email": "dave@example.com"
},
{
"@type": "Person",
"@id": "mailto:eve@example.com",
"name": "Eve Larsson",
"email": "eve@example.com"
}
],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex2-001@example.com#subject",
"name": "Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex2-001@example.com#dateSent",
"iso8601Extended": "2025-10-06T09:00:00-07:00"
}
},
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex2-002@example.com",
"sender": {
"@id": "mailto:dave@example.com"
},
"toRecipient": [
{
"@id": "mailto:carol@example.com"
},
{
"@id": "mailto:eve@example.com"
}
],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex2-002@example.com#subject",
"name": "Re: Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex2-002@example.com#dateSent",
"iso8601Extended": "2025-10-06T14:15:00-07:00"
}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:B2000001-0000-0000-0000-000000000001",
"message": {"@id": "mid:msg-ex2-002@example.com"},
"attribution": {
"@id": "quote-attribution:B2000005-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:B2000004-0000-0000-0000-000000000001"},
{"@id": "quoted-content:B2000001-0000-0000-0000-000000000003"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:B2000001-0000-0000-0000-000000000002",
"message": {"@id": "mid:msg-ex2-001@example.com"},
"content": {"@list": [
{"@id": "text-content:B2000004-0000-0000-0000-000000000002"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:B2000001-0000-0000-0000-000000000003",
"message": {"@id": "mid:msg-ex2-001@example.com"},
"headerBlock": {
"@id":
"quoted-header-block:B2000002-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:B2000004-0000-0000-0000-000000000003"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuoteAttribution",
"@id": "quote-attribution:B2000005-0000-0000-0000-000000000001",
"date": {"@id": "mid:msg-ex2-002@example.com#dateSent"},
"from": {"@id": "mailto:dave@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeaderBlock",
"@id":
"quoted-header-block:B2000002-0000-0000-0000-000000000001",
"header": {"@list": [
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:B2000003-0000-0000-0000-000000000001",
"property": {"@id": "https://schema.org/sender"},
"value": {"@id": "mailto:carol@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:B2000003-0000-0000-0000-000000000002",
"property": {"@id": "https://sml.draft.iana.org/dateSent"},
"value": {"@id": "mid:msg-ex2-001@example.com#dateSent"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:B2000003-0000-0000-0000-000000000003",
"property": {"@id": "https://schema.org/toRecipient"},
"value": [
{"@id": "mailto:dave@example.com"},
{"@id": "mailto:eve@example.com"}
]
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:B2000003-0000-0000-0000-000000000004",
"property": {"@id": "https://schema.org/about"},
"value": {"@id": "mid:msg-ex2-001@example.com#subject"}
}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:B2000004-0000-0000-0000-000000000001"
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:B2000004-0000-0000-0000-000000000002"
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:B2000004-0000-0000-0000-000000000003"
}
]
¶
Frank emails Grace, Heidi, and Ivan. Grace replies to Frank; Grace's MUA does not support Structured Quoted Content. Heidi replies to Grace. Ivan replies to Heidi.¶
Ivan's message has the following structure:¶
Ivan's text
+-- Heidi's text (Ivan's quote of Heidi)
+-- Grace's text (Heidi's nested quote of Grace, including
Grace's unstructured quote of Frank)
¶
=============== NOTE: '\' line wrapping per RFC 8792 ================
<!-- Ivan's text -->
<div data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-content:C3000001-0000-0000-0000-000000000001">
<div data-source-hint="cid:sml-ex3@example.com"
data-id="quote-attribution:C3000005-0000-0000-0000-\
000000000001">
On Tue, Oct 7, 2025 at 11:30 AM, Heidi Mueller
<heidi@example.com> wrote:
</div>
<blockquote>
<div data-source-hint="cid:sml-ex3@example.com"
data-id="text-content:C3000004-0000-0000-0000-000000000001">
<!-- Heidi's text -->
</div>
<div data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-content:C3000001-0000-0000-0000-\
000000000002">
<div data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-header-block:C3000002-0000-0000-0000-\
000000000001">
<span data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-header:C3000003-0000-0000-0000-\
000000000001">
<b>From:</b> Grace Kim <grace@example.com>
</span>
<span data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-header:C3000003-0000-0000-0000-\
000000000002">
<b>Sent:</b> Tuesday, October 7, 2025 10:15
</span>
<span data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-header:C3000003-0000-0000-0000-\
000000000003">
<b>To:</b> Frank Osei <frank@example.com>;
Heidi Mueller <heidi@example.com>;
Ivan Santos <ivan@example.com>
</span>
<span data-source-hint="cid:sml-ex3@example.com"
data-id="quoted-header:C3000003-0000-0000-0000-\
000000000004">
<b>Subject:</b> Re: Lorem ipsum
</span>
</div>
<div data-source-hint="cid:sml-ex3@example.com"
data-id="text-content:C3000004-0000-0000-0000-\
000000000002">
<!-- Grace's text, including unstructured quote of Frank -->
</div>
</div>
</blockquote>
</div>
¶
[
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex3-001@example.com",
"sender": {
"@type": "Person",
"@id": "mailto:grace@example.com",
"name": "Grace Kim",
"email": "grace@example.com"
},
"toRecipient": [{
"@type": "Person",
"@id": "mailto:heidi@example.com",
"name": "Heidi Mueller",
"email": "heidi@example.com"
}],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex3-001@example.com#subject",
"name": "Re: Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex3-001@example.com#dateSent",
"iso8601Extended": "2025-10-07T10:15:00-07:00"
}
},
{
"@context": [
"https://schema.org/",
{
"dateSent": "https://sml.draft.iana.org/dateSent",
"DateTime": "https://sml.draft.iana.org/DateTime",
"iso8601Extended":
"https://sml.draft.iana.org/iso8601Extended"
}
],
"@type": "EmailMessage",
"@id": "mid:msg-ex3-002@example.com",
"sender": {
"@id": "mailto:heidi@example.com"
},
"toRecipient": [{
"@type": "Person",
"@id": "mailto:ivan@example.com",
"name": "Ivan Santos",
"email": "ivan@example.com"
}],
"about": {
"@type": "Thing",
"@id": "mid:msg-ex3-002@example.com#subject",
"name": "Re: Lorem ipsum"
},
"dateSent": {
"@type": "DateTime",
"@id": "mid:msg-ex3-002@example.com#dateSent",
"iso8601Extended": "2025-10-07T11:30:00-07:00"
}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:C3000001-0000-0000-0000-000000000001",
"message": {"@id": "mid:msg-ex3-002@example.com"},
"attribution": {
"@id": "quote-attribution:C3000005-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:C3000004-0000-0000-0000-000000000001"},
{"@id": "quoted-content:C3000001-0000-0000-0000-000000000002"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedContent",
"@id": "quoted-content:C3000001-0000-0000-0000-000000000002",
"message": {"@id": "mid:msg-ex3-001@example.com"},
"headerBlock": {
"@id":
"quoted-header-block:C3000002-0000-0000-0000-000000000001"
},
"content": {"@list": [
{"@id": "text-content:C3000004-0000-0000-0000-000000000002"}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuoteAttribution",
"@id": "quote-attribution:C3000005-0000-0000-0000-000000000001",
"date": {"@id": "mid:msg-ex3-002@example.com#dateSent"},
"from": {"@id": "mailto:heidi@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeaderBlock",
"@id":
"quoted-header-block:C3000002-0000-0000-0000-000000000001",
"header": {"@list": [
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:C3000003-0000-0000-0000-000000000001",
"property": {"@id": "https://schema.org/sender"},
"value": {"@id": "mailto:grace@example.com"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:C3000003-0000-0000-0000-000000000002",
"property": {"@id": "https://sml.draft.iana.org/dateSent"},
"value": {"@id": "mid:msg-ex3-001@example.com#dateSent"}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:C3000003-0000-0000-0000-000000000003",
"property": {"@id": "https://schema.org/toRecipient"},
"value": [
{"@id": "mailto:frank@example.com"},
{"@id": "mailto:heidi@example.com"},
{"@id": "mailto:ivan@example.com"}
]
},
{
"@context": "https://sml.draft.iana.org",
"@type": "QuotedHeader",
"@id": "quoted-header:C3000003-0000-0000-0000-000000000004",
"property": {"@id": "https://schema.org/about"},
"value": {"@id": "mid:msg-ex3-001@example.com#subject"}
}
]}
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:C3000004-0000-0000-0000-000000000001"
},
{
"@context": "https://sml.draft.iana.org",
"@type": "TextContent",
"@id": "text-content:C3000004-0000-0000-0000-000000000002"
}
]
¶
TODO Security¶
This document has no IANA actions.¶
TODO acknowledge.¶