はじめに
テストでアカウントを大量に作る必要があったので、操作の自動化しようと思ったのですがメール認証が!
むむむ... どうしよう...と思っていたところ、 MailSlurp
なるものがあることを教えてもらいました。
よし!挑戦してみよう!
利用環境
- macOS Big Sur 11.1
- Python 3.8.6
手順
準備
- MailSlurp公式サイト でアカウントを作成します
- アカウントを作成すると 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テスト自動化]
(https://www.genz.jp/test-service-menu/web-test-automation/?qi=20210201)
[株式会社GENZ - 採用情報]
(https://www.genz.jp/recruit/?qirecruit=20210201)