SalesforceでMail2Xを使ってメールの自動取り込みを実装しました。

:::note warn
この記事は2021年8月3日段階での内容となっており、Mail2Xはver1.7を利用しています。
:::
##導入
<dl>
<dt>記事を書くに至るきっかけ</dt>
<dd>利用方法についてのドキュメントが少なく導入に苦労したため、調査した内容をシェアしたいと思いました。</dd>
</dl>

<dl>
<dt>Mail2Xとは？</dt>
<dd>Salesforceの拡張機能を提供するコンポーネントの一種です。</dd>
<dd>セールスフォースが正式にリリースしているものではないため、サポートの対象外となっており動作保証もありません。</dd>
</dl>
<dl>
<dt>何ができるか？</dt>
<dd>メールに記載された内容を元に、Salesforceにレコードを作成すること。</dd>
<dd>文字列検索や正規表現を使い、特定のパターンに該当する内容を指定した項目に保存することができます。</dd>

</dl>
<dl>
<dt>何が必要か？</dt>
<dd>Salesforceのユーザープロファイルが「AppExchange パッケージのダウンロード」の権限を持っていること</dd>
<dd>メールの送信元となるシステムにアクセスし、取り込み対象となるメールの送信先メールアドレスを設定変更できること</dd>
<dd>自社内メールシステムの権限を保有しており、メールアドレスを作成・転送設定ができること<\dd>
</dl>

