Triggerで添付ファイルを含めたメールを送信する

目的

オブジェクトが更新されたタイミングで、レコードに紐付いた添付ファイル(Attachment)をメールの添付ファイルとして送信したい。

ポイント

メールの送信は、ApexのMessagingクラスを利用します。添付ファイルの扱い方に関しては、サンプル・コードを参照してください。

サンプル・コード

trigger SendMailTrigger on TestObject__c (after insert, after update) {
  for (TestObject__c obj: Trigger.new){
    if (/** メールが送信される条件 **/){
      // メール送信のためのクラス SingleEmailMessage を初期化
      Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
      
      // 宛先を設定
      String[] toAddress = new String[]{obj.email__c};
      mail.setToAddresses(toAddress);
      
      // メールの件名を設定
      mail.setSubject(obj.title__c);
      
      // メールで利用するエンコーディングを指定
      mail.setCharset('ISO-2022-JP');
      
      // 本文を設定
      mail.setPlainTextBody(obj.comment__c);
      
      // レコードにひもずく添付ファイルを取得 
      List<Attachment> atts = [select name, body from attachment where parentId = :obj.id];
      
      // メールの添付ファイルを設定
      List<Messaging.Emailfileattachment> fas = new List<Messaging.Emailfileattachment>();
      for (Attachment att : atts){        
        Messaging.Emailfileattachment fa = new Messaging.Emailfileattachment();
        fa.setFileName(att.name);
        fa.setBody(att.body);
        fas.add(fa);
      }
      mail.setFileAttachments(fas);
      
      // ReplyToで設定するEmailアドレスの設定
      mail.setReplyTo(REPLY_TO);
      
      // メールの送信
      Messaging.sendEmail(new List<Messaging.Email>{mail});
    }
  }
}

制限事項

Apexコードからのメール送信は、一括メール送信扱いになりますので、一日1000通までという制限が課せられます。