RFC 8579 PROPOSED STANDARD EMAIL · SIEVE · IMAP

Sieve Special-Use: Sieve Email Filtering: Delivering to Special-Use Mailboxes

Lets a Sieve mail filter file messages into the Junk, Sent or Archive folder by its job rather than its name.

On rfc-editor.org ↗
PUBLISHED
May 2019
AUTHORS
S. Bosch
STREAM
IETF
CAPABILITY STRING
special-use
NEW TEST
specialuse_exists
NEW FILEINTO ARGUMENT
:specialuse
MAILBOX SCOPE
User's personal namespace only
DOI
10.17487/RFC8579
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                          S. Bosch
Request for Comments: 8579                               Open Xchange Oy
Category: Standards Track                                       May 2019
ISSN: 2070-1721


       Sieve Email Filtering: Delivering to Special-Use Mailboxes

Abstract

   The SPECIAL-USE capability of the IMAP protocol (RFC 6154) allows
   clients to identify special-use mailboxes, e.g., where draft or sent
   messages should be put.  This simplifies client configuration.  In
   contrast, the Sieve mail filtering language (RFC 5228) currently has
   no such capability.  This memo defines a Sieve extension that fills
   this gap: it adds a test for checking whether a special-use attribute
   is assigned for a particular mailbox or any mailbox, and it adds the
   ability to file messages into a mailbox identified solely by a
   special-use attribute.

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/rfc8579.

Copyright Notice

   Copyright (c) 2019 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
   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3
   3.  Test "specialuse_exists"  . . . . . . . . . . . . . . . . . .   3
     3.1.  Equivalent IMAP Operations  . . . . . . . . . . . . . . .   4
   4.  ":specialuse" Argument to "fileinto" Command  . . . . . . . .   5
     4.1.  Mailboxes Created Implicitly by the "fileinto" Command  .   6
     4.2.  Equivalent IMAP Operations  . . . . . . . . . . . . . . .   7
   5.  Sieve Capability Strings  . . . . . . . . . . . . . . . . . .   8
   6.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .   8
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .   9
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  10
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  10
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .  10
     9.2.  Informative References  . . . . . . . . . . . . . . . . .  11
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  11
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  12

1.  Introduction

   Commonly, several mailboxes in an IMAP message store [IMAP] have a
   special use.  For example, there can be a special-use mailbox for
   storing the user's draft messages, for keeping copies of sent
   messages, and for collecting spam messages that were classified as
   such at delivery.  The SPECIAL-USE capability [SPECIAL-USE] of the
   IMAP protocol defines mailbox attributes that identify these special
   mailboxes explicitly to the client.  This way, client configuration
   is simplified significantly.  Using the CREATE-SPECIAL-USE capability
   [SPECIAL-USE], IMAP clients can also configure these attributes
   dynamically based on user preference.

   Unlike the IMAP protocol, the Sieve mail filtering language [SIEVE]
   currently cannot freely access these special-use mailbox attributes.
   Particularly, the Sieve interpreter has no means to identify a
   mailbox with a particular special-use attribute.  This would be very
   useful, for example, to find the user's "Spam" mailbox at delivery.

   In Sieve, limited access to the special-use attributes is provided
   using the "mboxmetadata" extension [SIEVE-MAILBOX], which allows
   testing for the presence of a special-use attribute in the "/private/
   specialuse" IMAP METADATA [IMAP-METADATA] entry of a mailbox.  Still,
   not all implementers will be willing to add the complexity of the
   IMAP METADATA capability just to provide access to special-use
   attributes to the Sieve interpreter.

   This document defines an extension to the Sieve mail filtering
   language that adds the ability to freely access mailbox special-use
   attributes.  It adds a test called "specialuse_exists" that checks 1)
   whether a special-use attribute is assigned for a particular mailbox
   or 2) whether any of the user's personal mailboxes have a special-use
   attribute assigned.  It also adds the ability to file messages into a
   personal mailbox identified by a particular special-use attribute
   rather than the mailbox's name.  This is achieved using the new
   ":specialuse" argument for the "fileinto" command [SIEVE].

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 [KEYWORDS] [KEYWORDS-UPD] when, and only when, they appear in
   all capitals, as shown here.

   Conventions for notations are as described in Section 1.1 of [SIEVE],
   including use of the "Usage:" label for the definition of the action
   and the syntax of tagged arguments.

   In [IMAP] examples, "C:" and "S:" indicate lines sent by the client
   and server, respectively.  If such lines are wrapped without a new
   "C:" or "S:" label, then the wrapping is for editorial clarity and is
   not part of the command.

