はじめに

仕事で触る機会があったので、Apexコードを使用したメール機能のサンプルを記事にしたいと思います。

ワークフロー機能等では出来ない複雑な条件時のメール送信も、ApexトリガやApexスケジュールなどと併用することで可能になります。

※今回紹介しているのはSingleEmailMessageと呼ばれる、一人に対して一件メールを送る方法です。

for文等を使えば複数の人にメールを送ることもできますが、ガバナ制限により現在は一度のメソッド実行で10人まで、一日あたり1000件しか送れないみたいなので注意。 詳細は下記参照。

コードサンプル

  • Apexクラス_SendMail

一番単純なメール送信機能の例。工夫すれば、取引先責任者オブジェクトなどからselect文で値を取り出し、for文などで取り出した人全員にメールを送るなんてこともできます。(ただし先ほども述べた通り、一度の呼び出しで10人まで)

public with sharing class SendMail {

  public void SendMail() {

    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

    // ここであて先を指定
    mail.setToAddresses(new String[]{fuga@fugafuga.co.jp});

    // ここでCC送り先を指定
    mail.setCcAddresses(false);

    // こでBCC送り先を指定
    mail.setBccSender(false);

    // ここで送信元を指定
    mail.setReplyTo(hoge@hogehoge.co.jp);

    // ここで送信元名前を指定
    mail.setSenderDisplayName(管理者);

    // 必要に応じて電子メールにsalesforce.comのメールの署名を追加します。
    // Apexコードを実行しているユーザのメールアドレスが使用されます。
    mail.setUseSignature(false);

    //ここで題名を指定
    mail.setSubject(ここに題名を入力);

    //ここで本文を指定
    mail.setPlainTextBody(ここに本文を入力);

    // ここで送る
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
  }
}
  • Visualforceページ_SendMail

Apexクラス_SendMailを実行する為の画面を作成します。今回はボタンを押すとSendMailメソッドが実行されるという仕組みになります。

<apex:page controller="SendMail">
    <apex:form >
        <apex:commandButton action="{!SendMail}" value="送信"/>
    </apex:form>
</apex:page>

※Sandbox使用時の注意点

Sandbox環境の場合はメールの設定をしないと送信ができないみたいです。 しかもリフレッシュするとデフォルトでアクセス権限なしになるので毎回設定が必要らしい。

メール管理 > 送信 > アクセス権 > すべてのメール

下記エラーが出た場合は設定を変える必要があります。

NO_MASS_MAIL_PERMISSION

https://odekakeshimasyo.io/salesforce-no_mass_mail_permission.html