简介
很多时候比如我们需要收取一些应用注册的验证码或者其他信息,我们都需要登录邮箱账号查看,但如果多账号多次重复收取信息则显得比较麻烦,所以我们利用mailPaser库结合nodejs在腾讯云Lighthouse上做一个邮件收取功能。并简要阐述购买Lighthouse和搭建的一步步过程。
步骤
1.购买腾讯云Lighthouse
打开腾讯云网址,左上角活动里面新用户可以参与限时秒杀购买;也可以直接左上角产品中找到轻量应用服务器购买即可。(建议系统选择CentOS7.6或8.0即可)
2.登录并安装相关程序
打开轻量应用服务器管理页面,例如下图中,可以利用腾讯云自带的登录功能亦可以自行利用其它ssh登录工具进行登录操作。
登录后,首先可以进行yum源的更新,yum update
,然后安装nodejs,yum install nodejs -y
,至出现complete即可
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大法。
谢谢!