【玩转Lighthouse】nodejs抓取邮箱收件信息

2022-04-14 16:11:30 浏览数 (1)

简介

很多时候比如我们需要收取一些应用注册的验证码或者其他信息,我们都需要登录邮箱账号查看,但如果多账号多次重复收取信息则显得比较麻烦,所以我们利用mailPaser库结合nodejs在腾讯云Lighthouse上做一个邮件收取功能。并简要阐述购买Lighthouse和搭建的一步步过程。

步骤

1.购买腾讯云Lighthouse

打开腾讯云网址,左上角活动里面新用户可以参与限时秒杀购买;也可以直接左上角产品中找到轻量应用服务器购买即可。(建议系统选择CentOS7.6或8.0即可)

image.pngimage.png

2.登录并安装相关程序

打开轻量应用服务器管理页面,例如下图中,可以利用腾讯云自带的登录功能亦可以自行利用其它ssh登录工具进行登录操作。

image.pngimage.png

登录后,首先可以进行yum源的更新,yum update,然后安装nodejs,yum install nodejs -y,至出现complete即可

image.pngimage.png

3.创建目录开始写代码

目录自行选择,比如我们可以在/usr/local/下创建一个nodejs目录mkdir -p /usr/local/nodejs,并移动到此目录下cd /usr/local/nodejs/,编辑名为fuckMail.js文件,vim fuckMail.js名称也可以自行选择哈~(推荐使用VScode的Remote-ssh插件,远程连接写代码更高效儿~)

写入如下代码,相关注意事项已在注释中说明,注意更改。(已注释掉认为不必要的代码,亦可自行增加)

代码语言:txt复制
var Imap = require('imap')
var http = require('http')
var querystring = require('querystring')//可以结合http模块改造成一个API使用更高效
var MailParser = require("mailparser").MailParser
var fs = require("fs")

var imap = new Imap({
    user: 'abcdefg@outlook.com', //你的邮箱账号
    password: 'tencentpointcom', //你的邮箱密码
    host: 'outlook.office365.com', //邮箱服务器的主机地址
    port: 993, //邮箱服务器的端口地址
    tls: true, //使用安全传输协议
    tlsOptions: { rejectUnauthorized: false } //禁用对证书有效性的检查
});

function openInbox(cb) {
    imap.openBox('INBOX', true, cb);
}

imap.once('ready', function () {
    openInbox(function (err, box) {
        // console.log("打开邮箱")
        if (err) throw err;
        imap.search(['UNSEEN', ['SINCE', 'Jun 1, 2021']], function (err, results) {//搜寻2021 6 1后未读
            if (err) throw err;
            var f = imap.fetch(results, { bodies: '' });//抓取邮件(默认情况下邮件服务器的邮件是未读状态)
            f.on('message', function (msg, seqno) {
                var mailparser = new MailParser();
                msg.on('body', function (stream, info) {
                    stream.pipe(mailparser);//将为解析的数据流pipe到mailparser
                    //邮件头内容
                    // mailparser.on("headers", function (headers) {
                    //     console.log("邮件头信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                    //     console.log("邮件主题: "   headers.get('subject'));
                    //     console.log("发件人: "   headers.get('from').text);
                    //     console.log("收件人: "   headers.get('to').text);
                    // });
                    mailparser.on("data", function (data) {
                        //xxxxxxx注册邮箱验证码获取,注意subject和下面正则表达式自行替换
                        if (data.type === 'text' && this.headers.get('subject') === '注册邮箱验证') {
                            var regex = /<span style=. >(d{6})</span>/g;
                            var contents = JSON.stringify(data.html);
                            var matches = regex.exec(contents);
                            if (matches) {
                                console.log("code:"   matches[1]);
                            }
                        }

                        //xxxxxxxx注册邮箱验证码英文,也是注意自行替换
                        if (data.type === 'text' && this.headers.get('subject') === (' Email Verification')) {
                            var regex = /<span style=. >(d{6})</span>/g;
                            var contents = JSON.stringify(data.html);
                            var matches = regex.exec(contents);
                            if (matches) {
                                console.log("code:"   matches[1]);
                            }
                        }

                        // if (data.type === 'attachment') {//附件
                        //     console.log("邮件附件信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                        //     console.log("附件名称:"   data.filename);//打印附件的名称
                        //     data.content.pipe(fs.createWriteStream(data.filename));//保存附件到当前目录下
                        //     data.release();
                        // }
                    });
                });

                // // 邮件索引
                // msg.once('end', function () {
                //     console.log(seqno   '完成');
                // });
            });

            f.once('error', function (err) {
                console.log('抓取出现错误: '   err);
            });

            f.once('end', function () {
                // console.log('所有邮件抓取完成!');
                imap.end();
            });
        });
    });
});

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

imap.once('end', function () {
    // console.log('关闭邮箱');
});
imap.connect();

4.运行

执行node fuckMail.js即可在控制台输出你想得到的~

切记代码根据自己需要自行修改补充,不是CV大法。

谢谢!

0 人点赞