diff --git a/lib/message-handler.js b/lib/message-handler.js index ea5c6309..b3263573 100644 --- a/lib/message-handler.js +++ b/lib/message-handler.js @@ -959,6 +959,28 @@ class MessageHandler { let newModseq = (item && item.value && item.value.modifyIndex) || 1; + let sourceUid = []; + let destinationUid = []; + + let removeEntries = []; + let existsEntries = []; + + let encryptedMoveUserData; + if (targetData.encryptMessages) { + try { + encryptedMoveUserData = await this.users.collection('users').findOne( + { _id: mailboxData.user }, + { + projection: { + pubKey: true + } + } + ); + } catch (err) { + return this.moveDone(err, { targetData, sourceUid, destinationUid, mailboxData, existsEntries, removeEntries }, options); + } + } + let cursor = this.database .collection('messages') .find({ @@ -968,12 +990,6 @@ class MessageHandler { // ordering is needed for IMAP UIDPLUS results .sort({ uid: 1 }); - let sourceUid = []; - let destinationUid = []; - - let removeEntries = []; - let existsEntries = []; - let message = {}; // Loop through all moved messages while (message !== undefined) { @@ -1168,16 +1184,8 @@ class MessageHandler { continue; } else { // not yet encrypted, so need to encrypt - let res; - - try { - res = await this.users.collection('users').findOne({ _id: mailboxData.user }); - } catch (err) { - return this.moveDone(err, { targetData, sourceUid, destinationUid, mailboxData, existsEntries, removeEntries }, options); - } - // get user data - if (!res.pubKey) { + if (!encryptedMoveUserData?.pubKey) { // no public key available, cannot encrypt await this.updateMessage( { @@ -1233,7 +1241,7 @@ class MessageHandler { let encryptRes; try { - encryptRes = await this.encryptMessageAsync(res.pubKey, raw); + encryptRes = await this.encryptMessageAsync(encryptedMoveUserData.pubKey, raw); } catch (err) { return reject( this.moveDone(err, { targetData, sourceUid, destinationUid, mailboxData, existsEntries, removeEntries }, options)