Using APEX to assemble HTML Letterhead EmailsUsing APEX to assemble HTML Letterhead Emails
public class mailUtils {
public class mailUtilsException extends exception {}
public Boolean useSig {get; private set;}
public Boolean saveActivity {get; private set;}
public String senderDisplayName {get; private set;}
public mailUtils(Boolean useSig, Boolean saveActivity, String senderDisplayName){
this.useSig = usesig;
this.saveActivity = saveActivity;
this.senderDisplayName = senderDisplayName;
}
// Derived from:
// httphttps://salesforce.stackexchange.com/questions/13/using-apex-to-assemble-html-letterhead-emails/8745#8745
public Messaging.SingleEmailMessage MergeTemplateWithoutSending(Id targetObjectId, Id templateId) {
Messaging.reserveSingleEmailCapacity(1);
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
// Intentionally set a bogus email address.
String[] toAddresses = new String[]{'[email protected]'};
mail.setToAddresses(toAddresses);
mail.setUseSignature(this.useSig);
mail.setSaveAsActivity(this.saveActivity);
mail.setSenderDisplayName(this.senderDisplayName);
mail.setTargetObjectId(targetObjectId);
mail.setTemplateId(templateId);
// create a save point
Savepoint sp = Database.setSavepoint();
// Force the merge of the template.
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail});
// Force a rollback, and cancel mail send.
Database.rollback(sp);
// Return the mail object
// You can access the merged template, subject, etc. via:
// String mailTextBody = mail.getPlainTextBody();
// String mailHtmlBody = mail.getHTMLBody();
// String mailSubject = mail.getSubject();
return mail;
}
public static Map<String,String> getMergedTemplateForObjectWithoutSending(Id targetObjectId, Id templateId, Boolean useSig, Boolean saveActivity, String senderDisplayName) {
Map<String,String> returnValue = new Map<String,String>();
mailUtils mu = new mailUtils(useSig, saveActivity, senderDisplayName);
Messaging.SingleEmailMessage mail = mu.MergeTemplateWithoutSending(targetObjectId, templateId);
returnValue.put('textBody', mail.getPlainTextBody());
returnValue.put('htmlBody', mail.getHTMLBody());
returnValue.put('subject', mail.getSubject());
return returnValue;
}
}