使用 Node.Js 读取电子邮件数据

2025-06-08

使用 Node.Js 读取电子邮件数据

你有没有想过读取电子邮件数据,并做出决定,比如将其标记为已读或执行其他操作?也许你正在做一个项目,需要读取用户的电子邮件,然后将数据保存到数据库中。

闲话少叙,我们开始工作吧……

首先,使用某种协议(SMTP、IMAP、POP)连接到邮件服务器,以便从邮件服务中读取邮件。邮件服务可以是 Gmail、Yahoo、Outlook 等。

本教程使用 Imap 读取电子邮件,并将使用两个包来开始实现这个神奇的功能。

  1. imap:这有助于我们连接到电子邮件服务器并以流的形式检索电子邮件

  2. mailparser:我们将使用它将流数据解析为可读格式。

第一步是运行以下命令来设置项目并安装必要的包。

mkdir imap-client
npm init -y 
touch index.js
yarn add imap mailparser
Enter fullscreen mode Exit fullscreen mode

其次,我们需要将我们的电子邮件凭证添加到我们的 index.js 文件中。

const Imap = require('imap');
const {simpleParser} = require('mailparser');
const imapConfig = {
  user: 'youremail@gmail.com',
  password: 'secret',
  host: 'imap.gmail.com',
  port: 993,
  tls: true,
};
Enter fullscreen mode Exit fullscreen mode

接下来,我们在 index.js 文件中编写一个脚本来读取电子邮件,然后解析它以获取发件人、主题和正文。

const getEmails = () => {
  try {
    const imap = new Imap(imapConfig);
    imap.once('ready', () => {
      imap.openBox('INBOX', false, () => {
        imap.search(['UNSEEN', ['SINCE', new Date()]], (err, results) => {
          const f = imap.fetch(results, {bodies: ''});
          f.on('message', msg => {
            msg.on('body', stream => {
              simpleParser(stream, async (err, parsed) => {
                // const {from, subject, textAsHtml, text} = parsed;
                console.log(parsed);
                /* Make API call to save the data
                   Save the retrieved data into a database.
                   E.t.c
                */
              });
            });
            msg.once('attributes', attrs => {
              const {uid} = attrs;
              imap.addFlags(uid, ['\\Seen'], () => {
                // Mark the email as read after reading it
                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');
  }
};

getEmails();

Enter fullscreen mode Exit fullscreen mode

最后,运行并不要忘记关闭 Gmail 的“不太安全的应用程序”

node index.js
Enter fullscreen mode Exit fullscreen mode

让我们做一些解释。

imap.search(['UNSEEN', ['SINCE', new Date()]], (err, results) => {}
Enter fullscreen mode Exit fullscreen mode

上述函数会遍历您的邮箱,获取当天所有未查看/未读邮件。您可以自由地将日期过滤器更改为您想要的任何日期。此外,您还可以将“SINCE”属性更改为“BEFORE”、“ON”等。

您可以将“UNSEEN”属性更改为“ALL”、“NEW”等。

simpleParser(stream, async (err, parsed) => {}
Enter fullscreen mode Exit fullscreen mode

simpleParser 函数返回已解析的数据,其中包含收到的电子邮件的详细信息,如(发件人、主题、textAsHtml、文本)等

imap.addFlags(uid, ['\\Seen'], () => {}
Enter fullscreen mode Exit fullscreen mode

您还可以决定向已读电子邮件添加标记,例如将其标记为已读、已读。

就这些!!!

完整课程代码可在此处查看

参考
https://www.npmjs.com/package/imap
https://www.npmjs.com/package/mailparser

鏂囩珷鏉ユ簮锛�https://dev.to/akinmyde/reading-email-data-with-node-js-bjf
PREV
在 Express 中即时生成文档
NEXT
拓扑排序,解决谷歌面试题