使用Node.js 来组合邮件接收处理和Puppeteer
我并不是在做什么新的东西,只是将邮件接收处理与puppeteer结合起来,将自动化测试的流程应用于类似发送预注册邮件给输入的邮箱地址,从注册到注销的网站流程中。
安装软件包
完成电子邮件解析所需要的软件包是
inbox
iconv
mailparser
这3个。
$ npm install inbox iconv mailparser
临时注册处理
function preRegSite(email) {
const puppeteer = require('puppeteer');
puppeteer.launch({
headless: false,
slowMo: 50
}).then(async browser => {
// 新規タブ
const page = await browser.newPage();
// 仮登録ページへ移動
await page.goto("https://sitedomain.com/regist/", {timeout: 120000, waitUntil: "domcontentloaded"});
// 仮登録の処理諸々
// 省略
return ;
});
}
注册流程
function regSite(reg_url) {
const puppeteer = require('puppeteer');
puppeteer.launch({
headless: false,
slowMo: 50
}).then(async browser => {
// 新規タブ
const page = await browser.newPage();
// 本登録ページへ移動
await page.goto(reg_url, {timeout: 120000, waitUntil: "domcontentloaded"});
// 本登録の処理諸々
// 省略
return ;
});
}
解析邮件处理
const inbox = require('inbox');
const simpleParser = require('mailparser').simpleParser;
const iconv = require('iconv');
const conv = new iconv.Iconv("ISO-2022-JP", "UTF-8");
const email = "emailsample@gmail.com";
const emailPw = "password1234";
var client = inbox.createConnection(false, 'imap.gmail.com', {
secureConnection: true,
auth: {
user: email,
pass: emailPw
}
});
client.on('connect', function() {
console.log('mail server connected');
client.openMailbox('INBOX', function(error) {
if (error) throw error;
});
});
client.on("new", function(message) {
var stream = client.createMessageStream(message.UID);
var from = message.from.address
simpleParser(stream)
.then(mail => {
// 本文取得
var body = conv.convert(mail.text).toString();
// メールアドレスチェック
if (from.match(/登録メールのメアドをマッチさせる正規表現/)) {
// 本文チェック
var match = body.match(/本登録URLを見つける正規表現/);
if (match) {
// 目的のメール受け取ったらメール受信は止める
client.close();
// メール受け取った時にしたい処理
// 取得した本登録URLはmatch[0]で使う
}
}
})
.catch(err => {
console.log(err);
});
});
组合
使用「仮登録処理」、「本登録処理」和「邮件解析处理」的组合方式。
preRegCard(); // 仮登録
client.connect(); // メール受け取ったら登録キック
寫著「郵件解析處理」,希望在收到郵件時執行的處理。
regSite(match[0]);
当加入此条件时
大致的流程是,进行临时注册处理,收到邮件后从正文中提取出注册URL,将该URL传递给正式注册处理,执行正式注册。