Как получить ветку ответа по электронной почте, используя messageId? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь получить всю ветку электронной почты из входящих сообщений, используя идентификатор сообщения. Для этого я использую npm пакет «imap-simple». Я пытался использовать критерии поиска var searchCriteria = [['HEADER','IN-REPLY-TO',messageId]];, но я получаю ответы только для основной темы. Я хочу получить целые ответы (ответы ответов) из папки «Входящие». Я пробовал var searchCriteria = [['OR', ['HEADER', 'IN-REPLY-TO', messageId], ['HEADER', 'REFERENCES', messageId]]];, но ни один из них не помогает. Пожалуйста, помогите мне с необходимостью. Я включил весь метод ниже для вашей справки. Заранее спасибо

    const getInbox = (imapConfig, messageId) => {
return new Promise((resolve, reject) => {
    let config = {
        imap: {
            user: imapConfig.smtp_settings.auth.username,
            password: aesHelper.decrypt(imapConfig.smtp_settings.auth.password),
            host: imapConfig.smtp_settings.imap_host,
            port: imapConfig.smtp_settings.imap_port,
            tls: true,
            tlsOptions:{rejectUnauthorized:false},
            authTimeout: 3000
        }
    }
    Imap.connect(config).then(function (connection) {
        return connection.openBox('INBOX').then(function () {
            var searchCriteria = [['OR', ['HEADER', 'IN-REPLY-TO', messageId], ['HEADER', 'REFERENCES', messageId]]];
            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 => {
                    connection.end();
                    let d = data.map(obj => {
                        return {
                            from: obj.from.value.map(obj => obj.address).join(','),
                            to: obj.to.value.map(obj => obj.address).join(','),
                            subject: obj.subject,
                            // body:obj.textAsHtml,
                            body: obj.html,
                            attachments: obj.attachments,
                            message_id: obj.messageId,
                            in_reply_to: obj.inReplyTo,
                            date: obj.date

                        };
                    });
                    resolve(d);
                })
            });
        });
    }).catch(err => {
        reject(err);
    });
});

}

...