[prev in list] [next in list] [prev in thread] [next in thread] 

List:       james-dev
Subject:    [jira] [Resolved] (JAMES-4016) JMAP email keywords in mixed JMAP/IMAP usage
From:       René_Cordier_(Jira) <server-dev () james ! apache ! org>
Date:       2024-04-01 9:57:35
Message-ID: JIRA.13570987.1709735183000.102448.1711965600272 () Atlassian ! JIRA
[Download RAW message or body]


     [ https://issues.apache.org/jira/browse/JAMES-4016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel \
]

René Cordier resolved JAMES-4016.
---------------------------------
    Fix Version/s: 3.9.0
       Resolution: Fixed

Been fixed and merged with https://github.com/apache/james-project/pull/2165

> JMAP email keywords in mixed JMAP/IMAP usage
> --------------------------------------------
> 
> Key: JAMES-4016
> URL: https://issues.apache.org/jira/browse/JAMES-4016
> Project: James Server
> Issue Type: Bug
> Components: JMAP
> Reporter: Jacopo Tessera
> Assignee: Antoine Duprat
> Priority: Major
> Fix For: 3.9.0
> 
> Attachments: cyrus-keyword.log, james-keyword.log
> 
> Time Spent: 20m
> Remaining Estimate: 0h
> 
> JMAP Email keywords are currently determined as the keywords of the message found \
> in the "first" mailbox (refer to \
> [https://github.com/apache/james-project/blob/master/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala#L508]).
>  This approach works when using JMAP since the keywords get updated for every \
> message during an Email/set operation. However, it leads to counterintuitive \
> behavior when using IMAP in conjunction with JMAP (mixed JMAP/IMAP usage is a \
> legitimate use case, see [https://jmap.io/spec-mail.html#introduction]). Consider \
>                 the following scenario:
> * Assume an account with mailboxes "INBOX," "Foo," and "Bar," with the order of the \
> mailboxes being "INBOX" < "Foo" < "Bar" ("INBOX" being the "first" mailbox when \
>                 present, and "Foo" being the "first" mailbox when "INBOX" is not \
>                 present).
> * Suppose there's a message in both the "Foo" and "Bar" mailboxes with keywords \
> "foo" and "bar." The result of an Email/get call is as follows:
> {code:json}
> {
> ...
> "mailboxIds":  { "<Foo_Id>": true, "<Bar_Id>": true },
> "keywords": {
> "foo": true,
> "bar": true
> }
> }
> {code}
> where <Foo_Id> and <Bar_Id> represent the IDs of the "Foo" and "Bar" mailboxes, \
>                 respectively.
> * Using IMAP, the keyword "foo" is removed from the message in the "Bar" mailbox, \
> and the keyword "baz" is added to the message in the "Bar" mailbox. However, the \
> result of Email/get remains unchanged: {code:json}
> {
> ...
> "mailboxIds": { "<Foo_Id>": true, "<Bar_Id>": true },
> "keywords": {
> "foo": true,
> "bar": true
> }
> }
> {code}
> This discrepancy occurs because the flags of the message in the "Foo" mailbox \
>                 remain unchanged, and "Foo" is considered the "first" mailbox.
> * Now, suppose the message is copied using IMAP from the "Bar" mailbox to the \
> "INBOX" mailbox. The result of Email/get is now:
> {code:json}
> {
> ...
> "mailboxIds": { "<INBOX_Id>": true, "<Foo_Id>": true, "<Bar_Id>": true },
> "keywords": {
> "baz": true,
> "bar": true
> }
> }
> {code}
> Hence, copying a message to another mailbox can entirely change the keywords of a \
> message. This behavior is not specific to the copy operation, one can think of \
> other scenarios where moving or deleting message on IMAP produces an unexpected \
> result. h3. Proposed Solutions:
> * strategy a) The set of keywords for a JMAP message should be the intersection of \
> the keywords of all messages across every mailbox. In other words, a JMAP message \
> should have a keyword if and only if every message has that keyword. This ensures \
> the stability of a JMAP message's keywords when issuing IMAP updates that do not \
>                 affect the keywords. The behavior remains unchanged when using JMAP \
>                 exclusively.
> * strategy b) The set of keywords for a JMAP message should be the union of the \
> keywords of all messages across every mailbox. In other words, a JMAP message \
> should have a keyword if at least a message has that keyword. The behavior remains \
> unchanged when using JMAP exclusively. h3. What Does Cyrus Do?
> Based on the results in the attachments Cyrus seems to use the strategy b), but \
> they consider the $seen flag as a special case. Their implementation can be found \
> here [https://github.com/cyrusimap/cyrus-imapd/blob/master/imap/jmap_mail.c#L6394] \
> h3. Extra The results of this scenario on Apache JAMES and cyrus-imapd can be found \
> in the attachments.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic