You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中使用imap将邮件正文与Base64附件存入同一JSON对象

解决方案

你之前用simpleParser拿不到附件的核心原因是fetch阶段只请求了邮件头部字段,没有拉取完整的邮件源内容,所以解析器无法识别附件数据,也就不需要单独走attributes相关逻辑获取附件。按如下方案修改即可直接拿到base64编码的附件内容,存入你需要的JSON对象:

核心修改点

  • 调整fetch的bodies参数为'RFC822'拉取完整邮件源
  • simpleParser解析出的attachments数组内自带Buffer格式的附件内容,直接调用toString('base64')即可得到你需要的编码结果

修正后完整代码

const mailList = []; // 存储所有解析完成的邮件JSON对象

var imap = new Imap(/* 替换为你的imap连接配置 */);

imap.once('ready', function() {
  imap.openBox('INBOX', true, function(err, box) {
    if (err) throw err;
    // 拉取收件箱前3封邮件的完整内容
    var f = imap.seq.fetch('1:3', {
      bodies: 'RFC822', // 核心修改:拉取完整邮件源,不再仅拉取头部
      struct: false // 不需要struct属性,直接关闭即可
    });
    f.on('message', function(msg, seqno) {
      msg.on('body', function(stream, info) {
        // 传入邮件流到simpleParser解析
        simpleParser(stream).then(parsed => {
          // 批量处理附件转base64
          const formattedAttachments = parsed.attachments.map(attItem => {
            return {
              filename: attItem.filename || '未命名附件',
              contentType: attItem.contentType,
              size: attItem.size,
              base64Content: attItem.content.toString('base64')
            }
          })
          // 组装符合你要求的JSON结构
          const mail = {
            date: parsed.date,
            Subject: parsed.subject,
            Sender: parsed.from.value,
            Receiver: parsed.to.value,
            Attachment: formattedAttachments.length > 0 ? formattedAttachments : null
          }
          mailList.push(mail);
          // 可在此处添加后续存储逻辑
        }).catch(parseErr => {
          console.error('第' + seqno + '封邮件解析失败:', parseErr);
        })
      });
    });
    f.on('end', function() {
      console.log('所有邮件拉取解析完成,共' + mailList.length + '封');
      imap.end();
    });
    f.on('error', function(fetchErr) {
      console.error('邮件拉取失败:', fetchErr);
    })
  });
});

imap.connect();

注意事项

  • 如果需要拉取的邮件体积较大,建议调整拉取范围分批处理,避免内存占用过高
  • 该方案完全不需要处理msg.once('attributes',...)相关逻辑,所有邮件数据可通过simpleParser一次解析得到

内容的提问来源于stack exchange,提问作者Nikki Gonzales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:09:03