SFDCからメールを送信する方法は色々とありますが、今回はApexを使った簡単なメール送信方法を紹介します。
Apexコードを使用するとApexトリガーやApexスケジューラからメールを送信することができます。
Apexからメール送信する方法には「単一メール送信」と「一括メール送信」があります。今回は「単一メール送信」を使った方法を説明します。
さらにメール本体についてはApexの中でメール本体を作成する方法と「メールテンプレート」を使う方法がありますが、ここではメール本体をApexの中で作成します。
1.メールアドレス保存用カスタムオブジェクトの作成
メール送信先を登録するための以下のようなカスタムオブジェクト(MailMember)を作成します。
2.Apexでのメール作成と送信
Apexでメールを作成し、送信する部分のコードは以下となります。
List<String>mailAdderList = new List<String>();
String mailMsg = '連絡事項';
List<MailMember__c>mailMember = [select id,Name,mailAddress__c from MailMember__c];
for(MailMember__c mM:mailMember){
mailAdderList.add(mM.mailAddress__c);
mailMsg += '\n';
mailMsg += nM.name;
}
mailMsg += '\n';
mailMsg += 'メッセージを入力';
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(mailAdderList);
mail.setSubject('Test Mail Subject');
mail.setPlainTextBody(mailMessage);
mail.setUseSignature(false);
mail.setBccSender(false);
mail.setSenderDisplayName('メール送信者名入力');
List<Messaging.SendEmailResult> results =
Messaging.sendEmail(new List<Messaging.SingleEmailMessage>{mail},false);
for (Messaging.SendEmailResult result : results) {
if (!result.isSuccess()) {
System.debug(LoggingLevel.ERROR, result.getErrors()[0]);
}
}
コードの簡単な説明です。
List<mailMember__c>mailMember
で送信先メールアドレスを保存します。
new Messaging.SingleEmailMessage()
により「単一メール送信」のインスタンスを作成します。
mail.setToAddresses()
にて送信先アドレスを設定します。設定できるアドレスは100件までです。
mail.setSubject()
にてメールサブジェクトを設定します。
メール本体(メールのBody部)はmail.setPlainTextBody()
にて作成します。
メールの署名とBccは不要なので、setUseSignature()/setBccSender()
にfalseを設定します。
mail.setSenderDisplayName()
でFrom行に表示される送信者表示名を設定します。 setOrgWideEmailAddressId()
で組織の送信元のアドレスIDを設定した場合には設定できません。
また、setOrgWideEmailAddressId()で添付ファイルをsetOrgWideEmailAddressId()で返信先メールアドレスを設定することができます。
最後に、Messaging.sendEmail()
でメールを送信します。2つ目の引数の指定は省略可能でデフォルトはtrueです。trueの場合、任意のsendEmailで失敗した場合、その他すべてのメッセージを送信しない、falseの場合は、メッセージを送信します。
このメソッドはApex トランザクションごとに 10 回コールすることができます。
Messaging.sendEmail()
の結果はList<Messaging.SendEmailResult> results
で受け取ることができます。配列で返却された結果に対してisSuccess()メソッドを実施することで結果を取得することができます。isSuccess()の結果がfalseの場合、getError()を使い、sendEmailErrorオブジェクトを取得することができます。エラーとなるのは送信時のエラーで、送信先に到達したか否かは関係ありません。
3.NO_MASS_MAIL_PERMISSIONエラー
メール送信を実行した場合に「NO_MASS_MAIL_PERMISSION」というエラーが出る場合があります。これは「メールを送信するためのアクセス権」がない場合に発生します。設定により、権限を「すべてのメール」に変更します。
1.検索窓で「送信」を入力
2.メールメニューの「送信」を選択
3.アクセス権で「すべてのメール」を選択