Problem: How to attach PDF from a Visualforce page in email using apex class or trigger?
Description: We had a Visualforce page name ‘templateCOI’ which was rendered as a PDF. We wanted to use this page as an attachment in the automated email on a trigger.
Solution: Here is the code for this problem:
In this example, an automated email is sent when payment status of the record is updated to ‘Paid’.
Code for trigger:
trigger CheckPaymentStatus on Object_Info__c (before update) { List TripsList = new List(); for(Object_Info__c term : Trigger.new) { Object_Info__c oldOpp = Trigger.oldMap.get(term.Id); if(term.Payment_Status__c =='Paid') { if(oldOpp.Payment_Status__c != term.Payment_Status__c) { sendPDfEmail.sendPDf(term.Id,term.Email__c); } } } }
Code for sending emailing and attaching Visualforce page in email:
public class sendPDfEmail { public static void sendPDf(String Id,String Email) { Messaging.SingleEmailMessage emailTobeSent = new Messaging.SingleEmailMessage(); PageReference PDf = Page.templateCOI;//Replace attachmentPDf with the page you have rendered as PDF PDf.getParameters().put('Id',Id); PDf.setRedirect(true); Attachment attach = new Attachment(); Blob b ; b = PDf.getContent(); attach.Body = b; attach.Name = 'Confirmation of product'; attach.IsPrivate = false; attach.ParentId = Id; insert attach; Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment(); efa.setFileName('Confirmation of product.PDf'); efa.setBody(b); List listEmailMembers = new List(); listEmailMembers.add(Email); emailTobeSent.setToAddresses(listEmailMembers); emailTobeSent.setSubject('Confirmation of product'); emailTobeSent.setHtmlBody('Hi'); emailTobeSent.setFileAttachments(new Messaging.EmailFileAttachment[] {efa}); // Sends the email Messaging.SendEmailResult [] r1 = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {emailTobeSent}); } }