Apexでメールの差出人を組織のアドレスにする実装
Apexから送るメールの差出人は、初期状態では実行ユーザー個人のメールアドレスになります。組織のメールアドレスを登録し、差出人として設定する実装を説明します。
なぜ差出人を組織のアドレスにするのか
Messaging.SingleEmailMessageは、差出人を指定しなければ実行ユーザーのメールアドレスから送信します。自動化で送るメールの差出人が担当者ごとにバラバラでは、受け取る側が混乱します。「〇〇システムからの通知」のように差出人を統一したいときは、組織のメールアドレス(Organization-Wide Email Address)を登録し、そこから送信します。
組織のメールアドレスを登録する
組織のメールアドレスの設定を開く
設定から「組織のメールアドレス」を開きます。
追加ボタンを押す
「表示名」と「メールアドレス」を入力します。表示名は、受信者に「差出人」として表示される文字列です。
プロファイルの利用範囲を選ぶ
すべてのプロファイルで使うか、特定のプロファイルだけに絞るかを選びます。
保存して検証メールを確認する
保存すると、登録したメールアドレス宛に確認メールが届きます。このメールで検証を済ませるまで、そのアドレスは差出人として使えません。
Apexで組織のメールアドレスを取得する
差出人IDを直接コードに書くと、Sandboxと本番で値が変わり、環境をまたいだときに動かなくなります。表示名をバインド変数にしたSOQLで検索してから使うほうが、環境をまたいでも動きます。
public with sharing class OrgWideEmailSender { public static void sendNotice(String orgWideDisplayName) { List<OrgWideEmailAddress> addresses = [ SELECT Id FROM OrgWideEmailAddress WHERE DisplayName = :orgWideDisplayName LIMIT 1 ]; if (addresses.isEmpty()) { throw new NoDataFoundException('組織のメールアドレスが見つかりません: ' + orgWideDisplayName); } Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); mail.setToAddresses(new List<String>{ 'xxxxxxxx@example.com' }); mail.setOrgWideEmailAddressId(addresses[0].Id); mail.setReplyTo('xxxxxxxx@example.com'); mail.setSubject('sample title'); mail.setPlainTextBody('sample text'); Messaging.sendEmail(new List<Messaging.SingleEmailMessage>{ mail }); } public class NoDataFoundException extends Exception {} }
表示名で組織のメールアドレスを検索し、差出人として設定します。
setOrgWideEmailAddressId()には、直接IDの文字列(0D2XXXXXXXXXXXXのような形です)を渡すこともできます。ただし前述のとおり、環境ごとに値が変わるため、検索して取得する形をおすすめします。
クイックアクションに置く
このメール送信をレコード詳細のボタンから呼びたい場合、旧来の「カスタムボタン」よりクイックアクションとして配置するほうが安定します。公式ヘルプには「Some URL custom buttons open links in the same tab, even if the button behavior is set to open in a new window(URLカスタムボタンの一部は、新規ウィンドウで開く設定でも同じタブで開きます)」という記載があり、カスタムボタンの挙動はLightning Experienceで設定どおりにならないことがあります。
Visualforceページをそのまま使うなら、対象オブジェクトの「ボタン、リンク、アクション」から新規アクションを作成し、アクションの種類に「Visualforce」を選んでページを指定します。カスタムボタンとして置くより、レイアウトのアクション領域に組み込みやすくなります。
送信数の上限を確認する
| 上限 | 数値 |
|---|---|
1トランザクションあたりのsendEmail呼び出し | 10回 |
| 1通あたりのTo・Cc・Bccの合計宛先数 | 150件 |
| 1日あたりの送信先数 | 5,000人(トライアル組織は15人) |
この上限は、組織のメールアドレスを使っても変わりません。差出人をどれに設定しても、Apexからの送信としてカウントされます。
ここで間違えやすい
| 間違い | 何が起きるか |
|---|---|
| 検証前の組織のメールアドレスを指定する | 差出人として使えず、送信が失敗します |
| 差出人IDを文字列でコードに直書きする | Sandboxと本番でIDが違い、環境をまたぐと動きません |
| 表示名の検索結果が0件のときの処理を書かない | 例外が発生し、原因が追いにくくなります |
| カスタムボタンの「新規ウィンドウで開く」設定を過信する | Lightning Experienceでは同じタブで開くことがあります |
確認した環境
- 2026年9月 / Salesforce Summer '26(APIバージョン 67.0)時点の公式ドキュメントで、
setOrgWideEmailAddressIdの仕様と送信数の上限を確認しています
まとめ
- 差出人を指定しなければ、メールは実行ユーザー個人のアドレスから送信されます
- 組織のメールアドレスは、登録後にメール検証を済ませるまで差出人として使えません
- 差出人IDは直書きせず、表示名をバインド変数にしたSOQLで検索して取得します
- レコード詳細に置くなら、カスタムボタンよりクイックアクションのほうが挙動が安定します
- 送信数の上限は差出人を変えても同じで、1トランザクション10回・1通150宛先・1日5,000人です
参考:当時の画面
記事を最初に書いた当時の画面です。いまの手順と違うところは、各画像の説明に書いています。
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。