3.  Test "specialuse_exists"

   Usage:  specialuse_exists [<mailbox: string>]
                             <special-use-attrs: string-list>

   If the "mailbox" string argument is omitted, the "specialuse_exists"
   test yields "true" if all of the following statements are true for
   each of the special-use attributes listed in the special-use-attrs
   argument:

   a.  At least one mailbox exists in the user's personal namespace
       [NAMESPACE] that has that particular special-use attribute
       assigned.

   b.  That mailbox allows the user in whose context the Sieve script
       runs to "deliver" messages into it.

   If the mailbox argument is specified, the "specialuse_exists" test
   yields "true" if all of the following statements are true:

   a.  The indicated mailbox exists.

   b.  That mailbox allows the user in whose context the Sieve script
       runs to "deliver" messages into it.

   c.  That mailbox has all of the special-use attributes listed in the
       special-use-attrs argument assigned to it.

   Refer to the specification of the "mailboxexists" test in Section 3.1
   of RFC 5490 [SIEVE-MAILBOX] for a definition of when "delivery" of
   messages into a mailbox is deemed possible.

3.1.  Equivalent IMAP Operations

   To clarify, the following IMAP protocol examples show a sequence of
   [IMAP] commands that a client could send to perform an assessment
   without Sieve that is equivalent to the "specialuse_exists" test.

   First, the client queries which namespaces are available using the
   NAMESPACE command [NAMESPACE]:

   C: A01 NAMESPACE
   S: * NAMESPACE (("INBOX/" "/")("Archive/" "/")) NIL (("Public/" "/"))
   S: A01 OK NAMESPACE command completed

   Subsequently, when no particular mailbox is of interest (i.e., the
   "specialuse_exists" test has no mailbox argument), the client lists
   all mailboxes with special-use attributes in the two returned
   personal namespaces (this extended LIST command requires the LIST-
   EXTENDED IMAP capability [LIST-EXTENDED]):

   C: A02 LIST (SPECIAL-USE) "" ("INBOX/*" "Archive/*")
       RETURN (SPECIAL-USE)
   S: * LIST (\Drafts) "/" INBOX/Drafts
   S: * LIST (\Trash) "/" INBOX/Trash
   S: * LIST (\Sent) "/" INBOX/Sent
   S: * LIST (\Archive) "/" Archive/Default
   S: A02 OK LIST command completed

   Finally, using the MYRIGHTS command [IMAP-ACL], the client determines
   the access rights it has for the mailbox or mailboxes that have all
   the requested attributes assigned.  This way, it can determine
   whether messages can be saved to any of those.  In this example, an
   "\Archive" special-use mailbox is sought:

   C: A03 MYRIGHTS Archive/Default
   S: * MYRIGHTS Archive/Default lrwsip
   S: A03 OK Myrights completed

   The MYRIGHTS response indicates that the user has "insert" rights
   [IMAP-ACL] for the "Archive/Default" mailbox, meaning that the client
   can deliver (APPEND) messages to that mailbox and that the Sieve
   "specialuse_exists" test would yield "true" in this case.

