[lemonade] SUBMITTED keyword, Outbox and Sent folders, and CATENATE/BURL

Peter Coates <peter.coates@sun.com> Thu, 21 February 2008 21:50 UTC

Return-Path: <lemonade-bounces@ietf.org>
X-Original-To: ietfarch-lemonade-archive@core3.amsl.com
Delivered-To: ietfarch-lemonade-archive@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id E322B28CAB2; Thu, 21 Feb 2008 13:50:50 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.502
X-Spam-Level:
X-Spam-Status: No, score=0.502 tagged_above=-999 required=5 tests=[AWL=-0.261, BAYES_00=-2.599, FH_RELAY_NODNS=1.451, HELO_MISMATCH_ORG=0.611, J_CHICKENPOX_36=0.6, J_CHICKENPOX_46=0.6, RDNS_NONE=0.1]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OvvMPPyuCGNd; Thu, 21 Feb 2008 13:50:45 -0800 (PST)
Received: from core3.amsl.com (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id A544028CA70; Thu, 21 Feb 2008 13:50:45 -0800 (PST)
X-Original-To: lemonade@core3.amsl.com
Delivered-To: lemonade@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 9F1F528CA9F for <lemonade@core3.amsl.com>; Thu, 21 Feb 2008 13:50:43 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RAMpm0KT0B4D for <lemonade@core3.amsl.com>; Thu, 21 Feb 2008 13:50:42 -0800 (PST)
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34]) by core3.amsl.com (Postfix) with ESMTP id 0B92228CA45 for <lemonade@ietf.org>; Thu, 21 Feb 2008 13:50:38 -0800 (PST)
Received: from fe-amer-10.sun.com ([192.18.109.80]) by brmea-mail-3.sun.com (8.13.6+Sun/8.12.9) with ESMTP id m1LLoYPG000754 for <lemonade@ietf.org>; Thu, 21 Feb 2008 21:50:34 GMT
Received: from conversion-daemon.mail-amer.sun.com by mail-amer.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007)) id <0JWL00I01WQIW500@mail-amer.sun.com> (original mail from peter.coates@sun.com) for lemonade@ietf.org; Thu, 21 Feb 2008 14:50:34 -0700 (MST)
Received: from kluane ([199.247.229.42]) by mail-amer.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007)) with ESMTPSA id <0JWL00D5CZBQMHA0@mail-amer.sun.com> for lemonade@ietf.org; Thu, 21 Feb 2008 14:50:21 -0700 (MST)
Date: Thu, 21 Feb 2008 13:50:03 -0800
From: Peter Coates <peter.coates@sun.com>
To: lemonade@ietf.org
Message-id: <033901c874d3$bb7bbfb0$32733f10$%coates@sun.com>
MIME-version: 1.0
X-Mailer: Microsoft Office Outlook 12.0
Content-language: en-ca
Thread-index: Ach007b3OE7eCJLbToKvMBzDyqC3mQ==
Subject: [lemonade] SUBMITTED keyword, Outbox and Sent folders, and CATENATE/BURL
X-BeenThere: lemonade@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Enhancements to Internet email to support diverse service enivronments <lemonade.ietf.org>
List-Unsubscribe: <http://www.ietf.org/mailman/listinfo/lemonade>, <mailto:lemonade-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:lemonade@ietf.org>
List-Help: <mailto:lemonade-request@ietf.org?subject=help>
List-Subscribe: <http://www.ietf.org/mailman/listinfo/lemonade>, <mailto:lemonade-request@ietf.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: lemonade-bounces@ietf.org
Errors-To: lemonade-bounces@ietf.org

Within IMAP, the "proper" way to mark a message as draft is to use the
\draft flag.  Similarly the way tentatively to delete a message is to use
the \deleted flag.

Many clients instead use "Drafts" and "Deleted" folders for this purpose.

Other special purpose folders that are commonly used are "Outbox" and
"Sent".  And perhaps "Spam", but I do not want to go there for the moment.
There are no "proper" IMAP ways to mark a message as "Sent" analogous to the
\draft or \deleted flags, still less one meaning queued for submission, or
being submitted.

When I said the "Drafts", "Deleted", "Outbox", and "Sent" are commonly used
folders, I overstate.  Special folders are used for these four functions,
but the names vary.  This can and does cause both interoperability issues
between clients, and confusion on the part of users. 

Actually, the "Outbox" folder has historically not caused issues for IMAP
servers as this has almost always been a folder that was local to the
client, and it is obvious why.  With CATENATE and BURL the outbox function,
or perhaps I should say the outbox state moves to the server.

Let me go through the life cycle of a message being sent from a couple of
putative lemonade compliant client which have chosen two different models.
The first model is to mark the messages to show state, the other uses
different folders for this purpose.  I will then start a discussion about
what a client should do to achieve the best possible interoperability, and
what needs defining for interoperability.

