如何在 NodeJS 中使用 IMAP 通过 messageId 获取电子邮件线程?

How to fetch email thread by messageId using IMAP in NodeJS?

我想使用特定的 messageId 获取整个回复线程 2a2b0f84-261c-ecd5-33bf-919548b76000@hotmail.com.

我试过这个:

    const getInbox = () => {
    return new Promise((resolve, reject) => {
        imaps.connect(config).then(function (connection) {
            return connection.openBox('INBOX').then(function () {
                var searchCriteria = ['ALL'];
                var fetchOptions = {
                    bodies: ['HEADER', 'TEXT', ''],
                };
                return connection.search(searchCriteria, fetchOptions).then(async function (messages) {
                    let promises = messages.map(item=>{
                        return new Promise((resolve,reject)=>{
                            var all = _.find(item.parts, { "which": "" })
                            var id = item.attributes.uid;
                            var idHeader = "Imap-Id: " + id + "\r\n";
                            simpleParser(idHeader + all.body, (err, mail) => {
                                resolve(mail);
                            });
                        });
                    });
                    Promise.all(promises).then(data=>{
                        let d = data.filter(obj=>obj.me).map(obj=>{
                            return {
                                from:obj.from.value.map(obj=>obj.address).join(','),
                                to:obj.to.value.map(obj=>obj.address).join(','),
                                subject:obj.subject,
                                attachments:obj.attachments,
                                message_id:obj.messageId,
                                date:obj.date

                            }
                        });
                        resolve(d);
                    })
                });
            });
        });
    }); }

我试过了,它返回整个收件箱,我想要特定的消息线程。

代码中的这一行表示搜索所有消息:

            var searchCriteria = ['ALL'];

真的很清晰的代码,你不同意吗?如果你尝试更像

            var searchCriteria = ['OR HEADER "Message-ID" "' + id + '" HEADER "References" "' + id + '"'];

然后你将只搜索你想要的消息,然后你可以检索他们的 headers 和正文并做任何你想做的事情。

我试过了

var searchCriteria = [['HEADER','IN-REPLY-TO',messageId]];

它运行良好。