如何在node-imap的新邮件事件中获取邮件的相关信息
你当前使用的node-imap库的mail事件仅会推送新邮件的数量,不会直接返回邮件详情,需要主动拉取最新邮件的原始数据并解析后才能拿到你需要的三个字段,推荐搭配mailparser库解析邮件MIME格式,避免手动处理格式的麻烦。
第一步:安装依赖
npm install node-imap mailparser
调整后的完整可运行代码
let Imap = require('node-imap') const { simpleParser } = require('mailparser') let imap = new Imap({ user: '***@gmail.com', password: '***', host: 'imap.gmail.com', port: 993, tls: true }); imap.on('ready', () => { imap.openBox('INBOX', true, (err, box) => { if (err) console.log(err) else console.log('Recipient is ready for accepting') }) }) imap.on('mail', () => { // 拉取最新1封邮件 const fetch = imap.seq.fetch('*', { bodies: '' }) fetch.on('message', msg => { msg.on('body', stream => { // 解析邮件原始流 simpleParser(stream, (err, parsed) => { if (err) return console.log(err) // 提取所需字段 const senderEmail = parsed.from.value[0].address const emailTitle = parsed.subject const emailContent = parsed.text console.log(`Email author: ${senderEmail} Title: ${emailTitle}, Description: ${emailContent}`) }) }) }) fetch.on('error', err => console.log('Fetch error: ' + err)) }) imap.connect()
注意事项
- 如果你使用的是Gmail邮箱,需要先在邮箱设置中开启IMAP权限,若账号开启了二次验证,需要使用谷歌生成的应用密码替代账号密码填写到配置中。
- 若需要同时处理多封新邮件,可以修改
imap.seq.fetch的第一个参数,比如获取最新5封邮件写为'*:4'即可。
内容的提问来源于stack exchange,提问作者Shade
相关产品推荐
相关产品推荐

