One document matched: draft-ietf-sieve-autoreply-00.xml


<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC5228    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5228.xml'>
<!ENTITY RFC5229    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5229.xml'>
<!ENTITY RFC5230    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5230.xml'>
<!ENTITY RFC5435    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5435.xml'>
<!ENTITY notifypres PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-sieve-notify-presence-00.xml'>
<!ENTITY vactime    PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-sieve-vacation-seconds-00.xml'>
<!ENTITY extlists   PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-ietf-sieve-external-lists-02.xml'>
]>

<?rfc toc="yes" ?>
<?rfc tocompact="no" ?>
<?rfc tocindent="no" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no"?>

<rfc category="info"
     ipr="trust200902"
     docName="draft-ietf-sieve-autoreply-00">

<front>
  <title abbrev="Auto Response">
  Sieve Email Filtering: Use of Presence Information with Auto Responder functionality
  </title>
  
  <author initials="R." surname="George" fullname="Robins George">
    <organization abbrev="Huawei Technologies">Huawei Technologies </organization>
    <address>
      <postal>
        <street> Huawei Base, Bantian, Longgang District </street>
        <city> Shenzhen </city> 
        <region> Guangdong </region>
        <code> 518129 </code> 
        <country> P. R. China</country> 
      </postal>
      <phone>+86-755-28788314</phone>
      <email>robinsg@huawei.com</email>
    </address>
  </author>

  <author initials='B.' surname="Leiba" fullname='Barry Leiba'>
    <organization>Huawei Technologies</organization>
    <address>
      <phone>+1 646 827 0648</phone>
      <email>barryleiba@computer.org</email>
      <uri>http://internetmessagingtechnology.org/</uri>
    </address>
  </author>

  <author initials="A." surname="Melnikov" fullname="Alexey Melnikov">
    <organization abbrev="Isode Limited">Isode Limited</organization>
    <address>
      <postal>
        <street>5 Castle Business Village, 36 Station Road</street>
        <city>Hampton</city> 
        <region>Middlesex</region>
        <code>TW12 2BX</code> 
        <country>UK</country> 
      </postal>
      <email>Alexey.Melnikov@isode.com</email>
      <uri>http://www.melnikov.ca/</uri>
    </address>
  </author>

  <date year="2010" />
  <area>APP</area>
  <workgroup>Sieve working group</workgroup>

  <abstract>
    <t>
      This document describes how the Sieve email filtering language, along with
      some extensions, can be used to create automatic replies to incoming
      electronic mail messages based on the address book and
      presence information of the recipient.
    </t>
  </abstract>
</front>