4.  ":specialuse" Argument to "fileinto" Command

   Usage:  fileinto [:specialuse <special-use-attr: string>]
                    <mailbox: string>

   Normally, the "fileinto" command delivers the message in the mailbox
   specified using its positional mailbox argument, which is the name of
   the mailbox.  However, if the optional ":specialuse" argument is also
   specified, the "fileinto" command first checks whether a mailbox
   exists in the user's personal namespace [NAMESPACE] with the
   specified special-use attribute assigned to it.  If that is the case,
   that special-use mailbox is used for delivery instead.  If there is
   no such mailbox or if the specified special-use attribute is unknown
   to the implementation in general, the "fileinto" action proceeds as
   it would without the ":specialuse" argument.

   Summarizing, if the ":specialuse" argument is specified, the
   "fileinto" command deals with two mailboxes that may or may not exist
   and may, in fact, be equal:

   o  A special-use mailbox in the user's personal namespace, which has
      at least the special-use attribute specified with the
      ":specialuse" argument assigned to it.  The name for this mailbox
      is not relevant here; it is only identified by the assigned
      special-use attribute.

   o  The default mailbox named by the positional string argument of the
      "fileinto" command, which is used when the special-use mailbox is
      not found.

   The special-use attribute specified with the ":specialuse" argument
   conforms to the "use-attr" syntax described in Section 6 of RFC 6154
   [SPECIAL-USE].  Implementations SHOULD handle an invalid special-use
   attribute in the same way as an invalid mailbox name is handled.  The
   string parameter of the ":specialuse" argument is not a constant
   string, which means that variable substitutions are allowed when the
   "variables" extension [VARIABLES] is active.  In that case, the
   syntax of the special-use attribute is only verified at runtime.

   If neither the special-use mailbox nor the default mailbox exists,
   the "fileinto" action MUST proceed exactly as it does in case the
   ":specialuse" argument is absent and the mailbox named by its
   positional argument does not exist.  The various options for handling
   this situation are described in Section 4.1 of RFC 5228 [SIEVE].

   More than one mailbox in the user's personal namespace can have a
   particular special-use attribute assigned.  If one of those mailboxes
   is, in fact, the default mailbox named by the positional string
   argument of the "fileinto" command, that mailbox MUST be used for
   delivery.  If the default mailbox is not one of the options, the
   mailbox that is chosen for delivery is implementation defined.
   However, while the set of mailboxes to which the involved special-use
   attribute are assigned remains unchanged, implementations SHOULD
   ensure that the mailbox choice is made consistently, so that the same
   mailbox is used every time.  Conversely, the chosen mailbox MAY
   change once the assignments of the special-use attribute that are
   relevant for the mailbox choice are changed (usually by user
   interaction).

   If delivery to the special-use mailbox fails for reasons not relating
   to its existence, the Sieve interpreter MUST NOT subsequently attempt
   delivery in the indicated default mailbox as a fallback.  Instead, it
   MUST proceed exactly as it does in case the ":specialuse" argument is
   absent and delivery to the mailbox named by its positional argument
   fails.  This prevents the situation where messages are unexpectedly
   spread over two mailboxes in case transient or intermittent delivery
   failures occur.

4.1.  Mailboxes Created Implicitly by the "fileinto" Command

   Before attempting to deliver the message into the specified mailbox,
   the "fileinto" command may implicitly create the mailbox if it does
   not exist (see Section 4.1 of RFC 5228 [SIEVE]).  This optional
   behavior can be requested explicitly using the "mailbox" extension
   [SIEVE-MAILBOX], which adds the optional ":create" argument to the
   "fileinto" command.  If the ":create" argument is specified with
   "fileinto", it instructs the Sieve interpreter to unconditionally
   create the specified mailbox if needed.  Note that the ":create"
   argument has no effect when the implicit creation of mailboxes for
   delivery is the default behavior.

   When the ":specialuse" argument is present, this behavior does not
   change; the Sieve interpreter will implicitly create the specified
   default mailbox if needed.  This need arises when both the special-
   use mailbox and the default mailbox are not found.

   If the server implementation supports the CREATE-SPECIAL-USE
   capability [SPECIAL-USE] for IMAP (i.e., it allows assigning special-
   use attributes to new mailboxes), it SHOULD assign the special-use
   attribute specified with the ":specialuse" argument to the newly
   created mailbox.

