目新しいことをしているわけではないんですが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を本登録処理に渡して本登録が実行できる
といった感じです