如何在 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]];
它运行良好。
我想使用特定的 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]];
它运行良好。