PlaywrightなどのE2Eテスト自動化のフレームワークを使っていると、だんだんとメールに絡むテストをやりたくなってきます。
アカウント登録、ログイン、承認など多くの手順で登場するので、メールの取り扱いができると幅が広がります。そしてメール絡みの問題連絡って多いですからね…(遠い目
MailSlurpの関連情報
簡単に言うとAPIでメールボックスと対応するメールアドレスを作成し、メールの送受信ができる。それがAPIで操作できる、というものです。
自動化に必要なモノは十分ある感じです。
参考情報
- MailSlurp公式サイトから見るのがよいでしょう
- APIキー獲得、簡単な動作確認まではMagicPodさんの情報も参考となります
- Pythonの場合の参考:アカウント作成時のメール認証リンクをMailSlurp + Pythonで踏んでみた
実施記録メモ(登録から動作確認まで)
1. アカウント作成、APIキー獲得
- 気になる人は参考情報を見てください
2. APIでメールボックス(Inbox)を作成してみる
(Windows派なので)Powershellで実行はこんな感じ。
Invoke-RestMethod -Method Post -Uri https://api.mailslurp.com/inboxes?apiKey=[取得したAPIキー]
作ったものを削除する場合は以下。
Invoke-RestMethod -Method Delete -Uri https://api.mailslurp.com/inboxes?apiKey=[取得したAPIキー]
これらの操作はMailSlurpのアカウント作成後のダッシュボードからも操作可能なので、そちらから実施してもよいものです。
メールボックス(Inbox)を作成すると、Inbox Id、メールアドレスを取得できます。これらの情報を使っていきます。
3. PythonのAPIでメールボックスの受信チェック
こちらのリンク先のサンプルコードで動きます。
メール受信のテストに使う場合には、Inbox内の全メール削除@MailSlurp→テスト自動化の処理でメール送信→受信処理@MailSlurp→受信したメールのAssert、という手続きでテストの成功までチェックできます。
TypeScriptに取り込むときのサンプル
PlaywrightだとTypeScriptで書く時が多いはずなので、サンプル置いときます。
PLAYER_MAILSLURP_AEC_API_KEY、PLAYER_MAILSLURP_AEC_INBOX_IDは.envに設定する前提です。
import { MailSlurp } from "mailslurp-client";
export { deleteAllEmail }
export { receiveEmail }
// ※ APIキーは公式ダッシュボードから取得
const apiKey = process.env.PLAYER_MAILSLURP_AEC_API_KEY || "";
// ※ Inbox IdはInboxを作成した後に取得
const inbox_id = process.env.PLAYER_MAILSLURP_AEC_INBOX_ID || "";
async function receiveEmail() {
const mailslurp = new MailSlurp({ apiKey });
const timeout = 20000;
try {
// メールが届くまで待機して最新の1通を取得
// 第3引数を true にすると未読のみを対象
const email = await mailslurp.waitForLatestEmail(inbox_id, timeout, false);
// 受信データの中身を確認
console.log(`送信元: ${email.from}`);
console.log(`件名: ${email.subject}`);
console.log(`本文(テキスト): ${email.body}`);
return email;
}
catch (error) {
console.error("メール受信エラー:", error);
}
}
async function deleteAllEmail() {
const mailslurp = new MailSlurp({ apiKey });
// メールボックスのメールをすべて削除する
const api_instance = mailslurp.emailController
await mailslurp.emptyInbox(inbox_id);
console.log("メールボックスのメールをすべて削除しました");
}
TIPSメモ
(自分が)あとで見直すためのメモです。
- Inboxは作成、削除がたやすい(dockerで作られてる)感じで、毎回削除を想定してるかも
- とはいえ、Inboxを意識的に消さないと永続的には使える
- いちおう、永続ではない前提でInbox/メールアドレスを作り直してもよいテスト自動化のつくりにする方がよさそう
- Freeのプランで月のメール受信が500件。軽いリグレッションを超えるなら有料プランが無難
- もうちょい安めの中間プランがあるとよいのですけどねぇ…
(おまけ)その他ツールメモ:Mailnator
Mailnatorも簡単なテストの際には役立つケースがあります。
- メールの文字列を任意に受信だけMailnatorのページで確認できます
- 捨てアカウントでのメールでは特に便利そうです
- とはいえ、各社のテストメール「丸見え」になるので、使用範囲は限られるかも
Read more: