捕获 qq邮箱收件箱状态

因为最近的一些练习,需要使用到捕获收件箱的邮件内容,所以实现了一下,这里记录一下。

首先去 qq邮箱

如上图,点击设置,选择账号,选择POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击开启服务,根据提示操作,然后会给你一个授权码,记住这个码。

回到代码

npm install imap mailparser
const Imap = require("imap");
const { simpleParser } = require("mailparser");

// 配置IMAP信息
const imapConfig = {
  user: "********", // 你的QQ邮箱
  password: "*****", // 授权码
  host: "imap.qq.com",
  port: 993,
  tls: true,
};

function fetchEmails() {
  return new Promise((resolve, reject) => {
    const imap = new Imap(imapConfig);

    imap.once("ready", () => {
      imap.openBox("INBOX", true, (err, box) => {
        if (err) throw err;

        // 搜索所有邮件并获取最新一封邮件
        imap.search(["ALL"], (err, results) => {
          if (err) throw err;

          if (results.length === 0) {
            console.log("No emails found.");
            return imap.end();
          }

          const latestEmailId = results[results.length - 1]; // 获取最新的一封邮件ID
          const fetch = imap.fetch(latestEmailId, { bodies: "" });

          fetch.on("message", (msg, seqno) => {
            let buffer = "";

            msg.on("body", (stream) => {
              stream.on("data", (chunk) => {
                buffer += chunk.toString("utf8");
              });

              stream.on("end", async () => {
                const parsed = await simpleParser(buffer);
                console.log(`Subject: ${parsed.subject}`);
                console.log(`From: ${parsed.from.text}`);
                console.log(`Date: ${parsed.date}`);
                console.log(`Body: ${parsed.text}`);
                resolve(parsed);
                return parsed;
              });
            });
          });

          fetch.on("error", (err) => {
            console.log("Fetch error: " + err);
          });

          fetch.on("end", () => {
            console.log("Done fetching the latest email!");
            imap.end();
          });
        });
      });
    });

    imap.once("error", (err) => {
      reject(err)
      console.log(err);
    });

    imap.once("end", () => {
      console.log("Connection ended");
    });

    imap.connect();
  });
}

module.exports = { fetchEmails };

通过以上代码,你就可以获取到对应 qq邮箱最后一条邮件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值