MailSlurpとは主にテストや開発用途を目的とした、ダミーのメールアドレスと、その送受信が可能なAPIを提供しているWebサービスです。利用言語は英語のみです。
無料版と有料版があり、無料版では以下のような制限があります。
- メールアドレスに有効期限があり、期限を過ぎるとメールアドレスが無効となり受信メールが消える
- メールアドレスの生成は月50回まで
- メールの送受信はそれぞれ月100通まで
詳細は価格表をご確認ください。Starterプランにすれば、実用上問題になるケースはあまりないでしょう。
目次
1. Emailテストの作成方法
1-1. 「API access key」を取得する
トップページ右上の「Sign up」ボタンからアカウント作成を行い、ログイン後DashboardにてAPI access keyをコピーします。
1-2. 「Inbox ID」を取得する
テスト内で利用するメールアドレスを生成します。
ランダムな値が生成されるため、ドメインを含まないInbox IDをコピーします。
1-3. 変数を定義し「API access key」「Inbox ID」をセットする
MagicPodのシークレット共有変数にMAIL_API_KEYを定義し、手順1-1で取得したAPI access keyをセットします。
次に「固定値を保存」コマンドを使い、変数INBOX_IDを定義し、手順1-1で取得したInbox IDをセットします。
1-4. 「Web APIコール」コマンドで受信トレイを空にする
ここで紹介する方法では受信トレイ内の1件目のメールを取得します。受信トレイに複数のメールが存在すると対象ではないメールを取得してしまう可能性があるため、まず受信トレイを空にします。このWeb APIコールはユーザ登録ボタンのクリック等のメールが送信される処理の前に実行してください。
このjson型のテキストをコピーし、テストケース編集画面に「ctrl + V」(Mac OSの場合は「command + V」)でペーストしてください。すると受信ボックスを空にするWeb APIコールのステップが追加されます。
{"command_calls": [{"command": "web_api","val": [{"url": "https://api.mailslurp.com/emails","method": "delete","header": [{"key": "x-api-key","value": "${MAIL_API_KEY}"}],"body": {"format": "raw","form_data": [],"raw": ""},"result": {"params": []}}]}],"project_id": 0,"version": "0"}
これを実行すると、受信ボックスが空となります。
もしコピー&ペーストでのステップ追加に失敗する場合は、Web APIコールのステップを追加し、以下項目をセットしてください。
メソッド: DELETE
URL: https://api.mailslurp.com/emails
ヘッダー: キーに「x-api-key」、値に「${MAIL_API_KEY}」
1-5. 「Web APIコール」コマンドでMail IDとメールタイトルを取得する
メールのIDを1件取得します。メールのタイトルも同時に取得することができます。このjson型のテキストをコピーし、テストケース編集画面に「ctrl + V」(Mac OSの場合は「command + V」)でペーストしてください。すると受信ボックスにあるメールを1件取得するWeb APIコールのステップが追加されます。
{"command_calls": [{"command": "web_api","val": [{"url": "https://api.mailslurp.com/inboxes/${INBOX_ID}/emails?minCount=1","method": "get","header": [{"key": "x-api-key","value": "${MAIL_API_KEY}"}],"result": {"params": [{"key": "MAIL_ID","value": "jsonResponse[0][\"id\"]"},{"key": "タイトル","value": "jsonResponse[0][\"subject\"]"}]}}]}],"project_id": 0,"version": "0"}
これを実行すると、変数「MAIL_ID」にメールID、変数「タイトル」にメールのタイトルが格納されます。
もしコピー&ペーストでのステップ追加に失敗する場合は、Web APIコールのステップを追加し、以下項目をセットしてください。
メソッド: GET
URL: https://api.mailslurp.com/inboxes/${INBOX_ID}/emails?minCount=1
ヘッダー: キーに「x-api-key」、値に「${MAIL_API_KEY}」
結果: 変数に「MAIL_ID」、Javascriptに「jsonResponse[0]["id"]」
変数に「タイトル」、Javascriptに「jsonResponse[0]["subject"]」
- URLのminCount=1は、受信ボックスのメール合計が1通以上になるまで待機することを意味します。この値は変更可能です。
- 結果の[0]は1件目のメールを意味します。1にすると2件目、2にすると3件目、... となります。 (最新のものを先頭にするオプションもあるようなのですが、うまく動作しませんでした。)
1-6. 「Web APIコール」コマンドでメールの本文を取得する
最後に手順1-5で取得したメールIDを元にメール本文を取得します。このjson型のテキストをコピーし、テストケース編集画面に「ctrl + V」(Mac OSの場合は「command + V」)でペーストしてください。すると手順1-5で取得したメールIDを元にメール本文を取得するWeb APIコールのステップが追加されます。
{"command_calls": [{"command": "web_api","val": [{"url": "https://api.mailslurp.com/emails/${MAIL_ID}/textLines","method": "get","header": [{"key": "x-api-key","value": "${MAIL_API_KEY}"}],"result": {"params": [{"key": "MAIL_CONTENTS","value": "jsonResponse[\"lines\"]"}]}}]}],"project_id": 0,"version": "0"}
これを実行すると、変数「MAIL_CONTENTS」にメールの本文が格納されます。
もしコピー&ペーストでのステップ追加に失敗する場合は、Web APIコールのステップを追加し、以下項目をセットしてください。
メソッド: GET
URL: https://api.mailslurp.com/emails/${MAIL_ID}/textLines
ヘッダー: キーに「x-api-key」、値に「${MAIL_API_KEY}」
結果: 変数に「MAIL_CONTENTS」、Javascriptに「jsonResponse["lines"]」
- htmlで本文を取り出したい場合はURLに「https://api.mailslurp.com/emails/${MAIL_ID}/html」を指定してください。
1-7. 補足事項
- 送信されたメールの内容は、MailSlurpのDashboardで確認できます。
- MailSlurpにはこの他にも以下のような様々なAPIがあります。詳細はMailSlurpのドキュメントをご確認ください。
- HTMLメール本文からCSSセレクタにマッチした部分を取得(/emails/${MAIL_ID}/htmlQuery)
- HTMLメール本文から正規表現にマッチした部分を取得(/emails/${MAIL_ID}/contentMatch)
- 特定の条件に合致するメールが受信ボックスに見つかるまで待機し、見つかったらその内容を取得(/waitForMatchingEmails)
- メールアドレスの削除(DELETEメソッドの/inboxes/${INBOX_ID})
- メール送信(POSTメソッドの/inboxes/${INBOX_ID})
- メールのヘッダ情報の取得(/emails/${MAIL_ID}の結果からjsonResponse["headers"]["ヘッダ名"]でデータを取得)
2. テストケースステップの具体例
2-1. メール本文に含まれたURLに遷移する
メールに記載されたURLに遷移することで新規会員登録を行うテストを作成してみましょう。
- テスト対象アプリにて「登録する」ボタンを押す
- 新規登録したメールアドレスにメールが送られる
- メールに記載されたURLをクリックし、会員登録を完了させる
XX様
ご登録ありがとうございます。受信から1時間以内に下記リンクからログインしてください。
https://example.com/qwertyuiop123456789
この場合、以下のテストケースステップでテストできます。
上記テストではステップ13の「正規表現に一致した部分を保存」コマンドで以下の正規表現を指定することで、メール本文からURLのみを取得しています。
https:\/\/example.com\/.+
2-2. メール本文に含まれた認証コードをアプリ内で入力する
メールに記載された認証コードをテスト対象アプリに入力することで新規会員登録を行うテストを作成してみましょう。
- テスト対象アプリにて「登録する」ボタンを押す
- 新規登録したメールアドレスにメールが送られる
- メールに記載された認証コードをアプリに入力し、会員登録を完了させる
XX様
ご登録ありがとうございます。受信から1時間以内にログインし、下記認証コードを入力してください。
認証コード: 123456
この場合、以下のテストケースステップでテストできます。
上記テストではステップ13の「正規表現に一致した部分を保存」コマンドで以下の正規表現を指定することで、メール本文から数字6桁のみを取得しています。
[0-9]{6}
より厳密に「認証コード: 」の後に記載された6桁の数字を取得したい場合は、以下の正規表現を使用すると良いでしょう。
(?<=認証コード: )([0-9]{6})
2-3. ランダムなメールアドレスを使用してテストを行う
Web APIにてInboxの作成を行うことで毎回異なるメールアドレスを使用してテストを行うことができます。詳しいWeb APIの仕様についてはこちらのページをご確認ください。また、契約プランによって毎月のInboxの作成可能数が異なりますのでご注意ください。
3. トラブルシューティング
3-1. API access keyの取得に失敗する
Web APIコールを行った際に、API access keyが誤っているとClient error. Status code 401 Unauthorizedエラーでテストが失敗し、APIレスポンスとして{"message":"User not found for API KEY `${MAIL_API_KEY}`...}が返ります。
その場合は共有変数MAIL_API_KEYが誤っている可能性が高いです。次の内容を確認してください。
- 共有変数MAIL_API_KEYが正しく定義されているか
- テスト実行時に共有変数MAIL_API_KEYが定義されているテスト実行設定を使用しているか
3-2. Mail IDの取得に失敗する
MailSlurpではMail IDを取得するWeb API実行時に検索条件に合致したメールがない場合、APIレスポンスとして{"message":"Failed to satisfy email query for inbox ID `xxx` for user ID `xxx`. Expected minimum message count of `1`. Found at most `0`...}が返ります。この場合、Mail IDを取得するWeb APIの実行時にまだメールを受信していないことが原因である可能性が高いです。
以下のようにメール送信のトリガーとなるステップ(「登録する」等)とMail IDを取得する「Web APIコール」ステップの間に「秒間待つ」コマンドを挿入してください。待機秒数については適宜調整ください。
待機コマンドを追加しても失敗する場合はそもそもメールの受信に失敗している可能性があります。MailSlurpにログインし、対象のInboxにメールが受信されているか確認してください。