Apexを使った簡単なメール送信方法

 SFDCからメールを送信する方法は色々とありますが、今回はApexを使った簡単なメール送信方法を紹介します。

 Apexコードを使用するとApexトリガーやApexスケジューラからメールを送信することができます。
 Apexからメール送信する方法には「単一メール送信」と「一括メール送信」があります。今回は「単一メール送信」を使った方法を説明します。
 さらにメール本体についてはApexの中でメール本体を作成する方法と「メールテンプレート」を使う方法がありますが、ここではメール本体をApexの中で作成します。

1.メールアドレス保存用カスタムオブジェクトの作成

 メール送信先を登録するための以下のようなカスタムオブジェクト(MailMember)を作成します。

カスタムオブジェクト(メールメンバー)
図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.メールメニューの「送信」を選択

図2 メールのアクセス権の設定(1)
【図2 メールのアクセス権の設定(1)】

3.アクセス権で「すべてのメール」を選択

図3 メールのアクセス権の設定(2)
【図3 メールのアクセス権の設定(2)】
【図4】メールのアクセス権の設定(3)
【図4】メールのアクセス権の設定(3)