<middle>
  <section anchor="intro" title="Introduction">
    <t>
      This document describes how the Sieve email filtering language <xref target='RFC5228'/>,
      along with some extensions
      <xref target='RFC5230'/> <!-- Vacation -->
      <xref target='RFC5435'/> <!-- Notify -->
      <xref target='I-D.ietf-sieve-external-lists'/> <!-- extlists -->
      <xref target='I-D.ietf-sieve-notify-presence'/> <!-- notifypres -->
      <xref target='I-D.ietf-sieve-vacation-seconds'/> <!-- vactime -->
      can be used to generate automatic replies to incoming
      electronic mail messages based on the presence information of the recipient.
      This can be used, for example, to inform the sender that
      messages will not be answered immediately because the recipient is busy or away.
    </t>

    <t>
      The auto-reply message can additionally be based
      on information about the sender from the recipient's address book,
      sub-lists therefrom, or other lists available to the recipient,
      so that different senders might get different responses.
      The recipient can create separate rules for friends, family members, colleagues,
      and so on.
    </t>

    <t>
      This can be used in mail filtering software, email-based information services,
      and other automatic responder situations.
      There are many programs currently in use that automatically respond to email.
      Some of them send many useless or unwanted responses,
      or send responses to inappropriate addresses.
      The mechanism described herein will help to avoid those problems
      (but see the discussion in <xref target="security" />).
      Implementations need to take care of tracking previous messages received from the
      same sender and they will start or stop sending responses as the presence status of
      the recipient changes.
    </t>
    
    <t>
      <cref anchor="Barry's question">
        One thing this makes me think of is whether we want
        the ability to extract information from an external list.
        For instance, it'd be nice to be able to go into the recipient's
        address book for the sender's real name, or for a personalized message
        for the sender.  Not all lists will support this; should it be possible,
        for lists that do?
      </cref>
    </t>
  </section>

  <section title="How To Create Auto Replies">
    <t>
      When an email message arrives, the Sieve script can use the notify_method_capability
      of the Notify extension <xref target='RFC5435'/> to check the recipient's
      presence information.
      The Notify-presence extension <xref target='I-D.ietf-sieve-notify-presence'/>
      makes additional presence, such as "away" and "do not disturb" status, available.
      The script can use the External-lists extension
      <xref target='I-D.ietf-sieve-external-lists'/>
      to look the sender up in the recipient's address book or other list.
      If the information retrieved warrants an auto-reply message,
      the message can then be composed based on that information.
    </t>

    <t>
      The Vacation extension <xref target='RFC5230'/> provides an easy way to send
      the auto-reply message to the sender, as it automatically keeps track of
      the automatic replies and attempts to avoid excessive messages and mail loops.
      The Vacation-seconds extension <xref target='I-D.ietf-sieve-vacation-seconds'/>
      allows auto-replies to be sent this way more frequently than once per day,
      when that's appropriate.
      (Alternatively, the script can use the Notify extension,<xref target='RFC5435'/>
      and it can use that to send a notification by a means other than email.)
    </t>

    <t>
      Personal and Group Responders can refuse to generate responses
      except to known correspondents or addresses otherwise known to the recipient.
      Such responders can also generate different kinds of
      responses for "trusted" vs "untrusted" addresses.
      This might be useful, for instance, to avoid inappropriate disclosure of personal
      or confidential information to arbitrary addresses.
    </t>
  </section>

  <section anchor="examples" title="Example Use Cases for Auto Replies">
    <t><list style="numbers">
    <t>
      In this example, we check that the envelope "from" is in the
      recipient's address book <xref target='I-D.ietf-sieve-external-lists' />
      and that the recipient's presence shows "extended away".<xref target='I-D.ietf-sieve-notify-presence' />
      If both of those are true, the "vacation" action <xref target="RFC5230" />
      is used to send an auto-reply,
      making sure we don't reply to the same sender more than
      once every half hour.<xref target='I-D.ietf-sieve-vacation-seconds' />
      The variables extension <xref target="RFC5229" /> is used to extract the value
      of the recipient's natural-language presence status message,
      which will be used in the response to the sender.
<figure>
<artwork>
<![CDATA[
require ["extlists", "enotify", "variables", "vacation-seconds"];
if allof (
    envelope :list "from" "tag:example.com,2009-05-28:AddrBook",
    notify_method_capability "xmpp:me@example.com" "show" "xa"
  ) {
    # :matches "*" is used here to extract the value
    if notify_method_capability :matches
        "xmpp:myjid@example.com" "status" "*" {
      set "resp_msg" "${1}";
    } else {
      set "resp_msg" "Away for a while, without access to email.";
    }
    vacation :handle "ext-away" :seconds 1800 "${resp_msg}";
  }


]]>
</artwork>
</figure>
    </t>        

    <t>
      In the next example, we'll check several lists or sublists, auto-replying to
      everyone, but sending more detail about the recipient's status to senders
      who are found in the recipient's address book, and still more detail to
      those in the "family" and "friends" lists.
<figure>
<artwork>
<![CDATA[
require ["extlists", "enotify", "vacation-seconds"];

if envelope :list "from" ["tag:example.com,2009-05-28:family",
                          "tag:example.com,2009-05-28:friends"]
  {
    if notify_method_capability "xmpp:me@example.com" "show" "away"
      {
        vacation :handle "away" :seconds 600
            "I'm away for now, but I'll be back soon.";
      }
    elsif notify_method_capability "xmpp:me@example.com" "show" "dnd"
      {
        vacation :handle "dnd" :seconds 1800
            "I'm not to be disturbed.  I'll check mail later.";
      }
    elsif notify_method_capability "xmpp:me@example.com" "show" "xa"
      {
        vacation :handle "ext-away" :seconds 3600
            "I'm away for a while, without access to email.";
      }
    elsif notify_method_capability "xmpp:me@example.com" "busy" "yes"
      {
        vacation :handle "busy" :seconds 1800
            "I'm very busy, but might check email now and then.";
      }
  }
elsif envelope :list "from" "tag:example.com,2009-05-28:AddrBook"
  {
    if notify_method_capability "xmpp:me@example.com" "show"
           ["away", "dnd", "xa"]
      {
        vacation :handle "away" :seconds 3600
            "I'm not available to respond to email.";
      }
  }
else # the sender is not in the address book
  {
    vacation :handle "catchall" :days 1
        "I got your message, and might read it eventually.";
  }


]]>
</artwork>
</figure>
    </t>

    <t>
      For this example,
      if the sender is a work colleague and the recipient is on extended away
      status, then reply with a message giving alternative contact information.
      The message might also include details about the reason for the absence,
      or other personal or confidential information that shouldn't be shared
      with senders who aren't associated with the recipient's company.
