Lightning メールテンプレート + Apex でメール自由送信


背景

・送信機能自動化
・複数オブジェクトから情報を抽出して送信情報を作成する
・あるレコードの関連ファイルをメールに添付して送信したい

1.Lightning メールテンプレート作成

2.Apex実装

/**
 * parameter:
 *   ・取引先責任者:contactId
 *   ・contentDocumentId:関連ファイル
 */
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

// 「メール:組織のアドレス」に登録したメールアドレスを取得
ID orgWideEmailAddressId = [SELECT Address FROM OrgWideEmailAddress WHERE DisplayName = 'XXXXXX' LIMIT 1].Id;

// 送信元設定
mail.setOrgWideEmailAddressId(orgWideEmailAddressId);

// 送信先設定(取引先責任者から取得する)
Contact contactInfo = [SELECT Id, Name, Account.Name FROM Contact WHERE Id=:contactId];
mail.setTargetObjectId(contactInfo.Id);

// メールの添付ファイルを設定
ContentVersion cVer = [SELECT Title, FileExtension, FileType, VersionData FROM ContentVersion WHERE ContentDocumentId = :contentDocumentId AND IsLatest = true];
List<Messaging.Emailfileattachment> fas = new List<Messaging.Emailfileattachment>();
Messaging.Emailfileattachment fa = new Messaging.Emailfileattachment();
fa.setFileName(cVer.Title + '.' + cVer.FileExtension);
fa.setBody(cVer.VersionData);
fas.add(fa);
mail.setFileAttachments(fas);

// メールテンプレートからメール送信内容を設定する
EmailTemplate et = [SELECT Id, Subject, Body, HtmlValue FROM EmailTemplate WHERE name = 'XXXXXX'];
et.Subject=et.Subject.replace('#Subject#', 'Subject詳細内容');
et.HtmlValue=et.HtmlValue.replace('#ContactName#', 'お客様の名前');
et.HtmlValue=et.HtmlValue.replace('#FileName#', cVer.Title);
mail.setSubject(et.Subject);
mail.setHtmlBody(et.HtmlValue);

// 送信
try {
    Messaging.sendEmail(new List<Messaging.SingleEmailMessage> { mail }, true);
} catch (Exception e) {
    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'メール送信失敗しました。'));
    return ;
}