如何使用imapflow只获取未读邮件?



早上好,我在工作中使用这个库,我有一个问题。

当我连接到imapflow邮件服务器时,它返回所有邮件,但我无法区分哪些是已读的,哪些是未读的。

我一直在阅读文档(https://imapflow.com/),但我找不到任何帮助我的东西。我也试过使用滤镜,但没有效果。

你能帮帮我吗?

我留下了我试图获取未读电子邮件的代码片段。

非常感谢你的帮助。

const main = async (client) => {
let envelope = [];
await client.connect();
// At this point I have set the variable unseen to true but it doesn't work :(
let lock = await client.getMailboxLock('INBOX', {unseen: true});
try {
let message = await client.fetchOne('*', { source: true });
//console.log(message.source.toString());
for await (let message of client.fetch('1:*', { envelope: true })) {

envelope.push(message.envelope)
}
} finally {
lock.release();
}
await client.logout();
let reverse_envelope = envelope.reverse();
return reverse_envelope
};

对于imapflow,解决方案非常简单:

您可以使用client.fetch()方法,SearchObject作为第一个参数。作为第二个参数,可以使用FetchQueryObject:

await client.fetch({ seen: false }, { envelope: true });

作为FetchQueryObject传入的内容可能会有所不同,您也可以将不同的选项传递给SearchObject,更多信息可以在文档中找到:)

我正在使用这个代码:

let emails; 
for await (let msg of client.fetch(
{ seen: false },
{
flage: true,
envelope: true,
source: false,
bodyParts: true,
bodyStructure: true,
uid: true, 
}
)) {
emails.push(msg);
}
// use emails here

但是:请确保仅在当前锁定邮箱时才使用此代码,否则您将始终得到一个空数组。

最新更新