Re: [Jmap] Best vs Good enough - adoption of JMAP
"Chris Newman" <chris.newman@oracle.com> Wed, 26 April 2017 04:50 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 5FB21120046 for <jmap@ietfa.amsl.com>; Tue, 25 Apr 2017 21:50:04 -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 WzpQsD5LZamU for <jmap@ietfa.amsl.com>; Tue, 25 Apr 2017 21:50:02 -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 A3BDC127071 for <jmap@ietf.org>; Tue, 25 Apr 2017 21:50:02 -0700 (PDT)
Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v3Q4nwXu013267 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Apr 2017 04:49:58 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v3Q4nv12006727 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 26 Apr 2017 04:49:57 GMT
Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id v3Q4ntQP021535; Wed, 26 Apr 2017 04:49:56 GMT
Received: from [192.168.15.59] (/66.214.236.56) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 25 Apr 2017 21:49:55 -0700
From: Chris Newman <chris.newman@oracle.com>
To: Neil Jenkins <neilj@fastmail.com>
Cc: jmap@ietf.org
Date: Tue, 25 Apr 2017 21:49:54 -0700
Message-ID: <EDCC6149-9222-468E-A17B-DDBA88A52D95@oracle.com>
In-Reply-To: <1493163974.4122214.956244160.6735E49C@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>
MIME-Version: 1.0
Content-Type: text/plain; format="flowed"
X-Mailer: MailMate (1.9.6r5347)
X-Source-IP: aserv0022.oracle.com [141.146.126.234]
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/gTAAf8HTLMfkatwZocqlTJKImBA>
Subject: Re: [Jmap] 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: Wed, 26 Apr 2017 04:50:04 -0000
On 25 Apr 2017, at 16:46, Neil Jenkins wrote: > I think there's been some misconception over the intended semantics of > the outbox proposal. The outbox was never intended to be the > submission > queue, with mail queue semantics. It is intended as a standard > mailbox, > with mailstore semantics, because it is where messages go **before** > they are passed on to submission. The server would validate the > message/envelope at the time of moving it to the outbox to ensure it > can > be accepted for submission later of course. If you have existing > mailstore + SMTP infrastructure, implementation is not much more than > having some small demon that triggers to take the message from the > mailstore and submit it to the SMTP queue at the appropriate time. And as soon as you add that "small daemon" (also known as a mail queue processing daemon), you've now required the mailstore to also have mail queue semantics. This includes key semantics such as: the mail queue daemon has full read / delete access to those messages even when the user is offline. If the delivery doesn't happen when the user expects, the user is going to make a support call, so we now need all the monitoring, logging and robustness that comes with a mail queue. And addresses that were valid at the time the message entered this mail queue can become invalid later, so there has to be bounce-processing for when that happens, etc, etc. The only way to have a server-side outbox that is not a mail queue would be if messages sit in the outbox indefinitely unless the user is online and their client decides to issue a submit command for a message in that fictitious outbox. > From a user experience point of view, this model gives us an > understandable conceptual place for messages that are *going* to be > sent but have not yet been picked up by the postman, to use a real > world analogy. This analogy only works with a desktop MUA where the "outbox" is on the desktop and thus owned by the "postal customer" (and incidentally, the outbox won't empty if the desktop is shut down). The hardware running JMAP is not owned but the "postal customer"; it's effectively owned by the postman. So an "outbox" on the JMAP server means the message has been given to the postman already; the postman is just waiting for the right time to release it to the next hop. > Because it is a standard mailbox, we automatically have > an API for the client to fetch and show to the user all the currently > scheduled messages. I think this is important functionality as a user > if we have delayed send (and of course we also have the ability to > then > cancel any of the future submissions, by just moving the messages back > out of the outbox). The problem with server-side-outbox in JMAP is that it constrains the server implementation to three options: 1. The mail store includes a mail queue for each user. 2. The mail queue, at least for delayed messages, can be accessed with full JMAP semantics. Including things like body structure, mod sequence, flags, etc. 3. The JMAP outbox is always empty. I really want a fourth option for server implementation: 4. The mail store and mail queue are completely separate. The mail queue daemon never accesses the mail store. The set of actions JMAP performs on objects in the mail queue is limited to only those that are strictly necessary to achieve a useful goal (envelope extensions like future release at submission time, unsend for messages still in local queue, and status feedback tagging on sent messages). > With my client author hat on, I like this model because it makes it > easier to implement full offline support. If I am offline, the outbox > represents messages waiting to go out from the client. From an > implementation perspective it is much easier if my offline sync code > doesn't need a separate path for keeping track of messages to be sent > vs. normal messages moved to another folder. A client-side outbox makes sense to me. It's a server-side outbox that I find problematic. Let me ask you this: Suppose JMAP implements a server-side outbox (aka mail queue). The JMAP client synchronizes the server-side outbox and goes offline. While the client is offline, the message gets submitted and the user decides they don't want to submit the message and delete it from the local cached outbox. Now what? Have you really simplified things by adding a server-side outbox to the mix? > The *only real difference* between a "sendMessage" command and using > "move to outbox" as the equivalent command, is that clients can get > the list of "delayed" messages waiting for submission. I think this is > valuable, and pretty much required for "scheduled send", although not > so important for "undo send". The fact that this is really the only > difference is why servers that can't or don't want to implement > delayed send or expose messages waiting to be sent can use the "empty > outbox" model. My product has already implemented future release, already implemented unsend from local mail queue and implemented message tracking so we can get status of a message in the local queue (and potentially beyond that). I'm willing to expose these in JMAP if the protocol is designed in such a way that we preserve clean functional separation between mail store and mail queue. I'm very much not interested in all the complexity a server-side outbox adds on top of those three features. I'd argue that "scheduled send" is a mail client feature and "future release" is a mail server feature. If there's a daemon that can move the message to the next hop even when the client is offline, you're talking about "future release" and the message has semantically been submitted already. So I think JMAP should put "future release" messages in the Sent folder to avoid confusion with a client-side outbox. I'd like JMAP to include a way to "unsend" future release messages so JMAP clients have access to the unsend feature we've already implemented. - Chris
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ted Lemon
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ted Lemon
- [Jmap] Best vs Good enough - adoption of JMAP Adrien de Croy
- Re: [Jmap] Best vs Good enough - adoption of JMAP Bron Gondwana
- Re: [Jmap] Best vs Good enough - adoption of JMAP Bron Gondwana
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Neil Jenkins
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Adrien de Croy
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ted Lemon
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Neil Jenkins
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ted Lemon
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ned Freed
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ted Lemon
- Re: [Jmap] Best vs Good enough - adoption of JMAP Bron Gondwana
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ned Freed
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ned Freed
- Re: [Jmap] simpler future release & unsend withou… Ted Lemon
- [Jmap] simpler future release & unsend without ou… Chris Newman
- Re: [Jmap] Best vs Good enough - adoption of JMAP Neil Jenkins
- Re: [Jmap] Best vs Good enough - adoption of JMAP Brandon Long
- Re: [Jmap] Best vs Good enough - adoption of JMAP Brandon Long
- Re: [Jmap] simpler future release & unsend withou… Chris Newman
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins
- Re: [Jmap] Best vs Good enough - adoption of JMAP Chris Newman
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins
- Re: [Jmap] simpler future release & unsend withou… Adrien de Croy
- Re: [Jmap] simpler future release & unsend withou… Adrien de Croy
- Re: [Jmap] Best vs Good enough - adoption of JMAP Ned Freed
- Re: [Jmap] simpler future release & unsend withou… Ned Freed
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins
- Re: [Jmap] simpler future release & unsend withou… Chris Newman
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins
- Re: [Jmap] simpler future release & unsend withou… Ted Lemon
- Re: [Jmap] simpler future release & unsend withou… Chris Newman
- Re: [Jmap] simpler future release & unsend withou… ajay
- Re: [Jmap] simpler future release & unsend withou… xn--l1b0cxc
- Re: [Jmap] simpler future release & unsend withou… xn--l1b0cxc
- Re: [Jmap] simpler future release & unsend withou… Neil Jenkins