<figure>
<artwork>
<![CDATA[
require ["extlists", "enotify", "vacation"];

if envelope :list "from" "tag:example.com,2009-05-28:co-workers"
  {
    if notify_method_capability "xmpp:me@example.com" "show" "xa"
      {
        vacation :handle "bigtrip" :days 3
            "I'm on an extended business trip to Texas for the Foo
             project.  Contact my backup, Susan <susan@example.com>,
             or call my assistant on +1 666 555 1234 if you urgently
             need to contact me.";
      }
  }


]]>
</artwork>
</figure>
    </t>

    <t>
      This example is used to send an acknowledgment to every message received.
      A :seconds value of zero is used to reply to every message, with no
      removal of duplicates to the same sender.
      This requires that the Sieve engine allow an interval of zero;
      if it does not, and it imposes a minimum value, not every message will
      receive an auto-reply.
<figure>
<artwork>
<![CDATA[
require ["extlists", "vacation-seconds"];

if not envelope :list "from" "tag:example.com,2009-05-28:staff"
  {
    vacation :handle "auto-resp" :seconds 0
        "Your request has been received.  A service
         representative will contact you as soon as
         possible, usually within one business day.";
  }


]]>
</artwork>
</figure>
    </t>

    <t>
      This example uses the same structure to automatically send a copy of each incoming message
      to the recipient's backup, if the sender is a customer contact or co-worker, or if the
      message's subject includes the word "urgent".
<figure>
<artwork>
<![CDATA[
require ["extlists", "enotify"];

if anyof (
    envelope :list "from" ["tag:example.com,2009-05-28:customers",
                           "tag:example.com,2009-05-28:co-workers"],
    header :contains "subject" "urgent"
  ) {
    if notify_method_capability "xmpp:me@example.com" "show" "xa"
      {
        redirect "susan@example.com"; # send a copy to my backup
        keep; # also keep a copy for myself
      }
  }
}


]]>
</artwork>
</figure>
    </t>

    </list></t>
  </section>

  <section anchor="security" title="Security Considerations">
    <t>
      See the referenced specifications, below for discussion of
      security considerations for Sieve scripts in general, and for each of the
      extensions in particular.
    </t>

    <t>
      This document describes how to set up a system that creates automatic replies in
      an intelligent way.  Despite the "intelligence", errors in scripts can result in
      too many auto-reply messages, especially when the reply interval is minimal
      (using the "notify" action, or the "vacation" action with a small value for ":seconds").
    </t>

    <t>
      Despite the "intelligence", too, errors in scripts can result in
      private information getting to senders inappropriately.
      In example 3 in <xref target="examples" />, for instance, if the :list test checks the
      wrong list, or none at all, information about the recipient's business trip might be
      send to someone who has no need to know about it, and shouldn't.
    </t>

    <t>
      Even without errors in scripts, a sender who recognizes that auto-replies are dependent
      upon the recipient's presence can use that fact to probe the presence information.
      One result of that can be that the sender discerns changes in the recipient's presence
      that the sender would normally not be allowed to see, making this an unintentional
      back door into the user's presence information.
      Another result is that this can create a "covert channel", allowing the recipient to send
      information to a sender by changing his presence information, his address book,
      and/or his Sieve script
      (though in this regard, the exposure is comparable to any other case of shared
      presence information).
    </t>

    <t>
      Finally, users of any auto-reply mechanism should really think about whether automatic
      replies are necessary, and at what interval they make sense when they are.
      Email is not Instant Messaging, and senders generally expect that replies might
      take a while.
      Consider whether it's truly important to tell people that you'll read their mail
      in an hour or so, or whether that can just be taken as how email works.
      There are times when this makes sense, but let's not use it to exacerbate
      information overload.
    </t>
  </section>

  <section anchor="iana" title="IANA Considerations">
    <t>
      There are no IANA actions required by this document.
    </t>
  </section>
</middle>


<back>
  <references title="Normative References">
    ¬ifypres;
    &vactime;
    &extlists;
    &RFC5228; <!-- sieve -->
    &RFC5229; <!-- variables -->
    &RFC5230; <!-- vacation -->
    &RFC5435; <!-- notify -->
  </references>
</back>
</rfc>

PAFTECH AB 2003-20262026-04-24 09:21:17