使用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传递给正式注册处理,执行正式注册。

广告
将在 10 秒后关闭
bannerAds