因为最近的一些练习,需要使用到捕获收件箱的邮件内容,所以实现了一下,这里记录一下。
首先去 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邮箱最后一条邮件了。