Re: [Jmap] simpler future release & unsend without outbox (was Re: Best vs Good enough - adoption of JMAP)

"Chris Newman" <chris.newman@oracle.com> Thu, 27 April 2017 02:06 UTC

Return-Path: <chris.newman@oracle.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B75D612702E for <jmap@ietfa.amsl.com>; Wed, 26 Apr 2017 19:06:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.202
X-Spam-Level:
X-Spam-Status: No, score=-4.202 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WaCW5gyAGg1Q for <jmap@ietfa.amsl.com>; Wed, 26 Apr 2017 19:06:09 -0700 (PDT)
Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 40B5312441E for <jmap@ietf.org>; Wed, 26 Apr 2017 19:06:09 -0700 (PDT)
Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v3R266JI006496 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 27 Apr 2017 02:06:06 GMT
Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0021.oracle.com (8.13.8/8.14.4) with ESMTP id v3R265FJ014331 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 27 Apr 2017 02:06:05 GMT
Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id v3R265GX005911; Thu, 27 Apr 2017 02:06:05 GMT
Received: from [10.145.239.185] (/10.145.239.185) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 26 Apr 2017 19:06:05 -0700
From: Chris Newman <chris.newman@oracle.com>
To: Neil Jenkins <neilj@fastmail.com>
Cc: jmap@ietf.org
Date: Wed, 26 Apr 2017 19:06:03 -0700
Message-ID: <BCF4ACFF-892C-464E-AAFD-1BB1822C5EF8@oracle.com>
In-Reply-To: <1493248332.1295949.957537688.05443911@webmail.messagingengine.com>
References: <em8b177018-4769-44ea-b033-90bd8155d11b@bodybag> <46F700A6-C2B1-488B-A8B4-6ACD45B03C31@oracle.com> <CFC38D13-0CB2-4ABF-9403-DF0F773314B7@fugue.com> <D35A79C2-3918-4BB7-B97D-D56CA7548DCD@oracle.com> <1493099769.3023399.955193288.6D0312CC@webmail.messagingengine.com> <33553450-82F4-4CB4-8679-C9F52D8A8839@oracle.com> <1493163974.4122214.956244160.6735E49C@webmail.messagingengine.com> <EDCC6149-9222-468E-A17B-DDBA88A52D95@oracle.com> <1493185260.709114.956477904.75CB343B@webmail.messagingengine.com> <B2FD4698-E783-4D15-BA4E-B637A070E6A9@oracle.com> <1493248332.1295949.957537688.05443911@webmail.messagingengine.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
X-Mailer: MailMate (1.9.6r5347)
X-Source-IP: aserv0021.oracle.com [141.146.126.233]
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/i6iYV0hM6KQyRZBmxu0Lwo5_lO8>
Subject: Re: [Jmap] simpler future release & unsend without outbox (was Re: Best vs Good enough - adoption of JMAP)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2017 02:06:11 -0000

On 26 Apr 2017, at 16:12, Neil Jenkins wrote:

> On Wed, 26 Apr 2017, at 05:54 PM, Chris Newman wrote:
>> I'll describe a model that achieves my goal […]
>> 1. Get rid of the server-side outbox. We only have a drafts folder
>>    and a> sent folder.
>>
>> 2. Add a submission command with envelope (same structure as SMTP
>> envelope but JSON syntax and quoting). We pass this command a
>> reference> to a draft message in the drafts folder, and if the 
>> submission
>> succeeds,> the message is moved to the sent folder with the envelope 
>> as an
>> annotation. The envelope can include the already-standard
>> future release> extension.
>>
>> 3. Add an unsend command which takes a reference to a message in the
>> sent folder. If the unsend succeeds, the message can be moved back 
>> to> the drafts folder as part of this action. How the server 
>> correlates a> message in the sent folder with a message in the mail 
>> queue is an
>> implementation detail; the spec need not specify that detail in
>> order to> provide the functionality with this model.
>>
>> 4. Add a way to search/select messages in the Sent folder that may 
>> be> possible to unsend.
>
> From a protocol perspective, this model is basically identical to the
> outbox model proposed.

Well, if you believe that and I don't believe that, then the path to 
rough consensus is to start with my proposal and refine it until you 
find it acceptable :-)

So let me refine item 4 a bit. It's my theory that JMAP should have a 
virtual folder / smart folder feature that basically behaves the same 
way as a real/physical folder to the client. I think JMAP should have 
that feature regardless of the outcome of this debate (smart/virtual 
folders is an even more dominant client UI feature than outbox). So 
let's assume we've added that feature to JMAP. Now if the client wants 
to present a server-side outbox view based on my proposal, it just 
creates an "outbox" smart folder. If the client wants to not include the 
release-in-the-future messages in the Sent folder view, it can create a 
smart folder to do that. So now the UI model you prefer is simple to 
implement and it doesn't have the deployment problems a server-side 
outbox creates.

> The only difference is that rather than put the
> messages that can still be recalled in a separate "outbox" mailbox, 
> you
> put them in the sent mailbox and require some kind of search. The only
> extra component your server will need is something that moves the
> message from outbox to sent when it can no longer be recalled; I
> seriously don't think this is a huge implementation burden.

Well, it's an implementation burden that disappears completely from the 
system with my proposal. Thus you've made an argument that my proposal 
is simpler (and thus better) than the magic-server-side-outbox model.

> As Brandon
> has pointed out, modern mailstores need this kind of "scheduled 
> events"
> plumbing for a number of user-facing features, and it has already been
> implemented at scale in a number of systems.
> From a user interface perspective, I maintain it is clearer for the 
> user
> for these to be two separate mailboxes, and it also has the advantage
> that mailboxes have a message count so MUAs can more easily see if 
> there
> are any messages waiting to be sent still. (I would expect most MUAs 
> to
> hide the outbox when empty.)

I happen to like the client-side-outbox UI model, but I believe a 
server-side-outbox is a confusing UI that violates the least 
astonishment principle whenever an offline client is used. But my 
proposal puts no constraints on the UI. If you want to express the 
server-side-outbox UI model using my proposal, we can refine my proposal 
to make that easy (I just suggested a way to do that). The 
magic-outbox-on-server puts a number of constraints on the server design 
which is one of many reasons I dislike that proposal. If you're still 
not convinced, I can enumerate more reasons why magic-outbox-on-server 
is a problem and/or further refine my proposal.

		- Chris