4.2.  Equivalent IMAP Operations

   To clarify, the following IMAP protocol examples show a sequence of
   [IMAP] commands that a client could send to perform an action without
   Sieve that is equivalent to the "fileinto" action with the
   ":specialuse" argument.  The following Sieve script is assumed:

   require "fileinto";
   require "special-use";

   fileinto :specialuse "\\Archive" "INBOX/Archive";

   First, the client proceeds as in Section 3.1 to find out whether the
   indicated special-use attribute is assigned to any mailbox in the
   user's personal namespace.  If a matching special-use mailbox is
   found, the message is delivered there using the IMAP APPEND command.
   If no matching special-use mailbox is found, the client attempts to
   deliver the message to the indicated default mailbox:

   C: A04 APPEND INBOX/Archive {309}
   S: A04 NO [TRYCREATE] Mailbox does not exist: INBOX/Archive

   In this example, the default mailbox does not exist either.  In that
   case, the client MAY create the default mailbox and assign the
   indicated special-use attribute to it:

   C: A05 CREATE INBOX/Archive (USE (\Archive))
   S: A05 OK Create completed
   Finally, the client completes the delivery:

   C: A06 APPEND INBOX/Archive {309}
   S: + OK
   C: Date: Wed, 18 Jul 2018 22:00:09 +0200
   C: From: mooch@owatagu.siam.example
   C: To: Fred Foobar <foobar@Blurdybloop.example>
   C: Subject: afternoon meeting
   C: Message-Id: <Q234234-01012222@owatagu.siam.example>
   C: MIME-Version: 1.0
   C: Content-Type: text/plain; charset=UTF-8
   C:
   C: Hi Fred, do you think we can meet again at 3:30 tomorrow?
   C:
   S: A06 OK [APPENDUID 1533375901 2312] Append completed.

5.  Sieve Capability Strings

   A Sieve implementation that defines the "specialuse_exists" test and
   the ":specialuse" argument for the "fileinto" command will advertise
   the capability string "special-use".

6.  Examples

   The following example saves the message in the mailbox where messages
   deemed to be junk mail are held.  This mailbox is identified using
   the "\Junk" special-use attribute.  If no mailbox has this attribute
   assigned, the message is filed into the mailbox named "Spam".  If the
   mailbox named "Spam" does not exist either, the result of this Sieve
   script is implementation dependent, e.g., it may trigger an error or
   the mailbox may be created implicitly.

   require "fileinto";
   require "special-use";

   fileinto :specialuse "\\Junk" "Spam";

   The following very similar example explicitly handles the case in
   which neither a "\Junk" special-use mailbox nor the "Spam" mailbox
   exists.  In that case, a mailbox called "Spam" is created, and the
   message is stored there.  Additionally, the "\Junk" special-use
   attribute may be assigned to it.

   require "fileinto";
   require "special-use";
   require "mailbox";

   fileinto :specialuse "\\Junk" :create "Spam";

   The following example is used in a Sieve script that is triggered
   from an IMAP event rather than at message delivery [IMAPSIEVE].  This
   Sieve script redirects messages to an automated recipient that
   processes junk mail if those messages are copied or moved into a
   mailbox that has the "\Junk" special-use attribute assigned.

   require "imapsieve";
   require "special-use";
   require "environment";
   require "variables";

   if environment :contains "imap.mailbox" "*" {
       set "mailbox" "${1}";
   }

   if allof(
       environment "imap.cause" "COPY",
       specialuse_exists "${mailbox}" "\\Junk") {
       redirect "spam-report@example.org";
   }

7.  Security Considerations

   Security considerations are discussed in [SIEVE], [VARIABLES], and
   [SPECIAL-USE].  It is believed that this extension does not introduce
   any additional security concerns.

   Note that this specification explicitly restricts the special-use
   mailbox to the user's personal namespace.  First, this avoids the
   need to search the entire mail storage for mailboxes that have a
   particular special-use attribute assigned.  This could put undue load
   on the system, while shared special-use mailboxes are deemed of
   limited use with the currently defined special-use attributes.
   Secondly, it prevents security concerns with shared mailboxes that
   have special-use attributes assigned that apply to all users.
   Searching the entire mail storage for special-use mailboxes could
   lead to messages unexpectedly or even maliciously being filed to
   shared mailboxes.

   This restriction could be lifted for particular future special-use
   attributes, but such new attributes should have a clear application
   for shared mailboxes, and the security concerns should be considered
   carefully.

8.  IANA Considerations

   IANA has registered the Sieve extension specified in this document in
   the "Sieve Extensions" registry at <https://www.iana.org/assignments/
   sieve-extensions>:

      Capability name: special-use
      Description:     adds a test for checking whether an IMAP
                       special-use attribute is assigned for a
                       particular mailbox or any mailbox; also adds
                       the ability to file messages into a mailbox
                       identified solely by a special-use attribute.
      RFC number:      RFC 8579
      Contact address: Sieve discussion list <sieve@ietf.org>

