如何用Node.js的nodemailer读取收件箱邮件主题?
解决Nodemailer无法读取收件箱邮件主题的问题
Nodemailer的核心功能是发送邮件,并不提供收件箱读取能力。要读取收件箱邮件主题,需要借助支持IMAP/POP3协议的工具库,搭配邮件解析库实现。
实现方案
- 先安装所需依赖:
imap-simple用于建立IMAP连接读取邮件头,mailparser可辅助解析复杂编码的邮件内容npm install imap-simple mailparser - 编写读取收件箱主题的代码示例:
const imaps = require('imap-simple'); const { simpleParser } = require('mailparser'); // 邮箱IMAP配置(需提前开启对应邮箱的IMAP服务) const imapConfig = { imap: { user: '你的邮箱账号', password: '邮箱授权码', // 注意:部分邮箱需用授权码而非登录密码 host: 'imap.xxx.com', // 例如imap.qq.com、imap.gmail.com port: 993, tls: true, authTimeout: 3000 } }; async function fetchInboxSubjects() { // 建立IMAP连接 const connection = await imaps.connect(imapConfig); await connection.openBox('INBOX'); // 搜索条件:这里取全部邮件,也可改为['UNSEEN']取未读邮件 const searchRules = ['ALL']; // 只获取邮件头信息(包含主题),避免加载冗余内容 const fetchOptions = { bodies: ['HEADER'], markSeen: false // 是否将读取的邮件标记为已读 }; const mailList = await connection.search(searchRules, fetchOptions); const subjectList = []; for (const mail of mailList) { const headerData = mail.parts[0].body; // 解析邮件主题(自动处理编码转换) const mailSubject = imaps.parseHeader(headerData).subject[0]; subjectList.push(mailSubject); } // 关闭连接 await connection.end(); return subjectList; } // 调用示例 fetchInboxSubjects().then(subjects => { console.log('收件箱邮件主题:', subjects); // 后续业务逻辑处理 }).catch(err => { console.error('读取失败:', err); });
关键注意点
- 必须开启对应邮箱的IMAP服务(如QQ邮箱需在设置中开启IMAP并生成授权码)
- 不同邮箱的IMAP地址、端口可能有差异,需根据邮箱官方文档调整配置
- 若需解析完整邮件内容,可修改
fetchOptions获取邮件正文,再用simpleParser进行解析
内容的提问来源于stack exchange,提问作者Sndeep
相关产品推荐
相关产品推荐

