diff --git a/javascript/src/helpers/mailparser.js b/javascript/src/helpers/mailparser.js index a6da68a5fb223932afe77acc67fc3d7149711e4e..2471b8ff447430fef4da096548d39065f7b82bdc 100644 --- a/javascript/src/helpers/mailparser.js +++ b/javascript/src/helpers/mailparser.js @@ -122,6 +122,27 @@ export function fixNewLines(mime) { return mime.replace(newline, "\r\n"); } +export function extractMessageID(mime) { + if (mime.startsWith("\r\n")) { + mime = mime.substring(2); //should not happen + } + const headersEndIndex = mime.indexOf("\r\n\r\n"); //the first empty line + if (headersEndIndex < 0) { + return null; + } + const mimeHeaders = mime.substring(0, headersEndIndex); + const headers = libmime.decodeHeaders(mimeHeaders); + let messageId = headers["Message-ID"]; + if (Array.isArray(messageId) && messageId.length > 0) { + messageId = messageId[0]; + } + if (messageId && typeof messageId === "string") { + messageId = messageId.replace(/^</, '').replace(/>$/, ''); + return messageId; + } + return null; +} + export function parseMIME(mime) { let mimeStart = 0; let headersEnd = mime.indexOf("\r\n\r\n"); //the first empty line diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index a4c1db1437a4a377e5d88e42c22a47b5b0ade618..370ce07850a582ae24d93a45c646a8e8a512fdb1 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -7,6 +7,7 @@ import { base64ToByteArray, byteArrayToBase64 } from "../utilities/stringUtilities"; +import { extractMessageID } from "../helpers/mailparser"; const QRCode = require("qrcode"); const Penpal = require("penpal").default; @@ -1740,6 +1741,11 @@ const connection = Penpal.connectToParent({ "Currently authenticated identity" ); }, + extractMessageID(mime) { + return new Penpal.Promise(result => { + result(extractMessageID(mime)); + }); + }, stringToUtf8ByteArray(str) { return new Penpal.Promise(result => { result(stringToUtf8ByteArray(str));