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

Node.js中使用imap包搜索Gmail带附件邮件的方法

使用imap包搜索Gmail中带附件的邮件

要实现搜索带附件的Gmail邮件,你可以利用Gmail的IMAP扩展X-GM-RAW,直接传入Gmail原生搜索语法has:attachment即可。如果需要同时保留原有的发件人过滤条件,也可以把多个搜索规则合并到同一个字符串里。

修改核心搜索逻辑

只需替换imap.search的参数,将原有条件替换为包含X-GM-RAW的搜索规则:

// 仅搜索带附件的邮件
imap.search(['X-GM-RAW', 'has:attachment'], (err, results) => {
  // 原有处理逻辑不变
})

如果要同时筛选指定发件人+带附件的邮件,合并搜索条件即可:

imap.search(['X-GM-RAW', 'has:attachment from:rodrigo.barros.dsn@gmail.com'], (err, results) => {
  // 原有处理逻辑不变
})

完整修改后的代码

const Imap = require('imap');
const base64 = require('base64-stream')
var buffer = require("buffer");
var fs = require("fs");
const { simpleParser } = require('mailparser');
const imapConfig = {
  user: 'no-replay@mymail.com.br',
  password: 'mypass',
  host: 'imap.gmail.com',
  port: 993,
  tls: true,
};

const getEmails = () => {
  try {
    const imap = new Imap(imapConfig);
    imap.once('ready', () => {
      imap.openBox('INBOX', false, () => {
        // 修改为带附件+指定发件人的搜索条件
        imap.search(['X-GM-RAW', 'has:attachment from:rodrigo.barros.dsn@gmail.com'], (err, results) => {
          const f = imap.fetch(results, { bodies: '' });
          f.on('message', msg => {
            msg.on('body', stream => {
              simpleParser(stream, async (err, parsed) => {
                console.log('Imprimindo Parsed:')
                console.log(parsed);
                /* 这里可添加保存数据到数据库等业务逻辑 */
              });
            });
            msg.once('attributes', attrs => {
              const { uid } = attrs;
              imap.addFlags(uid, ['\\Seen'], () => {
                console.log('Marked as read!');
              });
            });
          });
          f.once('error', ex => {
            return Promise.reject(ex);
          });
          f.once('end', () => {
            console.log('Done fetching all messages!');
            imap.end();
          });
        });
      });
    });

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

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

    imap.connect();
  } catch (ex) {
    console.log('an error occurred');
  }
};

关键说明

  • X-GM-RAW是Gmail对IMAP协议的扩展字段,支持所有Gmail网页端的搜索语法,比如in:unread、filename:pdf等都可以直接用在这里。
  • 多个搜索条件通过空格分隔合并,格式和你在Gmail搜索框输入的完全一致。

内容的提问来源于stack exchange,提问作者Rodrigo Alves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:31:26