summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8970.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8970.txt')
-rw-r--r--doc/rfc/rfc8970.txt451
1 files changed, 451 insertions, 0 deletions
diff --git a/doc/rfc/rfc8970.txt b/doc/rfc/rfc8970.txt
new file mode 100644
index 0000000..d40f47a
--- /dev/null
+++ b/doc/rfc/rfc8970.txt
@@ -0,0 +1,451 @@
+
+
+
+
+Internet Engineering Task Force (IETF) M. Slusarz
+Request for Comments: 8970 Open-Xchange Inc.
+Category: Standards Track December 2020
+ISSN: 2070-1721
+
+
+ IMAP4 Extension: Message Preview Generation
+
+Abstract
+
+ This document specifies an Internet Message Access Protocol (IMAP)
+ protocol extension that allows a client to request a server-generated
+ abbreviated text representation of message data that is useful as a
+ contextual preview of the entire message.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8970.
+
+Copyright Notice
+
+ Copyright (c) 2020 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 Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Conventions Used in This Document
+ 3. FETCH Data Item
+ 3.1. Command
+ 3.2. Response
+ 3.3. Preview Text Format
+ 4. LAZY Priority Modifier
+ 4.1. LAZY
+ 4.2. Client Implementation Advice
+ 5. Examples
+ 6. Formal Syntax
+ 7. IANA Considerations
+ 8. Security Considerations
+ 9. References
+ 9.1. Normative References
+ 9.2. Informative References
+ Acknowledgments
+ Author's Address
+
+1. Introduction
+
+ Many modern mail clients display small extracts of the body text as
+ an aid to allow a user to quickly decide whether they are interested
+ in viewing the full message contents. Mail clients implementing the
+ Internet Message Access Protocol [RFC3501] would benefit from a
+ standardized, consistent way to generate these brief textual previews
+ of messages.
+
+ Generation of a preview on the server has several benefits. First,
+ it allows consistent representation of previews across all clients.
+ While different clients might generate quite different preview text,
+ having common preview text generated by the server can give a more
+ consistent user experience to those who use multiple clients.
+
+ Second, server-side preview generation is more efficient. A client-
+ based algorithm needs to issue, at a minimum, a FETCH BODYSTRUCTURE
+ command in order to determine which MIME [RFC2045] body part(s)
+ should be represented in the preview. Subsequently, at least one
+ FETCH BODY command may be needed to retrieve body data used in
+ preview generation. These FETCH commands cannot be pipelined since
+ the BODYSTRUCTURE query must be parsed on the client before the list
+ of parts to be retrieved via the BODY command(s) can be determined.
+
+ Additionally, it may be difficult to predict the amount of body data
+ that must be retrieved to adequately represent the part via a
+ preview, therefore requiring inefficient fetching of excessive data
+ in order to account for this uncertainty. For example, a preview
+ algorithm to display data contained in a text/html [RFC2854] part
+ will likely strip the markup tags to obtain textual content.
+ However, without fetching the entire content of the part, there is no
+ way to guarantee that sufficient non-tag content will exist unless
+ either 1) the entire part is retrieved or 2) an additional partial
+ FETCH is executed when the client determines that it does not possess
+ sufficient data from a previous partial FETCH to display an adequate
+ representation of the preview.
+
+ Finally, server generation allows caching in a centralized location.
+ Using server-generated previews allows global generation once per
+ message, and that preview can be cached for the retention period of
+ the source message. Retrieval of message data may be expensive
+ within a server, for example, so a server can be configured to reduce
+ its storage retrieval load by pre-generating preview data.
+
+ A server indicates support for this extension via the "PREVIEW"
+ capability name.
+
+2. Conventions Used in This Document
+
+ 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.
+
+ "User" is used to refer to a human user, whereas "client" refers to
+ the software being run by the user.
+
+ In examples, "C:" and "S:" indicate lines sent by the client and
+ server, respectively. If a single "C:" or "S:" label applies to
+ multiple lines, then the line breaks between those lines are for
+ editorial clarity only and are not part of the actual protocol
+ exchange.
+
+ As with all IMAP extension documents, the case used in writing IMAP
+ protocol elements herein is chosen for editorial clarity, and
+ implementations must pay attention to the numbered rules at the
+ beginning of Section 9 of [RFC3501].
+
+3. FETCH Data Item
+
+3.1. Command
+
+ To retrieve a preview for a message, the PREVIEW FETCH attribute is
+ used when issuing a FETCH command.
+
+3.2. Response
+
+ The server returns a variable-length string that is the generated
+ preview for that message. This string is intended to be viewed by
+ the user as a contextual preview of the entire message and is not
+ intended to be interpreted in any way by the client software.
+
+ Example: Retrieving preview information in a SELECTed mailbox.
+
+ C: A1 FETCH 1 (PREVIEW)
+ S: * 1 FETCH (PREVIEW "Preview text!")
+ S: A1 OK FETCH complete.
+
+ A server SHOULD strive to generate the same string for a given
+ message for each request. However, since previews are understood to
+ be an approximation of the message data and not a canonical view of
+ its contents, a client MUST NOT assume that a message preview is
+ immutable for a given message. This relaxed requirement permits a
+ server to offer previews as an option without requiring potentially
+ burdensome storage and/or processing requirements to guarantee
+ immutability for a use case that does not require this strictness.
+ For example, the underlying IMAP server may change due to a system
+ software upgrade; an account's state information may be retained in
+ the migration, but the new server may generate different preview text
+ than the old server.
+
+ It is possible that the server has determined that no meaningful
+ preview text can be generated for a particular message. Examples of
+ this involve encrypted messages, content types the server does not
+ support previews of, and other situations where the server is not
+ able to extract information for a preview. In such cases, the server
+ MUST return a zero-length string. Clients SHOULD NOT send another
+ FETCH for a preview for such messages. (As discussed previously,
+ preview data is not immutable, so there is chance that at some point
+ in the future the server would be able to generate meaningful text.
+ However, this scenario is expected to be rare, so a client should not
+ continually send out requests to try to detect this infrequent
+ occurrence.)
+
+ If the LAZY modifier (Section 4.1) is used, the server MAY return NIL
+ for the preview response, indicating that preview generation could
+ not be completed without causing undue delay. A server MUST NOT
+ return NIL to a FETCH PREVIEW request made without the LAZY modifier.
+
+3.3. Preview Text Format
+
+ The generated preview text MUST be treated as text/plain [RFC2046]
+ media type data by the client.
+
+ The generated string MUST NOT be content transfer encoded and MUST be
+ encoded in UTF-8 [RFC3629]. The server SHOULD remove any formatting
+ markup and do whatever processing might be useful in rendering the
+ preview as plain text.
+
+ For purposes of this section, a "preview character" is defined as a
+ single Universal Character Set (UCS) character encoded in UTF-8.
+ Note: a single preview character may comprise multiple octets, so any
+ buffers implemented to conform to the string limitations identified
+ in this document should be sized to prevent possible overflow errors.
+
+ The server SHOULD limit the length of the preview text to 200 preview
+ characters. This length should provide sufficient data to generally
+ support both various languages (and their different average word
+ lengths) and diverse client display size requirements.
+
+ The server MUST NOT output preview text longer than 256 preview
+ characters.
+
+ If the preview is not generated based on the body content of the
+ message, and the LANGUAGE extension [RFC5255] is supported by the
+ server, the preview text SHOULD be generated according to the
+ language rules that apply to human-readable text. For example, a
+ message that consists of a single image MIME part has no human-
+ readable text from which to generate preview information. Instead,
+ the server may wish to output a description that the message contains
+ an image and describe some attributes of the image, such as image
+ format, size, and filename. This descriptive text is not a product
+ of the message body itself but is rather auto-generated data by the
+ server; it should thus use the rules defined for human-readable text
+ described in the LANGUAGE extension (if supported on the server).
+
+4. LAZY Priority Modifier
+
+4.1. LAZY
+
+ The LAZY modifier directs the server to return the preview
+ representation only if that data can be returned without undue delay
+ to the client.
+
+ If this modifier is used, and the server is unable to return preview
+ data without undue delay, the server MUST return NIL as the preview
+ response.
+
+ The LAZY modifier MUST be implemented by any server that supports the
+ PREVIEW extension.
+
+4.2. Client Implementation Advice
+
+ Upon opening a mailbox, a client generally performs a FETCH of
+ message details in order to create a listing to present to the user
+ (e.g., ENVELOPE data). Using this extension, a client may want to
+ additionally display preview information as part of this listing.
+ Quickly providing the base mailbox listing with basic message details
+ is the primary goal of this command as this is required to allow the
+ user to begin interacting with the mailbox. Preview data is likely
+ to be of secondary importance; it provides useful context, but it is
+ not necessary to perform message actions. A client can load
+ unavailable previews in the background and display them
+ asynchronously to the user as the preview data is provided by the
+ server.
+
+ In this scenario, the client would add the PREVIEW data item, with
+ the LAZY modifier, to the list of FETCH items needed to generate the
+ mailbox listing. This allows the server to advantageously return
+ preview data without blocking the primary goal of quickly returning
+ the basic message details used to generate the mailbox listing.
+
+ Once this initial FETCH is complete, the client can then issue FETCH
+ requests, without the LAZY modifier, to load the PREVIEW data item
+ for the messages in which preview data was not returned. It is
+ RECOMMENDED that these FETCH requests be issued in small batches,
+ e.g., 50 messages per FETCH command, since preview generation may be
+ expensive and a single large request may exceed server resource
+ limits.
+
+ See Example 2 in Section 5 for an implementation of this strategy.
+
+ A client SHOULD NOT continually issue FETCH PREVIEW requests with the
+ LAZY modifier in a selected mailbox as the server is under no
+ requirement to return preview information for this command, which
+ could lead to an unnecessary waste of system and network resources.
+
+5. Examples
+
+ Example 1: Requesting preview without LAZY modifier.
+
+ C: A1 CAPABILITY
+ S: * CAPABILITY IMAP4rev1 PREVIEW
+ S: A1 OK Capability command completed.
+ [...a mailbox is SELECTed...]
+ C: A2 FETCH 1 (RFC822.SIZE PREVIEW)
+ S: * 1 FETCH (RFC822.SIZE 5647 PREVIEW {200}
+ S: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ S: Curabitur aliquam turpis et ante dictum, et pulvinar dui congue.
+ S: Maecenas hendrerit, lorem non imperdiet pellentesque, nulla
+ S: ligula nullam
+ S: )
+ S: A2 OK FETCH complete.
+
+ Example 2: Requesting preview with LAZY modifier, to obtain previews
+ during initial mailbox listing if readily available; otherwise, load
+ previews in background.
+
+ C: B1 FETCH 1:4 (ENVELOPE PREVIEW (LAZY))
+ S: * 1 FETCH (ENVELOPE ("Wed, 23 Sep 2020 15:03:11 +0000" [...])
+ PREVIEW "Preview text for message 1.")
+ S: * 2 FETCH (PREVIEW "" ENVELOPE
+ ("Thu, 24 Sep 2020 12:17:23 +0000" [...]))
+ S: * 3 FETCH (ENVELOPE ("Fri, 25 Sep 2020 09:13:45 +0000" [...])
+ PREVIEW NIL)
+ S: * 4 FETCH (ENVELOPE ("Sat, 26 Sep 2020 07:11:18 +0000" [...])
+ PREVIEW NIL)
+ S: B1 OK FETCH completed.
+ [...Client has preview for message 1 and knows that message 2 has
+ a preview that is empty; only need to request preview of
+ messages 3 & 4 (e.g., in background)...]
+ C: B2 FETCH 3:4 (PREVIEW)
+ S: * 3 FETCH (PREVIEW {30}
+ S: Message data from message 3.
+ S: )
+ S: * 4 FETCH (PREVIEW "Message 4 preview")
+ S: B2 OK Fetch completed.
+
+ Example 3: Requesting preview for search results within a single
+ mailbox. Use the SEARCHRES extension [RFC5182] to save a round-trip.
+
+ C: C1 CAPABILITY
+ S: * CAPABILITY IMAP4rev1 PREVIEW SEARCHRES
+ S: C1 OK Capability command completed.
+ [...a mailbox is SELECTed...]
+ C: C2 SEARCH RETURN (SAVE) FROM "FOO"
+ C: C3 FETCH $ (UID PREVIEW (LAZY))
+ S: C2 OK SEARCH completed.
+ S: * 5 FETCH (UID 13 PREVIEW "Preview!")
+ S: * 9 FETCH (UID 23 PREVIEW NIL)
+ S: C3 OK FETCH completed.
+ [...Retrieve message 9 preview in background...]
+ C: C4 UID FETCH 23 (PREVIEW)
+ S: * 9 FETCH (UID 23 PREVIEW "Another preview!")
+ S: C4 OK FETCH completed.
+
+6. Formal Syntax
+
+ The following syntax specification uses the Augmented Backus-Naur
+ Form (ABNF) as described in [RFC5234]. It includes definitions from
+ IMAP [RFC3501].
+
+ capability =/ "PREVIEW"
+
+ fetch-att =/ "PREVIEW" [SP "(" preview-mod *(SP
+ preview-mod) ")"]
+
+ msg-att-dynamic =/ "PREVIEW" SP nstring
+
+ preview-mod = "LAZY"
+
+7. IANA Considerations
+
+ IMAP [RFC3501] capabilities are registered by publishing a Standards
+ Track or IESG-approved Experimental RFC in the "IMAP Capabilities"
+ registry located at <http://www.iana.org/assignments/imap-
+ capabilities>.
+
+ IANA has added the "PREVIEW" capability to this registry.
+
+8. Security Considerations
+
+ Implementation of this extension might enable denial-of-service
+ attacks against server resources, due to excessive memory or CPU
+ usage during preview generation or increased storage usage if preview
+ results are stored on the server after generation. In order to
+ mitigate such attacks, servers SHOULD log the client authentication
+ identity on FETCH PREVIEW operations in order to facilitate tracking
+ of abusive clients.
+
+ Servers MAY limit the resources that preview generation uses. Such
+ resource limitations might, in an extreme example, cause a server to
+ return a preview that is the empty string for a message that
+ otherwise would have had a non-empty preview. However, it is
+ recommended that at least some preview text be provided in this
+ situation, even if the quality of the preview is degraded.
+
+ Just as the messages they summarize, preview data may contain
+ sensitive information. If generated preview data is stored on the
+ server, e.g., for caching purposes, these previews MUST be protected
+ with equivalent authorization and confidentiality controls as the
+ source message.
+
+9. References
+
+9.1. Normative References
+
+ [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+ Extensions (MIME) Part Two: Media Types", RFC 2046,
+ DOI 10.17487/RFC2046, November 1996,
+ <https://www.rfc-editor.org/info/rfc2046>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
+ 4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003,
+ <https://www.rfc-editor.org/info/rfc3501>.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
+ 2003, <https://www.rfc-editor.org/info/rfc3629>.
+
+ [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <https://www.rfc-editor.org/info/rfc5234>.
+
+ [RFC5255] Newman, C., Gulbrandsen, A., and A. Melnikov, "Internet
+ Message Access Protocol Internationalization", RFC 5255,
+ DOI 10.17487/RFC5255, June 2008,
+ <https://www.rfc-editor.org/info/rfc5255>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+9.2. Informative References
+
+ [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+ Extensions (MIME) Part One: Format of Internet Message
+ Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996,
+ <https://www.rfc-editor.org/info/rfc2045>.
+
+ [RFC2854] Connolly, D. and L. Masinter, "The 'text/html' Media
+ Type", RFC 2854, DOI 10.17487/RFC2854, June 2000,
+ <https://www.rfc-editor.org/info/rfc2854>.
+
+ [RFC5182] Melnikov, A., "IMAP Extension for Referencing the Last
+ SEARCH Result", RFC 5182, DOI 10.17487/RFC5182, March
+ 2008, <https://www.rfc-editor.org/info/rfc5182>.
+
+Acknowledgments
+
+ The author would like to thank the following people for their
+ comments and contributions to this document: Stephan Bosch, Bron
+ Gondwana, Teemu Huovila, Neil Jenkins, Steffen Lehmann, Barry Leiba,
+ Alexey Melnikov, Chris Newman, Pete Resnick, Jeff Sipek, Timo
+ Sirainen, Steffen Templin, and Aki Tuomi.
+
+Author's Address
+
+ Michael M. Slusarz
+ Open-Xchange Inc.
+ 530 Lytton Avenue
+ Palo Alto, California 94301
+ United States of America
+
+ Email: michael.slusarz@open-xchange.com