让 imapflow 和 mailparser 以特定的时间间隔不断获取新消息

问题描述 投票:0回答:1

已经在这里呆了两天了...... 我让它们工作,一切都很好,但我需要不断收到新电子邮件,而不仅仅是一次或当我调用该函数时。

这是我的代码

const main = async () => {
  // Wait until client connects and authorizes
  await client.connect();

  // Select and lock a mailbox. Throws if mailbox does not exist
  let lock = await client.getMailboxLock("INBOX");
  // let mailbox = await client.mailboxOpen("INBOX");
  try {
    for await (let message of client.fetch(
      { seen: false },
      {
        envelope: true,
        internalDate: true,
        bodyStructure: true,
        flags: true,
        source: true,
      }
    )) {
      let parsed = await simpleParser(message.source);
      // const iconv = new Iconv("utf-8");
      app.get("/test", async (req, res) => {
        res.render("test.ejs", {
          parsed: parsed.text,
        });
      });
      console.log(message.bodyStructure.parameters);
      console.log("Message UID: " + message.uid);
      console.log("Date: " + parsed.date);
      console.log("From Email: " + parsed.from.value[0].address);
      console.log("Subject: " + parsed.subject);
      // console.log(strin.toString().split("").reverse().join(""));
      console.log("To: " + parsed.to.value[0].address);
      console.log("Message as Text: " + parsed.text);
      console.log("Message as HTML: " + parsed.html);
    }
    // Adds \\Seen flag to unseen messages
    await client.messageFlagsAdd({ seen: false }, ["\\Seen"]);
  } finally {
    // Make sure lock is released, otherwise next `getMailboxLock()` never returns
    lock.release();
  }
  await client.logout();
};
main().catch((err) => console.error(err));

可能有什么解决方案,我查看了 cron 但它不是一个好的解决方案。 首次运行后 imapflow 不断出现错误

错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入

现在该模块的所有者说您需要使用另一个连接,这是他就他提出的问题向某人提供的答案。 但不知道如何解决这个问题,而且 imapflow 没有大量的受众来寻找答案。

如有任何帮助,我们将不胜感激。

node.js imapflow
1个回答
0
投票

不要在 main 中调用 client.connect,这可能会导致此问题。 尝试这样的事情:

client.connect().then(async () => {
  // better add rest of the code in a method and call that here
  await fetchNewMails();
});

并且有一个事件侦听器将不断检查新邮件

  client.on('exists',async () => {
    await fetchNewMails();
  });

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.