1.背景
Salesforceがメールを受信したときに自動的にケースを作成する方法としてはメール-to-ケースを使用するのが多いと思いますが、今回はメールサービスを使用してApexクラスで作成するやり方を記載します。
2.Apexクラスの作成
メール受信時に動かすApexクラスを作成します。
今回は以下のようなクラスをCopilotに作ってもらいました。

public with sharing class EmailToCaseHandler implements Messaging.InboundEmailHandler {
public Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) {
// 結果オブジェクトを初期化
Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();
try {
// 新しいケースを作成
Case newCase = new Case();
newCase.Subject = email.subject != null ? email.subject : '(無題)';
newCase.Description = email.plainTextBody;
newCase.Status = '新規';
newCase.Origin = 'Email';
newCase.SuppliedEmail = envelope.fromAddress;
newCase.SuppliedName = email.fromName;
// ケースを保存
if (Schema.sObjectType.Case.isCreateable()) {
insert newCase;
}else{
System.debug('ユーザーにはケースを作成する権限がありません。');
}
// 添付ファイルを格納するリストを初期化
List<Attachment> attachmentList = new List<Attachment>();
// 添付ファイルが存在する場合の処理
if (email.binaryAttachments != null && email.binaryAttachments.size() > 0) {
// 添付ファイル作成の権限チェック(ループの外で一度だけ実行)
if (Schema.sObjectType.Attachment.isCreateable()) {
for (Messaging.InboundEmail.BinaryAttachment attachment : email.binaryAttachments) {
Attachment att = new Attachment();
att.ParentId = newCase.Id;
att.Name = attachment.fileName;
att.Body = attachment.body;
// リストに追加
attachmentList.add(att);
}
// ループ外で一括挿入
insert attachmentList;
} else {
System.debug('ユーザーには添付ファイルを作成する権限がありません。');
}
}
// 処理が成功したことを設定
result.success = true;
} catch (Exception e) {
// エラーログの出力
System.debug('エラーが発生しました: ' + e.getMessage());
result.success = false;
result.message = 'ケース作成中にエラーが発生しました。';
}
return result;
}
}
3.メールサービスの設定
メールサービスの設定をします。
設定画面のクイック検索ボックスにメールサービスと入力しメールサービスの設定画面を開きます。
設定画面が開けたら[新規メールサービス]を押下します。

メールサービス名、Apexクラスを入力します。
メールサービス名は任意の名称で問題ないです。
Apexクラスは作成した”EmailToCaseHandler”を指定してください。
有効にチェックがついていない場合はチェックをつけて、[保存]を押下します。

追加したメールサービスが表示されているので、メールサービス名を押下して詳細画面を開きます。

メールアドレスの[新規メールアドレス]を押下します。

メールアドレス名、メールアドレス、コンテキストユーザーを入力し、有効にチェックがついていることを確認したら[保存]を押下します。

・メールアドレス名:メールアドレスに名付ける任意の名称です。英数とアンダーバーが入力可能です。
・メールアドレス:メールアドレスのアドレス部に該当する任意の文字列を指定します。(xxx@yyy.jpの”xxx”部分)ドメイン部はSalesforceが自動で生成します。
以下のようになっていれば、メールサービスの設定は完了です。

4.動作確認
メールサービスの動作確認をします。メールサービス画面に表示されていたメールアドレス(アドレス部は任意、ドメイン部はSalesforceが自動生成したとても長いメールアドレス)に対してメールを送信します。


上記の通り、メールサービスがApexクラスを動かし、ケースが作成されていました。
5.最後に
メール-to-ケースの機能が十分な場合は基本的にはそちらを使うのが良いと思います。
しかし、フローと組み合わせたりしてもどうしても業務要件を満たせないこともあるかと思いますので、そういった場合の最終手段としてメールサービスからApexを呼び出すのは使えると思います。