LoginSignup
1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-01

はじめに

テストでアカウントを大量に作る必要があったので、操作の自動化しようと思ったのですがメール認証が!
むむむ... :disappointed_relieved: どうしよう...と思っていたところ、 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通)テストで使うには難しいかも :persevere:

参考

GitHub(mailslurp / mailslurp-client-python)

We are recruiting !

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0