Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在NodeJS中使用IMAP通过messageId获取电子邮件线程?_Javascript_Node.js_Smtp_Imap_Nodemailer - Fatal编程技术网

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

Javascript 如何在NodeJS中使用IMAP通过messageId获取电子邮件线程?,javascript,node.js,smtp,imap,nodemailer,Javascript,Node.js,Smtp,Imap,Nodemailer,我想使用特定的messageId获取整个回复线程,比如2a2b0f84-261c-ecd5-33bf-919548b76000@hotmail.com 我试过这个: const getInbox = () => { return new Promise((resolve, reject) => { imaps.connect(config).then(function (connection) { return connecti

我想使用特定的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 + '"'];
然后,您将只搜索您想要的消息,然后您可以检索它们的标题和正文,并执行任何您想要的操作。

我尝试了这个

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

它工作正常。

您是否忘记将消息id放入代码中?标题文本“”看起来是获取邮箱中每封邮件的好方法。您能告诉我如何在搜索条件中指定messageId吗???IIRC应该匹配直接回复,但不匹配回复。如何获取回复回复?如上所述。使用该解决方案时,我会收到“错误:意外搜索选项:或标题”消息ID“895C473F-E9E5-47FF-C498-5E28A6692EDF@ZIBTEK.IN“标题”参考“895C473F-E9E5-47FF-C498-5E28A6692EDF@ZIBTEK.IN“”我刚刚测试过,搜索键是有效的。我使用的完整命令是
x搜索或标题“MESSAGE-ID”895C473F-E9E5-47FF-C498-5E28A6692EDF@ZIBTEK.IN“标题”参考“895C473F-E9E5-47FF-C498-5E28A6692EDF@ZIBTEK.IN“
。你必须注意空格和穿孔,IMAP是一个严格的协议,而不是一个松散的协议。对于Gmail和Hotmail,它工作得很好,但对于yahoo,它不工作,它通过“UID搜索服务器错误-请稍后再试”。可能要打开调试并获取协议日志。“请稍后再试”听起来不像是代码中有什么错误,更像是服务器上的负载问题。但是要有协议日志。