##公式ドキュメント
[Mail2X コンポーネント - Quip](https://salesforce.quip.com/mBiKAqI5vFTd)
Mail2Xのインストール方法や、設定方法などが記載されています。
[Mail2X設定サンプル集](https://quip.com/HSyaAmbbs8yE)
具体的なMail2Xマッチング設定のサンプルが載っています。

##用語説明
<dl>
<dt>Mail2X設定</dt>
<dd>設定した条件に該当したメールを、どのオブジェクトに保存するかの設定のこと。</dd>
</dl>
<dl>
<dt>Mail2Xマッチング設定</dt>
<dd>メールの本文中のフォーマットを元に、どの項目に何を保存するかの設定のこと。Mail2X設定を親に持ちます。</dd>
</dl>
<dl>
<dt>取り込み設定</dt>
<dd>※Salesforce公式の言葉では無いです。</dd>
<dd>本記事では、上記のMail2X設定、Mail2Xマッチング設定をひっくるめて「どのメールをどの様に取り込むか」を取り込み設定と表記させて頂きます。</dd>
</dl>
##Mail2X導入までのベストプラクティス
######設計1.取り込むメールの種類を調査する
取り込み対象とするメールのフォーマットが何種類あるかを確認します。

例えば自社Webサイトから飛んでくるメールでも、「会員登録」と「お問い合わせ」では、
メールに記載される内容やその後のビジネスプロセスが異なってくると思います。
メールの種類毎に取り込み設定を行うと管理しやすいので、リストアップしておきましょう。


######設計2.取り込みを行う項目を整理する
メールの種類毎に、どのパターンを検知してどの項目に取り込むか、というマッチング設定を検討します。

例えばお客様のお名前やメールアドレス、電話番号、お問い合わせ内容などが定番ではないでしょうか。

:::note
メールの種類毎に、各項目毎に1つのマッチング設定が必要なため、
メールの種類が多いと結構な数になってしまいます。
Excelやスプレッドシートにまとめると管理し易いと思います。
:::

######設計3.取り込み先のオブジェクトを準備する
取り込む項目が決まったら、レコードを保存するオブジェクトを準備しましょう。
標準オブジェクトを使っても良いですし、新規にカスタムオブジェクトを作成しても良いと思います。
取り込み先のオブジェクトはメールの種類毎に設定できるので、種類に応じてオブジェクトを分けることも可能です。

:::note warn
取り込み先に設定できる項目は、"テキスト（ロング/リッチ）"と"日付/時間"のみという制限があります。
データ型が"日付"や"数値"の項目に取り込みたい場合は、
一度"テキスト"や"日付"にデータを保存した後に、
プロセスビルダーやフローなどでデータ型を変換して移す必要があります。
:::
:::note
Mail2Xをインストールすると、「取込メール」というオブジェクトが自動で作成されますが、
これはサンプルのオブジェクトなので必ずしも使う必要はありません。
:::

######設定1.Mail2Xのインストールを行う
[公式ドキュメント](https://salesforce.quip.com/mBiKAqI5vFTd)にインストールの方法が記載されています。
こちらのガイドに従って進めれば迷うことは無いと思います。

######設定2.Salesforceのメールサービスを作成する
Salesforceの設定画面から、「カスタムコード」＞「メールサービス」を開き、
「新規メールサービス」から設定を登録します。
その際、Apexクラスに"MailMatchingHandler"クラスを指定する必要があります。

添付ファイルの受け入れ設定や許可する送信元、失敗時のレスポンス設定などを使い分けない場合は、
メールサービスは1つ作成すれば十分です。

メールサービスを作成した後、メールサービスの詳細画面から新規メールアドレスを作成します。

こちらも[公式ドキュメント](https://salesforce.quip.com/mBiKAqI5vFTd)に記載されています。

######設定3.Salesforceのメールサービスへ転送するメールアドレスを作成する
Mail2Xの取り込み設定では、From:アドレス、To:アドレス、最終転送アドレスのいずれかを指定して
取り込み設定を振り分けることができます。
前項で作成したメールアドレスを指定したいところですが、
残念ながら長過ぎてMail2Xの対象メールアドレスに設定する事ができません。

そこで、自社のメールサービスからSalesforceのメールサービスへ転送する事でこの問題を回避します。
メールの種類毎にメールアドレスを作成する事で、To:アドレスを指定した振り分けを行います。

:::note
弊社ではGoogle Workspaceを使っているので、
Googleグループを作成し、メールの種類毎にエイリアスを設定しました。
グループのメンバーに元々メールを受け取っていたメンバーとSalesforceのメールアドレスを追加しています。
:::

######設定4.Mail2X設定、Mail2Xマッチング設定を行う
基本的には、[公式ドキュメント](https://salesforce.quip.com/mBiKAqI5vFTd)を参考にMail2X設定を行い、
[Mail2X設定サンプル集](https://quip.com/HSyaAmbbs8yE)を参考にマッチング設定を行っていきます。
正規表現マッチングを使わなくても、8割方設定できると思います。

:::note warn
正規表現マッチングを利用する場合、開始テキストや終了テキストは無視されます。
:::

公式ドキュメントに下記の記載がありますが、
いくつかの理由で本記事では複数のフォーマット毎に送信メールアドレスを変更し、
複数の取り込み設定に振り分ける設計を推奨しています。

>1つのメールアドレスで複数のフォーマットで送信される場合の対応は以下を参考にしてください。
>
>1. 一度取り込みたい内容を複数フォーマット文すべて取得する設定を行う。
>2. 取得したデータを元に、プロセスビルダー・フローで次の処理を振り分ける。

:::note alert
Mail2Xマッチング設定の開始テキストがメール本文中に存在しない場合、
メールが取り込まれない事象が確認されています。
この場合、エラーメールが届くこともない為、注意が必要です。
:::
:::note
1つのMail2Xマッチング設定で複数のフォーマットに対応する場合は、正規表現マッチングを使うことで実現できます。
例えばあるフォーマットには住所が含まれるが、別のフォーマットでは住所が含まれない場合、
正規表現マッチングで「住所：*(.*?)\n」と指定することで、
「住所：」が含まれるメールには「住所：」以降のテキストが、
「住所：」が含まれないメールには空欄が、該当の項目に登録されます。
:::

:::note alert
1つのメールが複数の取り込み設定の条件を満たす様な設定は避けた方が良いです。
（同じメールアドレスをTo:アドレスに指定した設定を複数作成する、など）
メールの取り込みが正しく行われない可能性があります。
:::
######設定5.取り込みのテストを行う
ここまで設定が完了したら、取り込みのテストを行いましょう。
テスト中は受信対象メールアドレスに自分のメールアドレスを入力し、
参照対象アドレスをFrom:アドレスに変更して、Salesforceのメールアドレスに直接メールを送ると楽だと思います。

正しく登録できていれば、メールを送信してから1～2分後には設定したオブジェクトにレコードが作成されます。
エラーが出てしまった場合は、エラー内容を確認して設定を修正しましょう。

:::note
Mail2Xはhtmlメールを扱えないため、受信するメールはテキストメールとなります。
htmlメールでテストする場合、URLなどが加工されて正しく取り込めない場合があります。
Gmailであればプレーンテキストモードを有効にする事でテキストメールでテストする事ができます。
:::
######実装1.メールの送信先を転送設定をしたメールアドレスに変更する
テストが問題なく完了したら、最後に実装を行います。
各フォーマットのメール送信先（To:アドレス）を、作成したメールアドレスに変更します。
設定を自分で変更できない場合は、変更出来る方に依頼しましょう。

######実装2.本番環境でのチェック
実装が完了した後、想定外のエラーがでメールが取り込まれないことも考えられますので、
数日～数週間はメールの受信状況とレコードの作成状況を確認しましょう。

##結論
######要点
・メールのフォーマット毎に取り込み設定とメールアドレスを作成する
・Salesforceのメールアドレスは長過ぎるため、自前でメールアドレスを準備し転送する


######最後に
記事の作成には不慣れなため、わかりにくい点などあったらご質問ください！