使用 Node.Js 读取电子邮件数据
你有没有想过读取电子邮件数据,并做出决定,比如将其标记为已读或执行其他操作?也许你正在做一个项目,需要读取用户的电子邮件,然后将数据保存到数据库中。
闲话少叙,我们开始工作吧……
首先,使用某种协议(SMTP、IMAP、POP)连接到邮件服务器,以便从邮件服务中读取邮件。邮件服务可以是 Gmail、Yahoo、Outlook 等。
本教程使用 Imap 读取电子邮件,并将使用两个包来开始实现这个神奇的功能。
-
imap:这有助于我们连接到电子邮件服务器并以流的形式检索电子邮件
-
mailparser:我们将使用它将流数据解析为可读格式。
第一步是运行以下命令来设置项目并安装必要的包。
mkdir imap-client
npm init -y
touch index.js
yarn add imap mailparser
其次,我们需要将我们的电子邮件凭证添加到我们的 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,
};
接下来,我们在 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();
最后,运行并不要忘记关闭 Gmail 的“不太安全的应用程序”
node index.js
让我们做一些解释。
imap.search(['UNSEEN', ['SINCE', new Date()]], (err, results) => {}
上述函数会遍历您的邮箱,获取当天所有未查看/未读邮件。您可以自由地将日期过滤器更改为您想要的任何日期。此外,您还可以将“SINCE”属性更改为“BEFORE”、“ON”等。
您可以将“UNSEEN”属性更改为“ALL”、“NEW”等。
simpleParser(stream, async (err, parsed) => {}
simpleParser 函数返回已解析的数据,其中包含收到的电子邮件的详细信息,如(发件人、主题、textAsHtml、文本)等
imap.addFlags(uid, ['\\Seen'], () => {}
您还可以决定向已读电子邮件添加标记,例如将其标记为已读、已读。
就这些!!!
参考
https://www.npmjs.com/package/imap
https://www.npmjs.com/package/mailparser