システム開発する上でメールの送受信テストは何かと面倒です。できればユニットテストに組み込んで人手のテストは避けたい所だと思います。
JavaでJUnitを使ってテストする場合、SubEtha SMTPのようなライブラリを使うと割と簡単にテストできます。この辺はWEB+DB PRESS Vol.102のJavaの新定石で特集されているので、詳しく知りたい方は手に取ってみてください。
gihyo.jp
プログラミング言語に縛られない良い方法はないのかなと思っていたところ、先日SparkPostのブログでMailSlurpというサービスが紹介されていました。
www.sparkpost.com
End-to-endのメールテストを簡単にするサービスで、Web APIを使ってテスト用のinbox作成と受信確認ができます。
実際に試してみたら非常に簡単だったので紹介します。
アカウント作成後、API Keyを取得します。
Web APIでinboxを作成します。
curl -X POST https://api.mailslurp.com/inboxes?apiKey=test
成功するとidと宛先のメールアドレスが返ってきます。
{
"payload":{
"id":"xxxxxx-xxxx-xxxx-xxxx-xxxx",
"address":""xxxxxx-xxxx-xxxx-xxxx-xxxx@example.com"
},
"message":""
}
上記メアドにメールを送信後した後、idをURLのパスに含めてGETするとinboxで受信したメールを取得できます。
curl https://api.mailslurp.com/inboxes/xxxxxx-xxxx-xxxx-xxxx-xxxx?apiKey=test
レスポンスで返ってくるpayloadはinbox作成時と違って配列形式なので注意してください(気付かずJavaでJSON->Object変換にしばらくハマってました)
{
"payload": [
{
"body": "xxxxx",
"from": "xxx",
"id": "xxxxxx-xxxx-xxxx-xxxx-xxxx",
"received": "2018-02-18T14:11:02.688Z",
"returnPath": "xxx@examle.com",
"subject": "Hello",
"to": [
"string"
]
}
],
"message": ""
}
このようにWeb API経由でinboxを作成&受信確認できるので、言語に関わらず簡単に使えます。また、テスト用の宛先が発行されるので誤送信も防げます。
次のコードはJavaでテストした例です。メール送信はSendGrid&JavaMailを使っています。
inbox作成にwaitが必要で、この時間をどのくらいに定めるか微妙なところですが、非常にお手軽です。実際に動くソースは以下に置きました。
github.com