Handling Message Disposition Notification with JMAPLinagora100 Terrasse Boieldieu – Tour FranklinParis - La Défense CEDEX92042Francerouazana@linagora.comhttps://www.linagora.com
Applications
JMAPJMAPJSONemailMDNThis document specifies a data model for handling MDN messages with a server using JMAP.
JMAP ( – JSON Meta Application Protocol) is a generic protocol for synchronising data, such as mail, calendars or contacts, between a client and a server. It is optimised for mobile and web environments, and aims to provide a consistent interface to different data types.
MDN are defined in and are used as "read receipts", "acknowledgements", or "receipt notifications".
A client can have to deal with MDN in different ways:
When receiving an email, an MDN can be sent to the sender. This specification defines an MDN/set method to cover this case.When sending an email, an MDN can be requested. This must be done with the help of a header, and is already specified by and can already be handled by this way.When receiving an MDN, the MDN could be related to an existing sent mail. This is already covered by in the EmailSubmission object. Client could want to display detailed information about a received MDN. This specification defines a MDN/parse method to cover this case.The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 when, and only when, they appear in all capitals, as shown here.
Type signatures, examples and property descriptions in this document follow the conventions established in section 1.1 of . Data types defined in the core specification are also used in this document.
Servers MUST support all properties specified for the new data types defined in this document.
The same terminology is used in this document as in the core JMAP specification.
The capabilities object is returned as part of the standard JMAP Session object; see the JMAP spec. Servers supporting this specification MUST add a property called urn:ietf:params:jmap:mdn to the capabilities object.
An MDN object has the following properties:
forEmailId: String
Email Id of the received email this MDN is relative to.subject: String|null
Subject used as Subject header for this MDN.textBody: String|null
Human readable part of the MDN, as plain text.reportingUA: String|null
Name of the MUA creating this MDN. It is used to build the MDN Report part of the MDN.disposition: Disposition
Object containing the diverse MDN disposition options.mdnGateway: String|null (server-set)
Name of the gateway or MTA that translated a foreign (non-Internet) message disposition notification into this MDN.originalRecipient: String|null (server-set)
Original recipient address as specified by the sender of the message for which the MDN is being issued.finalRecipient: String (server-set)
Recipient for which the MDN is being issued.originalMessageID: String|null (server-set)
Message-ID (the header field, not the JMAP Id) of the message for which the MDN is being issued.error: String[]|null (server-set)
Additional information in the form of text messages when the "error" disposition modifier appears.extensionFields: String[String]|null (server-set)
Object where keys are extension-field names and values are extension-field values.A Disposition object has the following properties:
actionMode: String
This MUST be one of the following strings: "manual-action" / "automatic-action"sendingMode: String
This MUST be one of the following strings: "MDN-sent-manually" / "MDN-sent-automatically"type: String
This MUST be one of the following strings: "deleted" / "dispatched" / "displayed" / "processed"See for the exact meaning of these different fields.
Standard “/set” method as described in where only the create parameter is supported.
The MDN/set method generates and sends an message from an MDN object.
The client SHOULD NOT issue a MDN/set request if the message has the $MDNSent keyword set. In this case, the server MUST reject the submission with a standard alreadyExists SetError.
When sending the MDN, the server is in charge of generating the originalRecipient, finalRecipient and originalMessageID fields accordingly to the specification.
For each forEmailId whose MDN where sent, the server MUST add a $MDNSent keyword to the email. See for more details.
This method allows a client to parse blobs as messages to get MDN objects. This can be used to parse and get detailed information about blobs referenced in the mdnBlobIds of the EmailSubmission object, or any email the client could expect to be an MDN.
The forEmailId property can be null or missing if the originalMessageID property is missing or not referencing an existing email.
The Email/parse method takes the following arguments:
accountId: String
The id of the account to use.blobIds: Id[]
The ids of the blobs to parse.The response has the following arguments:
accountId: Id
The id of the account used for the call.parsed: Id[MDN]|null
A map of blob id to parsed MDN representation for each successfully parsed blob, or null if none.notParsable: Id[]|null
A list of ids given that corresponded to blobs that could not be parsed as MDNs, or null if none.notFound: Id[]|null
A list of blob ids given that could not be found, or null if none.A client can use the following request to send an MDN back to the sender:
If the email id matches an existing email without the $MDNSent keyword, the server can answer:
This is done with the "Email/set" create method.
Note the specified Disposition-Notification-To header indicating where to send MDN back (usually the sender of the email).
The client issues a parse request:
The server responds:
IANA will register the "mdn" JMAP Capability as follows:
Capability Name: urn:ietf:params:jmap:mdnSpecification document: this document
Intended use: common
Change Controller: IETF
Security and privacy considerations: this document, section 5.
The same considerations regarding MDN (see and ) apply to this document.