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通までという制限が課せられます。
参考資料
Force.com Apex Code Developer's Guide
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_email_outbound.htm