あなたの知らないCampaignバウンスの世界(1)〜同期バウンスと非同期バウンス

最近J-POPではVaundyが個人的には「沼」きてますね。Aimerとのコラボ曲『地球儀』で沼落ちしました。新曲『踊り子』は小松菜奈のMVがよくてヘビロテで観ちゃってます。

Vaundyといえば…ばうん…バウンスメールですね！

Adobe Campaign(以下「Campagin」)は主要なタッチチャネルのひとつとして電子メールを利用できます。ただメールは、届かないことがあるんですよね。その届かないという状態を、Campaignはどう認識し、対処しているんでしょうか。

「届かない」という結果が返ってくるのを「バウンス」と呼びます。Campaginではバウンスの処理の仕方が２通りあります。「同期」バウンスと「非同期」バウンスです。

## 同期バウンス
実際のクライアントコンソールで見てみましょう。ある配信の開始後約１時間経過した配信ログ画面です:
![E-000526990_delivery-log_in_client-console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/aea2bbba-6fd1-d531-937b-66e67d815030.png)
２カラムめが「ステータス」で、ここが「失敗」となっているのがバウンスです。たとえば「失敗」のいちばん下のものを見てください。３カラムめ「理由」が「無効なアカウント」、「テキスト」カラムが「El usuario esta en estado: inactivo」とかいって何語だかすらわかりませんが、要は「ユーザーステータス: 非アクティブ」ということらしいですよ。これが同期バウンスの典型例で、Campaignからの送信要求に対し、宛先メールサーバーが、そのアドレスは「無効なアカウント」だよ、と弾き返してきたのです。するとつまり――ここちょっと注意してほしいんですが――同期バウンスとは、CampaignからのSMTPリクエストに対するSMTPレスポンスがその実体である、ということ。同期バウンスでは、メールが返ってきてるわけではないのです。メール受信してないから、POP3関係ありません。実際この同期バウンスに対応するサーバーログは、メール送信プロセスであるmtachildが生成しています:

```mtachild.log
2022-01-05 18:07:38.733+09      000062D5        000062D5          1     warning log     550 Account disabled / El usuario esta en estado: inactivo
```

mtachildプロセスが発したSMTPコマンドに対し、宛先メールサーバーがレスポンスコード550で応答。その結果が上掲クライアントコンソール画面に反映されているのです。

## 非同期バウンス
Campaignで「バウンスしたEメールの管理」を設定するとinMailプロセスが起動するんですが、inMailはPOP3でバウンスメールを取得するためのものなので、じつはここまでの話とは関係ありません。「メールが返ってきてるわけではない」からPOP3いらないんですよ。

えっじゃあPOP3はどこで…とお思いでしょうか。そこで冒頭の話に戻ります。もうひとつのバウンス、「非同期」です。

同期バウンスは実体がSMTPレスポンスだとお話ししました。リクエストに対するレスポンスだから即座に返ってくる。だから同期なわけです。「非同期」はそれとは違い、宛先メールサーバーがいったんメールを受信しますが、それをわざわざバウンスメールとして突き返してきます。だから時間差が発生する。「非同期」たる所以です。

また画面で見てみましょう。別配信の配信ログです:
![2022-01-31_17-13-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/67eef4c1-f971-bd89-5cf7-b6fedd997684.png)
「ik1mwjonn5qy2」といういかにもあやしげなメールアドレスへ配信されたことになっていますね。宛先メールサーバーがCampaignからのSMTPリクエストをいったん受信したのです。しかしじつは、そんなメールアドレスは宛先ドメインにやっぱり存在しません。なので、宛先メールサーバーはバウンスメールを返送します。「非同期」バウンスです。

::: note
ユーザーが存在しないなどのエラーに対し、同期バウンスを返すか非同期バウンスを返すか、そのSMTPレスポンスの中身やバウンスメールの形式などは、相手側、宛先メールサーバーの設定しだいです。
:::

返されたバウンスメールは、inMailプロセスがPOP3で受信します。その様子をinMailプロセスの冗長ログで見てみましょう:

```inMail.log
17:24:10 >   Connection opened for user 'POP3アカウント名' on server 'POP3サーバー名'
17:24:10 >   POP3 Server: '+OK  <1d5f.8adf3e.61f79caa.TIMG4aqizhSXNKDMbz+mdA==@mail02-md>'
17:24:10 >   POP3 Client: 'USER POP3アカウント名'
17:24:10 >   POP3 Server: '+OK'
17:24:10 >   POP3 Client: 'PASS *******'
17:24:10 >   POP3 Server: '+OK Logged in.'
17:24:10 >   POP3 Client: 'STAT'
17:24:11 >   POP3 Server: '+OK 1 110220'
17:24:11 >   1 message(s) (107.6 kB) for user 'POP3アカウント名' on server 'POP3サーバー名'.
17:24:11 >   POP3 Client: 'RETR 1'
17:24:11 >   MSG 1, 1429 byte(s) received (1.2965 %).
17:24:11 >   MSG 1, 2877 byte(s) received (2.61023 %).
17:24:11 >   MSG 1, 4325 byte(s) received (3.92397 %).
…中略…
17:24:12 >   MSG 1, 107133 byte(s) received (97.1992 %).
17:24:12 >   MSG 1, 108581 byte(s) received (98.513 %).
17:24:12 >   MSG 1, 110220 byte(s) received (100 %).
17:24:12 >   Receiving first message for user 'POP3アカウント名' on server 'POP3サーバー名'.
17:24:12 >   Receiving last message for user 'POP3アカウント名' on server 'POP3サーバー名'.
17:24:12 >   「送信者アドレス」からのメッセージ : ルール「User_unknown」が一致しました。メッセージは削除されました。
17:24:12 >   「送信者アドレス」からのメッセージ : ルール「User_unknown」が一致しました。メッセージは削除されました。
17:24:13 >   POP3 Client: 'DELE 1'
17:24:13 >   POP3 Server: '+OK Marked to be deleted.'
17:24:14 >   POP3 Client: 'QUIT'
17:24:14 >   POP3 Server: '+OK Logging out, messages deleted.'
17:24:24 >   Connection closed for user 'POP3アカウント名' on server 'POP3サーバー名'
```

煩雑なため詳細説明は割愛しますが、ここではとりあえずinMailがバウンスメールを受信したんだなというイメージだけつかんでください。で、このとき、inMailはデータベースの配信ログを更新します。するとさっきの画面がどうなるか:
![2022-01-31_17-44-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/dcee836c-d698-7986-ee75-9469d0c32353.png)

はい、さっきは「送信済み」になっていた宛先が「失敗」になってますね。このように、あとからステータスが変化するのが非同期バウンスで、inMailがPOP3でバウンスメールを受信することで処理されています。

…いかがでしょうか。たかがこれしきのことと思いきや、違う意味でなかなか「沼」ですね。そんな、あなたの知らないCampaignバウンスの世界を、あと何回かに分けてご案内していきたいと思います。お付き合いいただければうれしいです。

以上、筆者・跡部官辺が…あとべかんぺん…Adobe Campaignについてお届けしました！

::: note warn
本稿の内容は筆者のオンプレミス型デモ環境(Adobe Campaign Classic 9032@3a9dc9c・レガシーMTA)上で実施した検証に基づきます。別環境における同様の動作を保証するものではありません。またデータは架空のものであり、既存の配信や実在の組織とはいっさい関係がありません。
:::