前回の記事の続き。(書こうと思って一ヶ月経ってた)。今回はフローのメールアラート機能によるメール送信についてです。メール送信処理はApexだと制限に引っかかりやすいので、基本ワークフロールールとプロセスビルダーで実現しているので個人的に重要な設定でした。フローのメール送信は2種類ありましたが、まずは今までの仕組みが使えるメールアラートの方です。
準備
カスタムオブジェクトでシステムメールオブジェクトを作成。このオブジェクトが作成されたらメール送信処理が動くようにします。
システムの自動メール送信系はいつ、どのようなメールが送られているかわかりにくくなりやすい部分なので、カスタムオブジェクトを挟む形で実装するのが良いと思います。活動作成でも良いですが、アーカイブの仕組みがあるのと顧客へのコンタクト履歴などの重要な情報と混ざってしまうのと避けるため、別オブジェクトにしたほうが良いと思ってます。このやり方ならApexトリガで本文のカスタマイズもやりやすいです。
(手作業で登録しますが、本来は決まったタイミングで実行される自動作成処理を用意してレコード作成する使い方。)
メールテンプレートの作成
メールアラートの設定に必要なメールテンプレートを作成します。ClassicとLightningの二種類があります。既存処理の移行の場合はClassicで作っていることが多いと思います。(あとClassicのほうが設定権限あるユーザのみアクセスできるので適してそうな気がする)。
メールアラートではClassicとLightningのどちらのテンプレートも使えるのでどちらで作成してもいいですが、今回はLightningメールテンプレートを使って進めます。Lightningメールテンプレートの設定はアプリケーションランチャー経由です。
メールテンプレートを格納するフォルダの作成から。システムメールという名称にしてシステム用とわかるように作成。
共有設定も忘れずにシステム管理者のみアクセスできるようにします。(今回はやらないですが作成ユーザの権限除外もしておいたほうがわかりやすそう)。
件名と本文はシステムメールオブジェクトのレコードを差し込む形で作成。
メールアラートの作成
用意したメールテンプレートを使ってメールアラートを作成。
※送信元アドレスは現在のユーザのメールアドレスを指定していますが、実際は「組織のメールアドレス」を指定します。
フローの作成
まずはレコードトリガーフローを選択。
次に実行条件を設定。作成のみでもいいですが、条件が一致する形で作成/更新するようにしておけば再送信的な操作の余地があっていいと思います。(開始条件はとりあえず基本部分のみ。実際は必要に応じて条件追加する感じ。)
実行条件の次にメールアラートを設定。
再度要素を追加で、レコードを更新を選択。送信日時項目を更新する制御を追加します。
ちなみに現在の日時はグローバル変数「Flow」が保持してます。
これで完成。保存ボタン→フロー名設定など→有効化という感じで処理を有効化します。
動作確認
システムメールレコードを作成します。(件名と本文を手入力で入れてますが、実際は自動登録する仕組みを別途用意する感じ)
レコードを登録すると、先程のメールアラートが実行され、TOアドレス項目に指定した宛先にメールが届きます。「件名」と「本文」が設定したとおりになっていることを確認できました。
メール送信後に送信日時の更新処理も正常に動作することを確認。今回メールアラートの実行条件に送信日時がNULLであることを指定しているので、送信後のレコードを更新してもメールは送信されたりは起きません。
おまけ:システムメール送信データの参照まわりの話
参照項目として取引先と取引先責任者を紐付けておけばどの顧客にいつシステム経由の自動メールを送信したかが可視化しやすくできます。
たとえば特定の取引先宛に送信したシステムメールの一覧を表示するイメージ。
補足:もう少しちゃんとやるなら
今回は検証目的だったのでメールアラートを一つ用意する形で進めました。メールアラート1つにつき1つの送信元アドレスを指定できるのですが、実際の業務では送信元メールは複数出てくると思います。その場合は複数のメールアラートを用意し、システムメールオブジェクトには送信元アドレス項目を選択リスト型で作成、フローの条件分岐を行って対象のメールアラートを呼び出すようにすれば要件を満たせると思います。