| < draft-ietf-extra-sieve-snooze-00.txt | draft-ietf-extra-sieve-snooze-01.txt > | |||
|---|---|---|---|---|
| EXTRA K. Murchison | EXTRA K. Murchison | |||
| Internet-Draft R. Signes | Internet-Draft R. Signes | |||
| Updates: 5232 (if approved) N. Jenkins | Updates: 5232 (if approved) N. Jenkins | |||
| Intended status: Standards Track Fastmail | Intended status: Standards Track Fastmail | |||
| Expires: February 8, 2021 August 7, 2020 | Expires: August 26, 2021 February 22, 2021 | |||
| Sieve Email Filtering: Snooze Extension | Sieve Email Filtering: Snooze Extension | |||
| draft-ietf-extra-sieve-snooze-00 | draft-ietf-extra-sieve-snooze-01 | |||
| Abstract | Abstract | |||
| This document describes the "snooze" extension to the Sieve email | This document describes the "snooze" extension to the Sieve email | |||
| filtering language. The "snooze" extension gives Sieve the ability | filtering language. The "snooze" extension gives Sieve the ability | |||
| to postpone the filing of an incoming into a target mailbox until a | to postpone the delivery of an incoming into a target mailbox until a | |||
| later point in time. | later point in time. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on February 8, 2021. | This Internet-Draft will expire on August 26, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Conventions Used in This Document . . . . . . . . . . . . . . 2 | 2. Conventions Used in This Document . . . . . . . . . . . . . . 2 | |||
| 3. Snooze Action . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Capability Identifier . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.1. Mailbox Argument . . . . . . . . . . . . . . . . . . . . 3 | 4. Snooze Action . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.2. Weekdays Argument . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Mailbox Argument . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.3. Times and TZID Arguments . . . . . . . . . . . . . . . . 4 | 4.2. Weekdays Argument . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.3.1. Awaken Times Examples . . . . . . . . . . . . . . . . 4 | 4.3. Times and TZID Arguments . . . . . . . . . . . . . . . . 4 | |||
| 3.4. Interaction with Extensions to the Fileinto Action . . . 5 | 4.3.1. Awaken Times Examples . . . . . . . . . . . . . . . . 5 | |||
| 3.4.1. Imap4flags Extension . . . . . . . . . . . . . . . . 6 | 4.4. Interaction with Extensions to the Fileinto Action . . . 6 | |||
| 3.4.2. Mailbox Extension . . . . . . . . . . . . . . . . . . 6 | 4.4.1. Imap4flags Extension . . . . . . . . . . . . . . . . 6 | |||
| 3.4.3. Special-Use Extension . . . . . . . . . . . . . . . . 7 | 4.4.2. Mailbox Extension . . . . . . . . . . . . . . . . . . 7 | |||
| 3.4.4. MailboxID Extension . . . . . . . . . . . . . . . . . 7 | 4.4.3. Special-Use Extension . . . . . . . . . . . . . . . . 7 | |||
| 4. Mechanics of Snoozing Messages . . . . . . . . . . . . . . . 7 | 4.4.4. MailboxID Extension . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. SMTP Future Message Release . . . . . . . . . . . . . . . 8 | ||||
| 4.2. "Snoozed" Mailbox . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5. Implementation Status . . . . . . . . . . . . . . . . . . . . 8 | 5. Implementation Status . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 9 | 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.1. Registration of Sieve Extension . . . . . . . . . . . . . 9 | 8.1. Registration of Sieve Extension . . . . . . . . . . . . . 9 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 8.2. Registration of IMAP Mailbox Name Attribute . . . . . . . 10 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 11 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 9.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 10 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | 10.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| 10.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| Appendix A. Change History (To be removed by RFC Editor before | ||||
| publication) . . . . . . . . . . . . . . . . . . . . 12 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 1. Introduction | 1. Introduction | |||
| Users are not always ready, willing, or able to read and respond to | Users are not always ready, willing, or able to read and respond to | |||
| email messages at the time of their arrival. Sometimes it is | email messages at the time of their arrival. Sometimes it is | |||
| desirable to have messages appear in a mailbox at a more convenient | desirable to have messages appear in a mailbox at a more convenient | |||
| time for the user to act upon them. | time for the user to act upon them. | |||
| This document defines a new Sieve action command "snooze" that | This document defines an extension to the Sieve language [RFC5228] | |||
| postpones filing a message into a target mailbox until a later point | that enables scripts to postpone the delivery of a message into a | |||
| in time. The capability string associated with this extension is | target mailbox until a later point in time. | |||
| "snooze". | ||||
| 2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
| Conventions for notations are as in Section 1.1 of [RFC5228], | Conventions for notations are as in Section 1.1 of [RFC5228], | |||
| including use of the "Usage:" label for the definition of action and | including use of the "Usage:" label for the definition of action and | |||
| tagged arguments syntax. | tagged arguments syntax. | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. Snooze Action | 3. Capability Identifier | |||
| Sieve implementations that implement this extension have an | ||||
| identifier of "snooze" for use with the capability mechanism. | ||||
| 4. Snooze Action | ||||
| Usage: snooze *AWAKEN-OPTIONS <times: string-list> | Usage: snooze *AWAKEN-OPTIONS <times: string-list> | |||
| The AWAKEN-OPTIONS argument is defined here in ABNF [RFC4234] syntax | The AWAKEN-OPTIONS argument is defined here in ABNF [RFC4234] syntax | |||
| so that it can be modified by other extensions. | so that it can be modified by other extensions. | |||
| AWAKEN-OPTIONS = MAILBOX / WEEKDAYS / TZID | AWAKEN-OPTIONS = MAILBOX / WEEKDAYS / TZID | |||
| ; each option MUST NOT appear more than once | ; each option MUST NOT appear more than once | |||
| ; however, per Section 2.6.2 of RFC 5228, | ; however, per Section 2.6.2 of RFC 5228, | |||
| ; the tagged arguments in AWAKEN-OPTIONS | ; the tagged arguments in AWAKEN-OPTIONS | |||
| ; may appear in any order | ; may appear in any order | |||
| MAILBOX = ":mailbox" string | MAILBOX = ":mailbox" string | |||
| WEEKDAYS = ":weekdays" string-list | WEEKDAYS = ":weekdays" string-list | |||
| TZID = ":tzid" string | TZID = ":tzid" string | |||
| The "snooze" action cancels the implicit keep and postpones delivery | ||||
| of the message into the specified mailbox at a later point in time. | ||||
| The snooze action is semantically equivalent to a delayed fileinto | The snooze action is semantically equivalent to a delayed fileinto | |||
| action (see Section 4.1 of [RFC5228]). The arguments of the snooze | action (see Section 4.1 of [RFC5228]). The arguments of the snooze | |||
| action specify when, where, and how the awakened message will be | action specify when, where, and how the awakened message will be | |||
| filed. | filed. | |||
| The process of actually snoozing and awakening (delaying the filing | A Sieve interpreter MUST implement the snooze action by delivering | |||
| of) the message is implementation specific and outside the scope of | the message to a special "snoozed" mailbox within its mailstore. | |||
| this document. However, Section 4 discusses possible methods for | IMAP and JMAP servers MUST apply the "Snoozed" (Section 8.2) | |||
| implementing the snooze action. | attribute to this mailbox. The message will reside in this special | |||
| mailbox until the prescribed awaken time at which it will be moved | ||||
| into the specified target mailbox. | ||||
| 3.1. Mailbox Argument | 4.1. Mailbox Argument | |||
| The optional :mailbox argument is used to specify the target mailbox | The optional :mailbox argument is used to specify the target mailbox | |||
| that the message will be filed into when it is awakened. It is | that the message will be filed into when it is awakened. It is | |||
| equivalent to the mailbox argument of the fileinto action (see | equivalent to the mailbox argument of the fileinto action (see | |||
| Section 4.1 of [RFC5228]). | Section 4.1 of [RFC5228]). | |||
| If :mailbox is omitted, or if the specified mailbox doesn't exist at | If :mailbox is omitted, or if the specified mailbox doesn't exist at | |||
| the time of awakening, the message will be filed into the user's main | the time of awakening, the message will be filed into the user's main | |||
| mailbox. For instance, in an implementation where the IMAP server is | mailbox. For instance, in an implementation where the IMAP server is | |||
| running scripts on behalf of the user at time of delivery, the user's | running scripts on behalf of the user at time of delivery, the user's | |||
| "INBOX" would be the implicit target for awakening messages. | "INBOX" would be the implicit target for awakening messages. | |||
| 3.2. Weekdays Argument | 4.2. Weekdays Argument | |||
| The optional :weekdays argument specifies the set of days on which | The optional :weekdays argument specifies the set of days on which | |||
| the specified set of awakening times apply. Each day of the week is | the specified set of awakening times apply. Each day of the week is | |||
| expressed as an integer between "0" and "6". "0" is Sunday, "1" is | expressed as an integer between "0" and "6". "0" is Sunday, "1" is | |||
| Monday, etc. This syntax matches that of the "weekday" date-part | Monday, etc. This syntax matches that of the "weekday" date-part | |||
| argument to the date test extension (see Section 4.2 of [RFC5260]). | argument to the date test extension (see Section 4.2 of [RFC5260]). | |||
| If :weekdays is omitted, the set of awakening times applies to every | If :weekdays is omitted, the set of awakening times applies to every | |||
| day of the week. | day of the week. | |||
| 3.3. Times and TZID Arguments | 4.3. Times and TZID Arguments | |||
| The required times argument, along with the optional :tzid argument, | The required times argument, along with the optional :tzid argument, | |||
| are used to specify when a snoozed message will be awakened. Each | are used to specify when a snoozed message will be awakened. Each | |||
| time is specified in "hh:mm:ss" format and is interpreted as the | time is specified in "hh:mm:ss" format and is interpreted as the | |||
| local time in the time zone specified by the :tzid argument. | local time in the time zone specified by the :tzid argument. | |||
| The value of the :tzid argument MUST be a time zone identifier from | The value of the :tzid argument MUST be a time zone identifier from | |||
| the IANA Time Zone Database [tzdb]. If :tzid is omitted, the time | the IANA Time Zone Database [tzdb]. If :tzid is omitted, the time | |||
| zone of the Sieve interpreter is used. | zone of the Sieve interpreter is used. | |||
| skipping to change at page 4, line 40 ¶ | skipping to change at page 5, line 5 ¶ | |||
| with no awaken times, or after the last awaken time on a given day, | with no awaken times, or after the last awaken time on a given day, | |||
| the first awaken time on the next available day is used. | the first awaken time on the next available day is used. | |||
| If the local time in the specified time zone occurs more than once | If the local time in the specified time zone occurs more than once | |||
| (daylight saving to standard time transition), the first occurrence | (daylight saving to standard time transition), the first occurrence | |||
| of the specified time value is used. If the local time in the | of the specified time value is used. If the local time in the | |||
| specified time zone does not occur (standard to daylight saving time | specified time zone does not occur (standard to daylight saving time | |||
| transition), the specified time value is interpreted using the UTC | transition), the specified time value is interpreted using the UTC | |||
| offset prior to the transition. | offset prior to the transition. | |||
| 3.3.1. Awaken Times Examples | 4.3.1. Awaken Times Examples | |||
| The following examples show, given the specified snooze action and a | The following examples show, given the specified snooze action and a | |||
| set of message arrival times, the corresponding times at which the | set of message arrival times, the corresponding times at which the | |||
| message would be awakened and filed. | message would be awakened and filed. | |||
| The following example shows awaken times rolling into the next day or | The following example shows awaken times rolling into the next day or | |||
| week. Note that 2020-07-30 falls on a Thursday. | week. Note that 2020-07-30 falls on a Thursday. | |||
| require "snooze"; | require "snooze"; | |||
| snooze :weekdays ["1", "3", "5", "2", "4"] | snooze :weekdays ["1", "3", "5", "2", "4"] | |||
| skipping to change at page 5, line 36 ¶ | skipping to change at page 6, line 4 ¶ | |||
| | 2020-11-01T06:00:00Z | --11-01T01:00:00-05 | --11-02T01:30:00-05 | | | 2020-11-01T06:00:00Z | --11-01T01:00:00-05 | --11-02T01:30:00-05 | | |||
| | 2020-11-01T07:00:00Z | --11-01T02:00:00-05 | --11-02T01:30:00-05 | | | 2020-11-01T07:00:00Z | --11-01T02:00:00-05 | --11-02T01:30:00-05 | | |||
| +----------------------+---------------------+---------------------+ | +----------------------+---------------------+---------------------+ | |||
| The following example shows awaken times falling before, during, and | The following example shows awaken times falling before, during, and | |||
| after a standard to daylight saving time transition. Note that the | after a standard to daylight saving time transition. Note that the | |||
| transition occurs at 2021-03-14T02:00:00-05. | transition occurs at 2021-03-14T02:00:00-05. | |||
| require "snooze"; | require "snooze"; | |||
| snooze :tzid "America/New_York" "02:30:00"; | snooze :tzid "America/New_York" "02:30:00"; | |||
| +----------------------+---------------------+---------------------+ | +----------------------+---------------------+---------------------+ | |||
| | Arrival (UTC) | Arrival (New York) | Awaken (New York) | | | Arrival (UTC) | Arrival (New York) | Awaken (New York) | | |||
| +----------------------+---------------------+---------------------+ | +----------------------+---------------------+---------------------+ | |||
| | 2021-03-13T06:30:00Z | --03-13T01:30:00-05 | --03-13T02:30:00-05 | | | 2021-03-13T06:30:00Z | --03-13T01:30:00-05 | --03-13T02:30:00-05 | | |||
| | 2021-03-14T06:30:00Z | --03-14T01:30:00-05 | --03-14T03:30:00-04 | | | 2021-03-14T06:30:00Z | --03-14T01:30:00-05 | --03-14T03:30:00-04 | | |||
| | 2021-03-14T07:30:00Z | --03-14T03:30:00-04 | --03-15T02:30:00-04 | | | 2021-03-14T07:30:00Z | --03-14T03:30:00-04 | --03-15T02:30:00-04 | | |||
| +----------------------+---------------------+---------------------+ | +----------------------+---------------------+---------------------+ | |||
| 3.4. Interaction with Extensions to the Fileinto Action | 4.4. Interaction with Extensions to the Fileinto Action | |||
| Some tagged arguments defined in extensions to the fileinto action | Some tagged arguments defined in extensions to the fileinto action | |||
| can be used together with the snooze action. The sections below | can be used together with the snooze action. The sections below | |||
| describe these interactions. Tagged arguments in future extensions | describe these interactions. Tagged arguments in future extensions | |||
| to the fileinto action need to describe their interaction with the | to the fileinto action need to describe their interaction with the | |||
| snooze extension, if any. | snooze extension, if any. | |||
| When any fileinto extension arguments are used with the snooze | When any fileinto extension arguments are used with the snooze | |||
| extension, the corresponding extension MUST be enabled, and the | extension, the corresponding extension MUST be enabled, and the | |||
| arguments are defined to have the same syntax, semantics, and | arguments are defined to have the same syntax, semantics, and | |||
| treatment as they do with the fileinto action. | treatment as they do with the fileinto action. | |||
| 3.4.1. Imap4flags Extension | 4.4.1. Imap4flags Extension | |||
| When the "imap4flags" [RFC5232] extension is enabled in a script, two | When the "imap4flags" [RFC5232] extension is enabled in a script, two | |||
| additional tagged arguments are added to "snooze" that allow | additional tagged arguments are added to "snooze" that allow | |||
| manipulating the set of flags on a snoozed message. | manipulating the set of flags on a snoozed message. | |||
| AWAKEN-OPTIONS /= ADDFLAGS / REMOVEFLAGS | AWAKEN-OPTIONS /= ADDFLAGS / REMOVEFLAGS | |||
| ADDFLAGS = ":addflags" string-list | ADDFLAGS = ":addflags" string-list | |||
| REMOVEFLAGS = ":removeflags" string-list | REMOVEFLAGS = ":removeflags" string-list | |||
| If the "setflag" and/or "addflag" actions have been used to store | ||||
| IMAP flags in the imap4flags internal variable, the Sieve interpreter | ||||
| MUST use the current value of the internal variable as the set of | ||||
| flags to associate with the message when storing it into the | ||||
| "snoozed" mailbox. | ||||
| The optional :addflags and :removeflags arguments are used to specify | The optional :addflags and :removeflags arguments are used to specify | |||
| which IMAP [RFC3501] flags should be added to and/or removed from the | which IMAP [RFC3501] flags should be added to and/or removed from the | |||
| set of IMAP flags present on the snoozed message at the time of | set of IMAP flags present on the snoozed message at the time of | |||
| awakening. Note that depending on the method used to snooze a | awakening. Note the set of IMAP flags present at the time of | |||
| message, the set of IMAP flags present at the time of awakening may | awakening may be the empty set. | |||
| be the empty set. | ||||
| This document doesn't dictate how the Sieve interpreter will set the | This document doesn't dictate how the Sieve interpreter will set the | |||
| IMAP flags. In particular, the Sieve interpreter may work as an IMAP | IMAP flags. In particular, the Sieve interpreter may work as an IMAP | |||
| client or may have direct access to the mailstore. | client or may have direct access to the mailstore. | |||
| The general requirements for flag handling specified in Section 2 of | The general requirements for flag handling specified in Section 2 of | |||
| [RFC5232] MUST be followed. | [RFC5232] MUST be followed. | |||
| 3.4.2. Mailbox Extension | 4.4.1.1. Example | |||
| The following example leverage the Date [RFC5260], Relational | ||||
| [RFC5231], and Imap4flags [RFC5232] extensions to snooze messages | ||||
| received after business hours until the following work day. Note | ||||
| that the message is marked as important when it is snoozed, and will | ||||
| be marked as unread when it is awakened. | ||||
| require ["snooze", "imap4flags", "date", "relational"]; | ||||
| if anyof(header :is "from" "boss@example.com", | ||||
| currentdate :is "weekday" "0", | ||||
| currentdate :is "weekday" "6", | ||||
| currentdate :value "ge" "hour" "17") { | ||||
| setflag "\\Important"; | ||||
| snooze :removeflags "\\Seen" | ||||
| :weekdays ["1". "2", "3", "4", "5"] | ||||
| :tzid "American/New_York", "09:00"; | ||||
| } | ||||
| 4.4.2. Mailbox Extension | ||||
| This document extends the definition of the ":create" [RFC5490] | This document extends the definition of the ":create" [RFC5490] | |||
| tagged argument so that it can be used with the snooze action. | tagged argument so that it can be used with the snooze action. | |||
| AWAKEN-OPTIONS /= CREATE | AWAKEN-OPTIONS /= CREATE | |||
| CREATE = ":create" | CREATE = ":create" | |||
| ; MUST NOT be appear unless MAILBOX also appears | ; MUST NOT be appear unless MAILBOX also appears | |||
| If the optional ":create" argument is specified with snooze, it | If the optional ":create" argument is specified with snooze, it | |||
| instructs the Sieve interpreter to create the target mailbox, if | instructs the Sieve interpreter to create the target mailbox, if | |||
| needed, before attempting to file the awakened message into the | needed, before attempting to file the awakened message into the | |||
| target mailbox. | target mailbox. | |||
| 3.4.3. Special-Use Extension | 4.4.3. Special-Use Extension | |||
| This document extends the definition of the ":specialuse" [RFC8579] | This document extends the definition of the ":specialuse" [RFC8579] | |||
| tagged argument so that it can be used with the snooze action. | tagged argument so that it can be used with the snooze action. | |||
| AWAKEN-OPTIONS /= SPECIAL-USE | AWAKEN-OPTIONS /= SPECIAL-USE | |||
| SPECIAL-USE = ":specialuse" string | SPECIAL-USE = ":specialuse" string | |||
| If the optional ":specialuse" argument is specified with snooze, it | If the optional ":specialuse" argument is specified with snooze, it | |||
| instructs the Sieve interpreter to check whether a mailbox exists | instructs the Sieve interpreter to check whether a mailbox exists | |||
| with the specific special-use flag assigned to it. If such a mailbox | with the specific special-use flag assigned to it. If such a mailbox | |||
| exists, the awakened message is filed into the special-use mailbox. | exists, the awakened message is filed into the special-use mailbox. | |||
| Otherwise, the awakened message is filed into the target mailbox. | Otherwise, the awakened message is filed into the target mailbox. | |||
| If both the optional ":specialuse" and ":create" arguments are | If both the optional ":specialuse" and ":create" arguments are | |||
| specified with snooze, the Sieve interpreter is instructed to create | specified with snooze, the Sieve interpreter is instructed to create | |||
| the target mailbox per Section 4.1 of [RFC8579], if needed. | the target mailbox per Section 4.1 of [RFC8579], if needed. | |||
| 3.4.4. MailboxID Extension | 4.4.4. MailboxID Extension | |||
| This document extends the definition of the ":mailboxid" | This document extends the definition of the ":mailboxid" | |||
| [I-D.gondwana-sieve-mailboxid] tagged argument so that it can be used | [I-D.ietf-extra-sieve-mailboxid] tagged argument so that it can be | |||
| with the snooze action. | used with the snooze action. | |||
| AWAKEN-OPTIONS /= MAILBOXID | AWAKEN-OPTIONS /= MAILBOXID | |||
| MAILBOXID = ":mailboxid" string | MAILBOXID = ":mailboxid" string | |||
| If the optional ":mailboxid" argument is specified with snooze, it | If the optional ":mailboxid" argument is specified with snooze, it | |||
| instructs the Sieve interpreter to check whether a mailbox exists in | instructs the Sieve interpreter to check whether a mailbox exists in | |||
| the user's personal namespace [RFC2342] with the specified MAILBOXID | the user's personal namespace [RFC2342] with the specified MAILBOXID | |||
| [RFC8474]. If such a mailbox exists, the awakened message is filed | [RFC8474]. If such a mailbox exists, the awakened message is filed | |||
| into that mailbox. Otherwise, the awakened message is filed into the | into that mailbox. Otherwise, the awakened message is filed into the | |||
| target mailbox. | target mailbox. | |||
| If both the optional ":mailboxid" and ":specialuse" arguments are | It is an error to specify both ":mailboxid" and ":specialuse" in the | |||
| specified with snooze, the Sieve interpreter is instructed to resolve | same snooze action. | |||
| the mailboxid first. If a mailbox with the specified mailboxid does | ||||
| not exist, then the process in Section 3.4.3 is followed. | ||||
| 4. Mechanics of Snoozing Messages | ||||
| The process of snoozing is implementation specific and outside the | ||||
| scope of this document. However, the sections below outline possible | ||||
| methods of snoozing and awakening a message to be filed. | ||||
| 4.1. SMTP Future Message Release | ||||
| A Sieve interpreter may implement the snooze action by leveraging the | ||||
| SMTP Future Message Release [RFC4865] submission extension. The | ||||
| message would be snoozed by queuing it for redelivery with a release | ||||
| time that corresponds to the calculated awaken time. The target | ||||
| mailbox for the awakened message would need to be encoded into the | ||||
| recipient address or into a message header field. Care MUST be taken | ||||
| to prevent the awakened message from being re-snoozed by the Sieve | ||||
| script and causing a message loop. | ||||
| 4.2. "Snoozed" Mailbox | ||||
| A Sieve interpreter may implement the snooze action by leveraging the | ||||
| user's existing mail store. The message would be snoozed by storing | ||||
| the message in a special "snoozed" mailbox and then moved into the | ||||
| target mailbox at the calculated awaken time. | ||||
| If a user's Sieve script enables the "imap4flags" [RFC5232] | ||||
| extension, and if the "setflag" and/or "addflag" actions have been | ||||
| used to store IMAP flags in the imap4flags internal variable, the | ||||
| Sieve interpreter MAY use the current value of the internal variable | ||||
| as the set of flags to associate with the message when storing it | ||||
| into the "snoozed" mailbox. Note that in this case, the ":addflag" | ||||
| and ":removeflag" tagged arguments to the snooze action operate on | ||||
| this set of flags, but MUST NOT do so until the message is awakened. | ||||
| 5. Implementation Status | 5. Implementation Status | |||
| < RFC Editor: before publication please remove this section and the | < RFC Editor: before publication please remove this section and the | |||
| reference to [RFC7942] > | reference to [RFC7942] > | |||
| This section records the status of known implementations of the | This section records the status of known implementations of the | |||
| protocol defined by this specification at the time of posting of this | protocol defined by this specification at the time of posting of this | |||
| Internet-Draft, and is based on a proposal described in [RFC7942]. | Internet-Draft, and is based on a proposal described in [RFC7942]. | |||
| The description of implementations in this section is intended to | The description of implementations in this section is intended to | |||
| skipping to change at page 9, line 20 ¶ | skipping to change at page 9, line 24 ¶ | |||
| The open source Cyrus Server [1] project is a highly scalable | The open source Cyrus Server [1] project is a highly scalable | |||
| enterprise mail system which supports Sieve email filtering at the | enterprise mail system which supports Sieve email filtering at the | |||
| point of final delivery. This production level Sieve implementation | point of final delivery. This production level Sieve implementation | |||
| supports all of the requirements described in this document. This | supports all of the requirements described in this document. This | |||
| implementation is freely distributable under a BSD style license from | implementation is freely distributable under a BSD style license from | |||
| Computing Services at Carnegie Mellon University [2]. | Computing Services at Carnegie Mellon University [2]. | |||
| 6. Security Considerations | 6. Security Considerations | |||
| Security considerations are discussed in [RFC5228], [RFC5232], | Security considerations are discussed in [RFC5228], [RFC5232], | |||
| [RFC8579], and [I-D.gondwana-sieve-mailboxid]. | [RFC8579], and [I-D.ietf-extra-sieve-mailboxid]. | |||
| It is believed that this extension doesn't introduce any additional | It is believed that this extension doesn't introduce any additional | |||
| security concerns. | security concerns. | |||
| 7. Privacy Considerations | 7. Privacy Considerations | |||
| It is believed that this extension doesn't introduce any privacy | It is believed that this extension doesn't introduce any privacy | |||
| considerations beyond those in [RFC5228]. | considerations beyond those in [RFC5228]. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| 8.1. Registration of Sieve Extension | 8.1. Registration of Sieve Extension | |||
| This document defines the following new Sieve extension to be added | ||||
| to the registry defined in Section 6.2 of [RFC5228] and located here: | ||||
| <https://www.iana.org/assignments/sieve-extensions/sieve- | ||||
| extensions.xhtml#sieve-extensions> | ||||
| IANA are requested to add a capability to the Sieve Extensions | ||||
| registry: | ||||
| To: iana@iana.org | To: iana@iana.org | |||
| Subject: Registration of new Sieve extension | Subject: Registration of new Sieve extension | |||
| Capability name: snooze | Capability name: snooze | |||
| Description: Adds the "snooze" action command to postpone delivery | ||||
| Description: Adds the "snooze" action command to postpone filing a | of a message into a target mailbox until a later point in time. | |||
| message into a target mailbox until a later point in time. | ||||
| RFC number: RFC XXXX | RFC number: RFC XXXX | |||
| Contact address: The Sieve discussion list <sieve@ietf.org> | Contact address: The Sieve discussion list <sieve@ietf.org> | |||
| 9. References | 8.2. Registration of IMAP Mailbox Name Attribute | |||
| 9.1. Normative References | ||||
| [I-D.gondwana-sieve-mailboxid] | This document defines the following new IMAP mailbox name attribute | |||
| to be added to the registry defined in Section 6.2 of [RFC8457] and | ||||
| located here: <https://www.iana.org/assignments/imap-mailbox-name- | ||||
| attributes/imap-mailbox-name-attributes.xhtml#imap-mailbox-name- | ||||
| attributes> | ||||
| IANA are requested to add an attribute to the IMAP Mailbox Name | ||||
| Attribute registry: | ||||
| To: iana@iana.org | ||||
| Subject: Registration of new IMAP Mailbox Name Attribute | ||||
| Attribute name: Snoozed | ||||
| Description: Messages that have been snoozed. | ||||
| Reference: RFC XXXX | ||||
| 9. Acknowledgments | ||||
| The authors would like to thank the following individuals for | ||||
| contributing their ideas and support for writing this specification: | ||||
| Ned Freed, Barry Leiba, and Alexey Melnikov. | ||||
| 10. References | ||||
| 10.1. Normative References | ||||
| [I-D.ietf-extra-sieve-mailboxid] | ||||
| Gondwana, B., "Sieve Email Filtering: delivery by | Gondwana, B., "Sieve Email Filtering: delivery by | |||
| mailboxid", draft-gondwana-sieve-mailboxid-02 (work in | mailboxid", draft-ietf-extra-sieve-mailboxid-06 (work in | |||
| progress), June 2020. | progress), December 2020. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2342] Gahrns, M. and C. Newman, "IMAP4 Namespace", RFC 2342, | [RFC2342] Gahrns, M. and C. Newman, "IMAP4 Namespace", RFC 2342, | |||
| DOI 10.17487/RFC2342, May 1998, | DOI 10.17487/RFC2342, May 1998, | |||
| <https://www.rfc-editor.org/info/rfc2342>. | <https://www.rfc-editor.org/info/rfc2342>. | |||
| skipping to change at page 10, line 45 ¶ | skipping to change at page 11, line 34 ¶ | |||
| [RFC5490] Melnikov, A., "The Sieve Mail-Filtering Language -- | [RFC5490] Melnikov, A., "The Sieve Mail-Filtering Language -- | |||
| Extensions for Checking Mailbox Status and Accessing | Extensions for Checking Mailbox Status and Accessing | |||
| Mailbox Metadata", RFC 5490, DOI 10.17487/RFC5490, March | Mailbox Metadata", RFC 5490, DOI 10.17487/RFC5490, March | |||
| 2009, <https://www.rfc-editor.org/info/rfc5490>. | 2009, <https://www.rfc-editor.org/info/rfc5490>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8457] Leiba, B., Ed., "IMAP "$Important" Keyword and | ||||
| "\Important" Special-Use Attribute", RFC 8457, | ||||
| DOI 10.17487/RFC8457, September 2018, | ||||
| <https://www.rfc-editor.org/info/rfc8457>. | ||||
| [RFC8474] Gondwana, B., Ed., "IMAP Extension for Object | [RFC8474] Gondwana, B., Ed., "IMAP Extension for Object | |||
| Identifiers", RFC 8474, DOI 10.17487/RFC8474, September | Identifiers", RFC 8474, DOI 10.17487/RFC8474, September | |||
| 2018, <https://www.rfc-editor.org/info/rfc8474>. | 2018, <https://www.rfc-editor.org/info/rfc8474>. | |||
| [RFC8579] Bosch, S., "Sieve Email Filtering: Delivering to Special- | [RFC8579] Bosch, S., "Sieve Email Filtering: Delivering to Special- | |||
| Use Mailboxes", RFC 8579, DOI 10.17487/RFC8579, May 2019, | Use Mailboxes", RFC 8579, DOI 10.17487/RFC8579, May 2019, | |||
| <https://www.rfc-editor.org/info/rfc8579>. | <https://www.rfc-editor.org/info/rfc8579>. | |||
| [tzdb] Internet Assigned Numbers Authority, "Time Zone Database", | [tzdb] Internet Assigned Numbers Authority, "Time Zone Database", | |||
| <https://www.iana.org/time-zones>. | <https://www.iana.org/time-zones>. | |||
| 9.2. Informative References | 10.2. Informative References | |||
| [RFC4865] White, G. and G. Vaudreuil, "SMTP Submission Service | [RFC5231] Segmuller, W. and B. Leiba, "Sieve Email Filtering: | |||
| Extension for Future Message Release", RFC 4865, | Relational Extension", RFC 5231, DOI 10.17487/RFC5231, | |||
| DOI 10.17487/RFC4865, May 2007, | January 2008, <https://www.rfc-editor.org/info/rfc5231>. | |||
| <https://www.rfc-editor.org/info/rfc4865>. | ||||
| [RFC5260] Freed, N., "Sieve Email Filtering: Date and Index | [RFC5260] Freed, N., "Sieve Email Filtering: Date and Index | |||
| Extensions", RFC 5260, DOI 10.17487/RFC5260, July 2008, | Extensions", RFC 5260, DOI 10.17487/RFC5260, July 2008, | |||
| <https://www.rfc-editor.org/info/rfc5260>. | <https://www.rfc-editor.org/info/rfc5260>. | |||
| [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | |||
| Code: The Implementation Status Section", BCP 205, | Code: The Implementation Status Section", BCP 205, | |||
| RFC 7942, DOI 10.17487/RFC7942, July 2016, | RFC 7942, DOI 10.17487/RFC7942, July 2016, | |||
| <https://www.rfc-editor.org/info/rfc7942>. | <https://www.rfc-editor.org/info/rfc7942>. | |||
| 9.3. URIs | 10.3. URIs | |||
| [1] http://www.cyrusimap.org/ | [1] http://www.cyrusimap.org/ | |||
| [2] http://www.cmu.edu/computing/ | [2] http://www.cmu.edu/computing/ | |||
| Authors' Addresses | Appendix A. Change History (To be removed by RFC Editor before | |||
| publication) | ||||
| Changes since draft-ietf-extra-sieve-snooze-00: | ||||
| o Disallow both :mailboxid and :specialuse in the same snooze | ||||
| action. | ||||
| o Updated :mailboxid reference to draft-ietf-extra-sieve-mailboxid | ||||
| o Specified that snooze cancels implicit keep. | ||||
| o Specified that implementations MUST use a "snoozed" mailbox. | ||||
| o Added registration of \Snoozed Special-Use Attribute. | ||||
| o Added example of manipulating IMAP flags at both snooze time and | ||||
| awaken time. | ||||
| o Miscellaneous editorial changes. | ||||
| Authors' Addresses | ||||
| Kenneth Murchison | Kenneth Murchison | |||
| Fastmail US LLC | Fastmail US LLC | |||
| 1429 Walnut Street - Suite 1201 | 1429 Walnut Street - Suite 1201 | |||
| Philadelphia, PA 19102 | Philadelphia, PA 19102 | |||
| USA | USA | |||
| Email: murch@fastmailteam.com | Email: murch@fastmailteam.com | |||
| Ricardo Signes | Ricardo Signes | |||
| Fastmail US LLC | Fastmail US LLC | |||
| End of changes. 38 change blocks. | ||||
| 101 lines changed or deleted | 159 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||