WebAPIのテスト一環として、認証確認メール等でメールからの情報取得を行いたい時になどに利用して記事にします。
既に、コマンドラインからメールを送信するなどの記事が出ているので、ここでは取得について記載します。
MailHogのDockerコンテナで送信されたメールの内容をコマンドラインから確認するには、MailHogのAPIを使用する方法が一般的のようです。
MailHogはHTTP APIを提供しており、このAPIを通じてメールの情報を取得することができます。
/api/v2/messages
エンドポイント
/api/v2/messagesエンドポイントを使用してメールを取得する基本的なcURLコマンドです。
例)保存されているすべてのメールをJSON形式で返却
curl "http://localhost:8025/api/v2/messages"
パラメータの詳細
パラメータ | 説明 |
---|---|
start | 取得するメールの開始インデックスを指定します(デフォルトは0です) |
limit | 取得するメールの数を指定します(デフォルトは50です) |
例)最初の100件のメールを取得したい場合
curl "http://localhost:8025/api/v2/messages?start=0&limit=100"
レスポンスデータ
各メールオブジェクトは、ID、From、To、およびContent(ヘッダー、ボディ、サイズ、MIMEタイプが含まれる)などの情報を含んでいます。
{
"total": 200,
"count": 100,
"start": 0,
"items": [
{
"ID": "message-id",
"From": "from@example.com",
"To": ["to@example.com"],
"Content": {
"Headers": {
"Subject": ["Email Subject"],
"Date": ["Date"],
"Other-Headers": ["Header Value"]
},
"Body": "Encoded body content",
"Size": 1234,
"MIME": "MIME type"
},
"Created": "2020-01-01T12:00:00Z"
}
]
}
/api/v2/search
エンドポイント
MailHogの/api/v2/search
エンドポイントを使用することで、特定の条件に基づいてメールを検索することができます。このAPIは主にメールのFrom
、To
、Subject
フィールドに対する検索をサポートしています。
/api/v2/search
エンドポイントは、クエリパラメータとしてkind
(検索するフィールド)、query
(検索クエリ)、および任意でstart
とlimit
(ページネーションのためのパラメータ)を受け取ります。
例)特定の送信者からのメールを検索
curl "http://localhost:8025/api/v2/search?kind=from&query=example@example.com"
例)特定の受信者に宛てたメールを検索
curl "http://localhost:8025/api/v2/search?kind=to&query=recipient@example.com"
例)メール本文に特定の単語が含まれているメールを検索
curl "http://localhost:8025/api/v2/search?kind=containing&query='important'"
パラメータの詳細
パラメータ | 説明 |
---|---|
kind | 検索するメールのフィールドを指定します。from 、to 、containing のいずれかを指定可能です |
query | 検索クエリとして、実際の検索文字列を指定します |
start | 検索結果の開始インデックスを指定します(デフォルトは0) |
limit | 返されるメールの最大数を指定します(デフォルトは100) |
WebAPIテストツールなどからの利用
以下に、WebAPIテストツールである Step/CI の利用例を挙げておきます。
指定したメールアドレス宛の直近のメールの取得
# 送信済みメールを取得する
name: MailHoge API Tests
version: '1.0'
tests:
user_registration:
steps:
# 該当するアカウント宛の送信済みメールを取得する
- name: Get Registration confirmation email
http:
url: http://localhost:8025/api/v2/search
method: GET
params:
kind: to
query: ${{env.toUserAccount}}
start: 0
limit: 1
captures:
mail:
jsonpath: $.items.0
以上