9.  References

9.1.  Normative References

   [IMAP-METADATA]
              Daboo, C., "The IMAP METADATA Extension", RFC 5464,
              DOI 10.17487/RFC5464, February 2009,
              <https://www.rfc-editor.org/info/rfc5464>.

   [KEYWORDS] 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>.

   [KEYWORDS-UPD]
              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>.

   [NAMESPACE]
              Gahrns, M. and C. Newman, "IMAP4 Namespace", RFC 2342,
              DOI 10.17487/RFC2342, May 1998,
              <https://www.rfc-editor.org/info/rfc2342>.

   [SIEVE]    Guenther, P., Ed. and T. Showalter, Ed., "Sieve: An Email
              Filtering Language", RFC 5228, DOI 10.17487/RFC5228,
              January 2008, <https://www.rfc-editor.org/info/rfc5228>.

   [SIEVE-MAILBOX]
              Melnikov, A., "The Sieve Mail-Filtering Language --
              Extensions for Checking Mailbox Status and Accessing
              Mailbox Metadata", RFC 5490, DOI 10.17487/RFC5490, March
              2009, <https://www.rfc-editor.org/info/rfc5490>.

   [SPECIAL-USE]
              Leiba, B. and J. Nicolson, "IMAP LIST Extension for
              Special-Use Mailboxes", RFC 6154, DOI 10.17487/RFC6154,
              March 2011, <https://www.rfc-editor.org/info/rfc6154>.

   [VARIABLES]
              Homme, K., "Sieve Email Filtering: Variables Extension",
              RFC 5229, DOI 10.17487/RFC5229, January 2008,
              <https://www.rfc-editor.org/info/rfc5229>.

9.2.  Informative References

   [IMAP]     Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
              4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003,
              <https://www.rfc-editor.org/info/rfc3501>.

   [IMAP-ACL] Melnikov, A., "IMAP4 Access Control List (ACL) Extension",
              RFC 4314, DOI 10.17487/RFC4314, December 2005,
              <https://www.rfc-editor.org/info/rfc4314>.

   [IMAPSIEVE]
              Leiba, B., "Support for Internet Message Access Protocol
              (IMAP) Events in Sieve", RFC 6785, DOI 10.17487/RFC6785,
              November 2012, <https://www.rfc-editor.org/info/rfc6785>.

   [LIST-EXTENDED]
              Leiba, B. and A. Melnikov, "Internet Message Access
              Protocol version 4 - LIST Command Extensions", RFC 5258,
              DOI 10.17487/RFC5258, June 2008,
              <https://www.rfc-editor.org/info/rfc5258>.

Acknowledgements

   Thanks to Stan Kalisch, Barry Leiba, Alexey Melnikov, Ken Murchison,
   and Ned Freed for reviews and suggestions.

   Thanks to the authors of RFC 5490 [SIEVE-MAILBOX], from which some
   descriptive text in this document is borrowed.

Author's Address

   Stephan Bosch
   Open Xchange Oy
   Lars Sonckin kaari 12
   Espoo  02600
   Finland

   Email: stephan.bosch@open-xchange.com

AI ELI5

On this page
PROBLEMIMAP clients can find special-use mailboxes such as drafts, sent or spam by attribute, but the Sieve filtering language had no way to do the same.
MECHANISMThe "special-use" extension adds a specialuse_exists test and a :specialuse argument to fileinto, so a script can name a mailbox by its special-use attribute and fall back to a default mailbox name.
WHY IT MATTERSScripts can deliver to the user's Junk or Archive mailbox without knowing what it is called, and without needing the IMAP METADATA capability.

§1Why Sieve Needs Special-Use Mailboxes

Many IMAP mailboxes have a special use, such as holding drafts, copies of sent messages, or spam. The IMAP SPECIAL-USE capability (RFC 6154) gives these mailboxes attributes so a client can find them without guessing names. That simplifies client configuration.

The Sieve mail filtering language (RFC 5228) had no such access. A Sieve script could not, for example, find the user's spam mailbox at delivery. Limited access existed through the "mboxmetadata" extension (RFC 5490), but that needs the IMAP METADATA capability, which not every implementer wants to add just for this.