Client model 1 (messages marked with state)
Define three flags (keywords) for the state of outbound messages: 
       QUEUED (to be submitted as soon as possible)
       SUBMITTED (successfully submitted to the submit server)
       
1. The client constructs a message to be sent, eg
C: 1 APPEND INBOX (QUEUED) CATENATE (.....)
S: 1 OK [APPENDUID 1192256 321] done

2. construct a URL for this message, eg
C: 2 GENURLAUTH
IMAP://userid@mail.domain.com/INBOX;UIDVALIDITY=1192256/;UID=321;UTLAUTH=SUB
MIT+userid INTERNAL
S: *
IMAP://userid@mail.domain.com/INBOX;UIDVALIDITY=1192256/;UID=321;URLAUTH=SUB
MIT+userid:internal:12345678
S: 2 OK done

3. submit the message
c: mail from: <userid@mail.domain.com>
s: 250 2.5.0 OK
c: rcpt to: <otheruser@otherdomain.com>
s: 250 2.5.0 OK
c: burl
IMAP://userid@mail.domain.com/INBOX;UIDVALIDITY=1192256/;UID=321;URLAUTH=SUB
MIT+userid:internal:12345678 last
s: 250 2.5.0 OK

4. mark the message as having been submitted
C: 4 UID STORE 321 flags SUBMITTED

<done>

Next, the equivalent using Outbox and Sent folders:

1. The client constructs a message to be sent, eg
C: 1 APPEND Outbox CATENATE (.....)
S: 1 OK [APPENDUID 1192256 321] done

2. construct a URL for this message, eg
C: 2 GENURLAUTH
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid INTERNAL
S: *
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid:internal:12345678
S: 2 OK done

3. submit the message
c: mail from: <userid@mail.domain.com>
s: 250 2.5.0 OK
c: rcpt to: <otheruser@otherdomain.com>
s: 250 2.5.0 OK
c: burl
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid:internal:12345678 last
s: 250 2.5.0 OK

4. Move the message to the Sent folder
C: 4A SELECT Outbox
C: 4B UID COPY 321 Sent
S: 4B OK [APPENDUID 1418141 198] done
C: 4C UID STORE 321 +flags \deleted
C: 4D UID EXPUNGE 321

<done>

I believe that users will be more comfortable with the second approach than
the former, but that the former is more in the spirit of IMAP than the
latter.  There is nothing to stop a client using a hybrid approach:

1. The client constructs a message to be sent, eg
C: 1 APPEND Outbox (QUEUED) CATENATE (.....)
S: 1 OK [APPENDUID 1192256 321] done

2. construct a URL for this message, eg
C: 2 GENURLAUTH
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid INTERNAL
S: *
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid:internal:12345678
S: 2 OK done

3. submit the message
c: mail from: <userid@mail.domain.com>
s: 250 2.5.0 OK
c: rcpt to: <otheruser@otherdomain.com>
s: 250 2.5.0 OK
c: burl
IMAP://userid@mail.domain.com/Outbox;UIDVALIDITY=1192256/;UID=321;URLAUTH=SU
BMIT+userid:internal:12345678 last
s: 250 2.5.0 OK

4. Move the message to the Sent folder
C: 4A SELECT Outbox
C: 4B UID COPY 321 Sent
S: 4B OK [APPENDUID 1418141 198] done
C: 4C UID STORE 321 +flags \deleted
C: 4D UID EXPUNGE 321
C: 4E SELECT Sent
C: 4F UID STORE 198 flags SUBMITTED

<done>

The Obvious down side to both the approaches using multiple folders is that
it requires extra selects which are relatively expensive commands and which
lose any CONTEXTS that might be active for the user, and which change the
meaning of any NOTIFY command that might be outstanding.  One solution to
that might be to use a second IMAP session for manipulating the message that
is being submitted.

These has been some discussion as to whether a third state, a SUBMITTING
keyword, is desirable.  This all hinges on recovery after a crash, and
avoiding having multiple clients all submitting queued messages at the same
time.  It is asserted that a combination of the SUBMITTING keyword and the
CONDSTORE semantics can be used to avoid that scenario.

I am not convinced by having a shared Outbox folder being used by multiple
clients.  I think this might lead to surprises for the user.  It might be
better for each client to construct a unique name for its outbox.  On the
other hand, having several Send folders is a known problem.  It would be
nice if we could suggest that if a client is going to use a folder for sent
messages that it use the folder "Sent".  That does not preclude the client
displaying it as whatever it wants, much as INBOX is displayed as various
things in languages other than English.

Peter

_______________________________________________
lemonade mailing list
lemonade@ietf.org
http://www.ietf.org/mailman/listinfo/lemonade
Supplemental Web Site:
http://www.standardstrack.com/ietf/lemonade