2011-08-03

Force.com : Apex でメール送信機能を実装したい


Apex でメール送信機能を実装したい



○ メール送信機能
■ メール送信クラス
public with sharing class OutboundEmail {

    /** メッセージリスト */
    private List<Messaging.SingleEmailMessage> messages;

    /**
     * コンストラクタ
     */
    public OutboundEmail() {
        messages = new List<Messaging.SingleEmailMessage>();
    }

    /**
     * メッセージ作成
     * @param replyTo 返信先アドレス
     * @param senderDisplayName 差出人名
     * @param toAddresses To アドレス
     * @param ccAddresses Cc アドレス
     * @param subject 件名
     * @param planText 本文
     */
    public void createSendMessage(
            String replyTo
            , String senderDisplayName
            , String[] toAddresses
            , String[] ccAddresses
            , String subject
            , String planText) {
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
        if(replyTo != null) {
            message.setReplyTo(replyTo);
        }
        if(senderDisplayName != null) {
            message.setSenderDisplayName(senderDisplayName);
        }
        message.setToAddresses(toAddresses);
        if(ccAddresses != null) {
            message.setCcAddresses(ccAddresses);
        }
        message.setSubject(subject);
        message.setPlainTextBody(planText);
        message.setUseSignature(false);
        addMessage(message);
    }

    /**
     * メッセージ追加
     * @param message メッセージ
     */
    private void addMessage(Messaging.SingleEmailMessage message) {
        if(messages == null) {
            messages = new List<Messaging.SingleEmailMessage>();
        }
        messages.add(message);
    }

    /**
     * メール送信
     */
    public void send() {
        if(messages != null && messages.size() > 0) {
            Messaging.sendEmail(messages);
        }
    }
}

■ 使い方
OutboundEmail mail = new OutboundEmail();
mail.createSendMessage('xxx@g.com'
                        , '差出人名'
                        , new String[]{'yyy@g.com'}
                        , null
                        , '件名'
                        , '本文');
mail.send();



◆ メモ
■ 注意
  • 処理が完了するまでメールは送信されない
  • 1 処理ごとに呼び出せる sendEmail メソッドは最大 10 迄
  • saleseforce ライセンスで指定されているメール送信処理数を上回るとエラーが発生する

■ SingleEmailMessage
  • 差出人名・メールアドレス・署名のデフォルトは実行ユーザのメールの設定([設定]→[個人設定・メール]→[私のメール設定])が適用される
  • 差出人を BCC に含めるかの設定(setBccSender)のデフォルトは false
  • 署名を付加するかの設定(setUseSignature)のデフォルトは true
  • メールテンプレートが使えるぽい(setTemplateID)



◇ 環境

  • Salesforce - Developer Edition - API バージョン 22.0



◇ 参考