Your mail app knows which folder is the Junk folder, but the mail sorting robot did not. This memo teaches the robot to find folders by their job.

§3The specialuse_exists Test

The new test has the form specialuse_exists [<mailbox>] <special-use-attrs>. Without a mailbox argument, it is true when, for every listed attribute, at least one mailbox in the user's personal namespace has that attribute and allows the user to deliver messages into it.

With a mailbox argument, it is true when that mailbox exists, allows delivery, and has all of the listed attributes assigned. The definition of when delivery is possible comes from the "mailboxexists" test in RFC 5490.

The RFC also shows the equivalent IMAP steps: a NAMESPACE command, an extended LIST with SPECIAL-USE, and MYRIGHTS to confirm the user has insert rights.

The test asks: is there a folder that does this job, and may I put mail in it? If yes, the answer is true.

§4The :specialuse Argument to fileinto

The fileinto command gains an optional :specialuse argument: fileinto [:specialuse <special-use-attr>] <mailbox>. If a mailbox in the user's personal namespace has that attribute, the message goes there. Otherwise, or if the attribute is unknown to the implementation, fileinto behaves as it would without the argument and uses the named default mailbox.

If several mailboxes have the attribute and one of them is the default mailbox, that one MUST be used. If not, the choice is implementation defined, but implementations SHOULD choose consistently while the attribute assignments are unchanged.

If delivery to the special-use mailbox fails for reasons other than its not existing, the interpreter MUST NOT fall back to the default mailbox. This prevents messages from being spread over two mailboxes after a transient failure.

The attribute string may contain variables when the "variables" extension is active, in which case its syntax is checked only at runtime.

The filter first looks for the folder with the right job. If there is none, it uses the folder name you gave it. If the right folder is there but broken, it does not switch to the backup, so your mail never gets split up.

§4.1Implicit Creation of Mailboxes

The fileinto command may implicitly create a missing mailbox, and the "mailbox" extension's :create argument can request this explicitly. With :specialuse this does not change: if neither the special-use mailbox nor the default mailbox is found, the default mailbox is created if needed.

If the server supports the CREATE-SPECIAL-USE capability, it SHOULD assign the requested special-use attribute to the newly created mailbox.

If neither folder exists, the filter makes the one you named and, if it can, gives it the right job label.

§6Examples

The first example files mail into the mailbox with the \Junk attribute, and if none exists, into a mailbox named "Spam". If "Spam" does not exist either, the result is implementation dependent.

The second example adds the "mailbox" extension and :create, so "Spam" is created when neither mailbox exists, and the \Junk attribute may be assigned to it.

The third example runs from an IMAP event (RFC 6785) rather than at delivery. It redirects a message to an automated recipient when it is copied into a mailbox that has the \Junk attribute, using specialuse_exists with a variable holding the mailbox name.

One example says: put it in the Junk-job folder, or in a folder called Spam if there is none. Another one sends a copy to a spam-checking helper when you drop mail into the Junk folder.

JUNK EXAMPLE FROM THE RFC
Filing into the Junk mailbox
require "fileinto";
require "special-use";

fileinto :specialuse "\\Junk" "Spam";

§7Security and Scope Limits

The RFC believes the extension adds no new security concerns beyond those of Sieve, the variables extension and SPECIAL-USE. It does deliberately restrict the special-use mailbox to the user's personal namespace.

There are two reasons. Searching all mail storage for a particular attribute could put undue load on the system, and shared special-use mailboxes are deemed of limited use with the currently defined attributes. It also prevents messages from being unexpectedly or even maliciously filed into shared mailboxes whose attributes apply to all users. The restriction could be lifted for future attributes with a clear shared use, after careful consideration of the security concerns.

The filter only looks in your own folders, never in folders shared with other people, so your mail cannot be sent somewhere surprising.

§5Capability String and IANA

An implementation that provides the test and the argument advertises the Sieve capability string special-use, and scripts load it with require "special-use". IANA registered the extension in the Sieve Extensions registry, with the Sieve discussion list as the contact address.

Each Sieve add-on has a name tag. This one is called special-use, and scripts say its name to switch it on.

§8References