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

Benoit Tellier updated JAMES-3369:
----------------------------------
        Parent: JAMES-2884
    Issue Type: Sub-task  (was: New Feature)

> Email/get 14. bodyStructure property
> ------------------------------------
>
>                 Key: JAMES-3369
>                 URL: https://issues.apache.org/jira/browse/JAMES-3369
>             Project: James Server
>          Issue Type: Sub-task
>          Components: JMAP
>            Reporter: Benoit Tellier
>            Assignee: Antoine Duprat
>            Priority: Major
>             Fix For: 3.6.0
>
>
> ## What
> Allow a completedescription of the mime structure of this message
> ## The spec
> - bodyStructure: EmailBodyPart (immutable) This is the full MIME structure of 
> the message body, without recursing into message/rfc822 or message/global 
> parts. Note that EmailBodyParts may have subParts if they are of type 
> multipart/*.
> And ...
> {code:java}
> An EmailBodyPart object has the following properties:
> -   partId: String|null Identifies this part uniquely within the Email. This 
> is scoped to the emailId and has no meaning outside of the JMAP Email object 
> representation. This is null if, and only if, the part is of type multipart/*.
> -   blobId: Id|null The id representing the raw octets of the contents of the 
> part, after decoding any known Content-Transfer-Encoding (as defined in 
> [@!RFC2045]), or null if, and only if, the part is of type multipart/*. Note 
> that two parts may be transfer-encoded differently but have the same blob id 
> if their decoded octets are identical and the server is using a secure hash 
> of the data for the blob id. If the transfer encoding is unknown, it is 
> treated as though it had no transfer encoding.
> -   size: UnsignedInt The size, in octets, of the raw data after content 
> transfer decoding (as referenced by the blobId, i.e., the number of octets in 
> the file the user would download).
> -   headers: EmailHeader[] This is a list of all header fields in the part, 
> in the order they appear in the message. The values are in Raw form.
> -   name: String|null This is the decoded filename parameter of the 
> Content-Disposition header field per [@!RFC2231], or (for compatibility with 
> existing systems) if not present, then it’s the decoded name parameter of the 
> Content-Type header field per [@!RFC2047].
> -   type: String The value of the Content-Type header field of the part, if 
> present; otherwise, the implicit type as per the MIME standard (text/plain or 
> message/rfc822 if inside a multipart/digest). CFWS is removed and any 
> parameters are stripped.
> -   charset: String|null The value of the charset parameter of the 
> Content-Type header field, if present, or null if the header field is present 
> but not of type text/*. If there is no Content-Type header field, or it 
> exists and is of type text/* but has no charset parameter, this is the 
> implicit charset as per the MIME standard: us-ascii.
> -   disposition: String|null The value of the Content-Disposition header 
> field of the part, if present; otherwise, it’s null. CFWS is removed and any 
> parameters are stripped.
> -   cid: String|null The value of the Content-Id header field of the part, if 
> present; otherwise it’s null. CFWS and surrounding angle brackets (<>) are 
> removed. This may be used to reference the content from within a text/html 
> body part HTML using the cid: protocol, as defined in [@!RFC2392].
> -   language: String[]|null The list of language tags, as defined in 
> [@!RFC3282], in the Content-Language header field of the part, if present.
> -   location: String|null The URI, as defined in [@!RFC2557], in the 
> Content-Location header field of the part, if present.
> -   subParts: EmailBodyPart[]|null If the type is multipart/*, this contains 
> the body parts of each child.
> {code}
> ## DOD
> As a client, I am able to fetch the `bodyStructure` properties of Email
> ## Example
> Given the following message:
> {code:java}
>  - partId1 multipart/mixed
>         - partId2 multipart/altenative
>              - partId3 text/plain `First part`
>              - partId4 text/html 'First <b>part</b>`
>         - partId5 text/plain `Second part`
>         - partId6 text/html `<b>Third</b> part`
> {code}
> Executing the following request:
> {code:java}
> {
>   "using": [
>     "urn:ietf:params:jmap:core",
>     "urn:ietf:params:jmap:mail"],
>   "methodCalls": [[
>     "Email/get",
>     {
>       "accountId": 
> "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
>       "ids": ["3647"],
>       "properties": ["bodyStructure"]
>     },
>     "c1"]]
> }
> {code}
> Will return 
> {code:java}
> {
>   "sessionState": "75128aab4b1b",
>   "methodResponses": [[
>     "Email/get",
>     {
>       "accountId": 
> "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
>       "state": "000001",
>       "list": [
>         {
>           "id": "3647",
>           "bodyStructure":  {
>                    "partId": "partId1",
>                     "type": "multipart/mixed",
>                     "blobId": "3647",
>                      // ....
>                      "subParts": [
>                            {
>                                 "partId": "partId2",
>                                  "type": "multipart/altenative",
>                                  //...
>                                  "subParts": [
>                                      {
>                                          "partId": "partId3",
>                                           "type": "text/plain",
>                                            //...
>                                       },
>                                       {
>                                           "partId": "partId4",
>                                           "type": "text/html",
>                                           //...
>                                       }
>                                  ]
>                           },
>                            {
>                                 "partId": "partId5",
>                                  "type": "text/plain",
>                                  //...
>                           },
>                            {
>                                 "partId": "partId6",
>                                  "type": "text/html",
>                                  //...
>                           },
>                       ],
>                 }
>         }
>       ],
>       "notFound": []
>     },
>     "c1"]]
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to