フローのメール送信でレコードのファイルを添付する
フローの「メールを送信」アクションは、Spring '25 から添付ファイルを付けられるようになりました。レコードに添付したファイルを集めてメールに付ける組み方と、添付を付けたときに変わる送信上限をまとめます。
どういうときに使うのか
レコードに添付した見積書や申込書のPDFを、そのままお客様へメールで送りたい、という相談をよく受けます。以前のフローの「メールを送信」アクションはファイルを添付できなかったので、添付付きのメールはApexで組むのが定番でした。Messaging.SingleEmailMessage にファイルを載せて送る @InvocableMethod を作り、フローから呼ぶ形です。私たちが以前に組んだ自動化にも、この形が残っています。
Salesforce Admins ブログによると、Spring '25 から「メールを送信」アクションに添付ファイルのIDを渡せるようになりました。いまはApexを書かずに、フローだけで添付付きのメールを送れます。既存のApexを置き換えるときも、新しく作るときも、組み方は同じです。
添付に使う2つの入力
「メールを送信」アクションには、添付のための入力が2つあります。どちらも省略できます。
| 入力(日本語ヘルプでの表記) | 渡すもの |
|---|---|
| 添付ファイル ID | IDをカンマで区切ったテキスト |
| Attachment ID Collection | IDを1件ずつ入れたテキスト型のコレクション変数 |
Attachment ID Collection は日本語のヘルプでも英語のまま表記されています。件数が決まっていないファイルを付けるなら、コレクション変数で渡すほうが組みやすくなります。
渡せるのはContentVersionのID
公式ヘルプでは、渡せるIDは「ドキュメント」「コンテンツバージョン」「添付ファイル」の3種類です。いまのファイル(Salesforce Files)で言えば、ファイルの版を表す ContentVersion のIDを渡します。
ファイルまわりのオブジェクトは3つあり、取り違えやすいところです。
| オブジェクト | 表すもの | 添付に渡せるか |
|---|---|---|
ContentDocument | ファイルそのもの | 渡せる3種類に入っていない |
ContentVersion | ファイルの版。ContentDocumentId で親のファイルを指す | 渡せる |
ContentDocumentLink | ファイルとレコードの結びつき | 渡せる3種類に入っていない |
フローの組み方
レコードに最初に添付されたファイルを、最新の版だけ集めて送る例です。画面フローでも自動起動フローでも、recordId に対象レコードのIDが入っていれば同じ形で組めます。
テキスト型のコレクション変数を作る
変数を新しく作り、データ型をテキストにして、複数の値を持てるコレクションにします。ここでは名前を varAttachmentIds とします。
「レコードを取得」でContentVersionを集める
オブジェクトに ContentVersion を選び、条件を2つ置きます。FirstPublishLocationId が {!recordId} と等しいこと、IsLatest が True であることです。取得するのは1件だけでなく、条件に合うすべてのレコードにします。
「ループ」で1件ずつ取り出す
集めたレコードのコレクションをループします。
「割り当て」でIDを足す
ループの中に割り当てを置き、varAttachmentIds に、ループ中のレコードの Id を追加します。公式ヘルプでは、コレクションへの追加は値を末尾に足す操作です。ループの中には割り当てだけを置きます。
ループの後に「メールを送信」を置く
受信者アドレス・件名・本文を入れ、Attachment ID Collection に varAttachmentIds を渡します。1通にまとめて送るので、ループの中には置きません。
IsLatest を条件に入れないと、版を上げたファイルの古い版まで集めてしまいます。最新の版だけを送るなら、この条件は外せません。
ここで間違えやすい
FirstPublishLocationId は、その版が最初に公開された場所のIDです。公式リファレンスでは、個人のライブラリや「マイファイル」に最初に置いた場合、所有者のユーザーIDが入ると書かれています。
つまり、次のファイルは上の条件では拾えません。
- 「マイファイル」にアップロードしてから、レコードに共有したファイル
- 別のレコードに添付したファイルを、あとから共有したもの
レコードに結びついているファイルをすべて対象にしたいときは、ContentDocumentLink を LinkedEntityId で絞って取得し、そこから ContentDocumentId を辿ります。公式リファレンスにあるとおり、ContentDocumentLink へのSOQLは Id・ContentDocumentId・LinkedEntityId のどれかで絞る必要があります。
添付を付けると送信上限が変わる
添付ファイルを付けると、アクションが内部で呼ぶAPIが変わり、日次の送信上限の数え方も変わります。
| 使い方 | 日次の送信上限 |
|---|---|
| 添付・メールテンプレート・「送信時にメールを記録」のどれも使わない | ワークフローメールの日次上限 |
| 添付ファイルを付ける | 単一メールの上限(General Email Limit) |
| メールテンプレートを使う | 単一メールの上限(General Email Limit) |
| 「送信時にメールを記録」を使う | 単一メールの上限 |
公式ヘルプでは、単一メールは組織ごとに、外部のメールアドレスへ1日あたり5,000件までです。ワークフローメールの枠で送っていた通知に添付を足すと、数える枠が変わります。送信件数の多い通知に添付を足す前に、1日に何通送っているかを見積もってください。
サイズの上限もあります。添付ファイルを含めて35MBを超えるメールは、実行時にフローがエラーになります。ファイルが大きくなりやすい運用では、添付する件数とサイズを先に見積もります。
もう1つ、公式ヘルプにあるとおり、フローはインタビューのトランザクションが終わるまでメールを送りません。送信の後ろに要素を足すときは、この順番を前提に組みます。
確認した環境
- 2026年10月 / Salesforce Summer '26(API バージョン 67.0)時点の公式ドキュメントで確認しています
- 添付に対応した時期は、Salesforce Admins ブログの Spring '25 のフロー新機能の記事で確認しています
まとめ
- フローの「メールを送信」アクションは、Spring '25 から添付ファイルを付けられます
- 添付には「添付ファイル ID」か「Attachment ID Collection」を使い、ContentVersion のIDを渡します
- 「レコードを取得」で ContentVersion を集めるときは、IsLatest を True に絞り、古い版を除きます
- FirstPublishLocationId で絞ると、マイファイル経由や他のレコードから共有したファイルは拾えません
- 添付を付けると、日次の上限は単一メールの枠で数えられます。サイズは添付を含めて35MBまでです
参考
- 「メールを送信」アクション(Salesforce ヘルプ)
- Send Email Action(Salesforce Help・英語)
- Flow Operators in Assignment Elements(Salesforce Help)
- ContentVersion(Object Reference for the Salesforce Platform)
- ContentDocumentLink(Object Reference for the Salesforce Platform)
- Unlock New Automation Possibilities With Spring '25 Flow Features(Salesforce Admins)
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。