アカウント作成時のメール認証リンクをMailSlurp + Pythonで踏んでみた


はじめに

テストでアカウントを大量に作る必要があったので、操作の自動化しようと思ったのですがメール認証が!
むむむ... どうしよう...と思っていたところ、 MailSlurp なるものがあることを教えてもらいました。
よし!挑戦してみよう!

利用環境

  • macOS Big Sur 11.1
  • Python 3.8.6

手順

準備

  1. MailSlurp公式サイト でアカウントを作成します
  2. アカウントを作成すると API Key が発行されるのでメモしておきます

MailSlurp公式サイト に再ログインする場合は、 ログイン画面 で登録したメールアドレスを入力します。
するとメールにアクセス用のリンクボタンが送られてくるので、そこからアクセスします。

curl

まず試しにcurlで叩いてみます。

  • メール Inbox の作成
% curl -X POST https://api.mailslurp.com/inboxes?apiKey=xxxxxxxx

レスポンスで InboxのIDメールアドレス が取得できます。

  • 受信メールの確認
% curl https://api.mailslurp.com/inboxes/ 『InboxのID』 /emails?apiKey=xxxxxxxx

メールがあると以下のようなレスポンスが返ってきます。

[{
 "id":" 『メールのID』 ",
 "subject":" 『メールの件名』 ",
 "to":[" 『MailSlurpで発行したメールアドレス』 "],
 "from":" 『メール差出人』 ",
 "bcc":[],
 "cc":[],
 "createdAt":"2021-01-29T07:20:43.295Z",
 "read":false,
 "attachments":[],
 "created":"2021-01-29T07:20:43.295Z"
}]
  • 全メール削除
% curl -X DELETE https://api.mailslurp.com/inboxes/ 『InboxのID』 /emails?apiKey=xxxxxxxx
  • InBox の削除
% curl -X DELETE https://api.mailslurp.com/inboxes/ 『InboxのID』 ?apiKey=xxxxxxxx

Python

curlで基本的な動きを確認できたのでPythonで実装していきます。
まず pip でインストールします。

% pip install mailslurp-client

実装

MailSlurpで受信したメールのメール本文を取得してみます。

import mailslurp_client
from mailslurp_client.rest import ApiException

configuration = mailslurp_client.Configuration()
configuration.api_key['x-api-key'] = ### API Key ###

with mailslurp_client.ApiClient(configuration) as api_client:
    api_instance = mailslurp_client.WaitForControllerApi(api_client)
    inbox_id = ### InboxのID ###
    timeout = 3000
    unread_only = False

    try:
        email = api_instance.wait_for_latest_email(inbox_id = inbox_id, timeout = timeout, unread_only = unread_only)
        print(email.body)   # 一旦ここでは出力まで
    except ApiException as e:
        print(e)

上記でメール本文を取得します。
上では取得した本文を出力するだけになっていますが、実際には正規表現等で本文から欲しい箇所を抽出して、selenium 等に渡します。

メールの本文から目的の要素を取得したらメールは不要になるので削除するようにします。

with mailslurp_client.ApiClient(configuration) as api_client:
    api_instance = mailslurp_client.EmailControllerApi(api_client)
    try:
        api_instance.delete_all_emails()
    except ApiException as e:
        print(e)

合体

import mailslurp_client
from mailslurp_client.rest import ApiException

configuration = mailslurp_client.Configuration()
configuration.api_key['x-api-key'] = ### API Key ###

def main():
    get_url()
    delete_all_email()

def get_url():
    with mailslurp_client.ApiClient(configuration) as api_client:
        api_instance = mailslurp_client.WaitForControllerApi(api_client)
        inbox_id = ### InboxのID ###
        timeout = 3000
        unread_only = False

        try:
            email = api_instance.wait_for_latest_email(inbox_id = inbox_id, timeout = timeout, unread_only = unread_only)
            print(email.body)   # 一旦ここでは出力まで
        except ApiException as e:
            print(e)

def delete_all_emails():
    with mailslurp_client.ApiClient(configuration) as api_client:
        api_instance = mailslurp_client.EmailControllerApi(api_client)
        try:
            api_instance.delete_all_emails()
        except ApiException as e:
            print(e)

if __name__ == "__main__":
    main()

今回はメール本文の取得までを目標としたので selenium 部分は省略します。

まとめ

MailSlurp 自体は良い感じだったのですが、無料アカウントだとメール受信数の月の制限が厳しく(100通)テストで使うには難しいかも

参考

GitHub(mailslurp / mailslurp-client-python)

We are recruiting !

株式会社GENZではソフトウェアのテストサービス業務を行っています。
キャリア採用も行っておりますので、ご興味がある方は以下をご確認ください!
株式会社GENZ - Webテスト自動化
株式会社GENZ - 採用情報