ケースにメールのやり取りが記録される仕組み（Winter '21更新版）

SalesforceのWinter '21のアップデートでメール-to-ケースによるメール送受信記録の仕組みが変わったようなので（https://help.salesforce.com/articleView?id=release-notes.rn_email_to_case.htm&type=5&lang=ja&release=228 ）、ケースレコードからのメールの送信とそれに対する返信を行い、動作を検証してみました。
# Winter '21での変更内容
メール-to-ケースを利用してメールの送受信をケースレコードに記録する場合、従来はケーススレッドIdというものをメールの件名か本文（もしくは両方）に含める必要がありました。

今回の変更により、メール件名・本文へのケーススレッドIdの挿入は不要になり、送受信メールに含まれるMessage-ID、In-Reply-To、 Referencesの3つのメールヘッダを利用してケースへの紐付けが行われるようになります。

詳細はこちら：https://help.salesforce.com/articleView?siteLang=ja&id=000355168&language=ja&mode=1&type=1
# メールとケースの紐付けの仕組み
メールが来た際にケースに紐付けられる仕組みを簡単にまとめると、

- In-Reply-Toヘッダの値で、EmailMessageオブジェクト内のMessage-IDを検索
    - EmailMessageレコードが見つかった場合、そのEmailMessageレコードが紐づいているケースに紐付け
    - 見つからなかった場合は、メールのReferencesヘッダに列挙されている値でEmailMessageオブジェクト内のMessage-IDを検索
        - EmailMessageレコードが1つ以上見つかった場合、見つかったEmailMessageレコードのうち最も新しいEmailMessageレコードを選び、そのEmailMessageレコードが紐付いているケースに紐付け
        - それでも見つからなかった場合は、新規ケースレコード作成

となります。
本記事ではIn-Reply-Toヘッダによる照合のみを扱います。
# 検証のための準備
ケースのレコードページからのメール送信と、それに対する返信がケースに記録されるようにするため、まずは以下の準備を行いました。
### 1. 2つのメールアドレスを用意する
- メール-to-ケースと自動レスポンスルールが併用されている組織を想定
- 自動レスポンスルールの送信者メールアドレスとメール-to-ケースのルーティングアドレスは同じにすることができない

という前提のもと、ルーティングアドレス用とケースでの送受信用の2つのメールアドレスを用意しました。なお今回はケースでの送受信用メールアドレスは「組織のアドレス」に追加しています。
### 2. 「メールを送信するためのアクセス権」を「すべてのメール」に設定
設定画面の「管理＞メール＞送信」で、「メールを送信するためのアクセス権」を「すべてのメール」に設定しました。
### 3. メール-to-ケースのルーティングアドレスの作成
ルーティングアドレス用のメールアドレスを使用して、メール-to-ケースのルーティングアドレスを設定しました。
### 4. 送受信用メールアドレスからルーティングアドレスへの転送設定
送受信用メールアドレスから、3.でルーティングアドレスを作成した際に生成されたメールサービスアドレスへの転送設定を行いました。
### 5. ケースのレコードページからメールを送信できるようにする
ケースのページレイアウトに「メール」アクションを追加しました。
# ケースレコードからのメール送信
ケースレコードから、送信者を送受信用メールアドレスにしてメールを送信します。
![スクリーンショット 2020-11-22 194950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/31ce8a13-2724-fd4e-915f-07a2157827c3.png)
受信したメールのヘッダ情報（一部）はこちら。
![スクリーンショット 2020-11-22 195536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/82aeded4-2f0a-5b36-cdbc-80aa8de32384.png)
Message-IDヘッダの値は
\<ilwmF000000000000000000000000000000000000000000000QK72A500eZIRWKABTMO0j2H1XPeGwA@sfdc.net>
です。

開発者コンソールでEmailMessageレコードのMessageIdentifier項目の値を確認すると、上記の値と同じ
\<ilwmF000000000000000000000000000000000000000000000QK72A500eZIRWKABTMO0j2H1XPeGwA@sfdc.net>
となっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/fbc1931c-98ee-3b77-9cbe-ae4c0c4c3f38.png)

# メール返信
受信したメールに対して返信してみます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/9a3d8e94-59d8-5868-bd21-77dd1dade39a.png)
先ほどメールを送信したケースレコードと同じレコードにメールが紐づいていることが確認できます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/d359bdb7-8000-ae29-4608-524809de4373.png)
送信したメールのヘッダ情報（一部）はこちら。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707557/0dc59408-c874-3e6a-4341-a3287fc62558.png)
In-Reply-Toヘッダの値（\<ilwmF000000000000000000000000000000000000000000000QK72A500eZIRWKABTMO0j2H1XPeGwA@sfdc.net>）が、先ほど開発者コンソールで確認したEmailMessageレコードのMessageIdentifier項目の値と同じになっていることが分かります。
# まとめ
メール件名・本文にケーススレッドIdを挿入する場合は、挿入されたケーススレッドIdを削除しないように注意する必要がありました。

本アップデートによりケースへの紐づけがメールヘッダで行われるようになったことで、ケースへのメールのやり取りの記録がやりやすくなったのではないでしょうか。
## 参考記事
- メールからの問合せを取り込む
<br>https://www.synergy-marketing.co.jp/cloud/synergylead/support/act-mail-to-case/
- メール-to-ケースの新しいスレッド動作によるセキュリティの強化
<br>https://help.salesforce.com/articleView?id=release-notes.rn_email_to_case.htm&type=5&lang=ja&release=228
- Disabled Ref Id and New Threading Behavior for Email-To-Case
<br>https://help.salesforce.com/articleView?siteLang=ja&id=000355168&language=ja&mode=1&type=1
- SOAP API 開発者ガイド EmailMessage
<br>https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/sforce_api_objects_emailmessage.htm
- 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 Message-ID【メールヘッダ】
<br>https://wa3.i-3-i.info/word11102.html
- 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 In-Reply-To【メールヘッダ】
<br>https://wa3.i-3-i.info/word11103.html
- 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 References【メールヘッダ】
<br>https://wa3.i-3-i.info/word11104.html