Hi friends,
Previously in this post I showed you how we can send emails using Messaging
class, but many times we need to send email using email templates in apex code.
So in this post I am using email templates to an send
email from apex code:
I am using 2 vf pages and 2 controller in this example:-
- SendEmailByTemplateVFPage - This is the page from where we are sending Email from template.
- ClsSendEmailByTemplate - This is controller class of "SendEmailByTemplateVFPage".
- SelectTemplate - This is another vf page which is calling from "SendEmailByTemplateVFPage", in this page we are querying all the Email Templates.
- ClsSelectTemplate - This is controller class of "SelectTemplate".
Here the code:-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public with sharing class clsSelectTemplate | |
{ | |
private Map<Id, Folder> folderMap{get;set;} | |
//List of string to store Alphabets character for Alphabetically searching | |
public List<EmailingTemplate> emailingTemplates {get; set;} | |
//This is map to fetch all ids of email folders. | |
private Set<Id> folderListIds = new Set<Id>(); | |
//List of all folders's ids | |
private Set<Id> folderOtherIds = new Set<Id>(); | |
//To get Template's value | |
public String folderId {get; set;} | |
//constructor | |
public clsSelectTemplate() | |
{ | |
emailingTemplates = new List<EmailingTemplate>(); | |
folderMap = new Map<Id, Folder>( [Select id , Name from Folder where Type = 'Email']); | |
this.ETData(); | |
} | |
public void ETData() //Method to get Name TemplateType Description FolderId from EmailTemplate | |
{ | |
for(EmailTemplate e : [select Name, TemplateType, Description, FolderId from EmailTemplate where IsActive=true Order by Name]) | |
{ | |
if(!folderListIds.contains(e.FolderId)) | |
folderListIds.add(e.FolderId); | |
EmailingTemplate tempE = new EmailingTemplate(); | |
tempE.templateId = e.Id; | |
tempE.Name = e.Name; | |
tempE.isSelected = false; | |
tempE.TemplateType = e.TemplateType; | |
tempE.Description = e.Description; | |
emailingTemplates.add(tempE); | |
} | |
for(Folder f : folderMap.values()) | |
if(!folderListIds.contains(f.id)) | |
folderListIds.add(f.Id); | |
} | |
public void createTempList() //Method to get all folder and email template in eamil setting | |
{ | |
emailingTemplates = new List<EmailingTemplate>(); | |
List<EmailTemplate> etList = new List<EmailTemplate>(); | |
if('All' == folderId) | |
etList = [select Name, TemplateType, Description, FolderId from EmailTemplate where FolderId IN :folderListIds AND IsActive=true Order by Name]; | |
else if('Others' == folderId) | |
etList = [select Name, TemplateType, Description, FolderId from EmailTemplate where FolderId IN :folderOtherIds AND IsActive=true Order by Name]; | |
else | |
etList = [select Name, TemplateType, Description, FolderId from EmailTemplate where FolderId = :folderId AND IsActive=true Order by Name]; | |
for(EmailTemplate e : etList) | |
{ | |
EmailingTemplate tempE = new EmailingTemplate(); | |
tempE.templateId = e.Id; | |
tempE.Name = e.Name; | |
tempE.isSelected = false; | |
tempE.TemplateType = e.TemplateType; | |
tempE.Description = e.Description; | |
emailingTemplates.add(tempE); | |
} | |
} | |
public List<SelectOption> getItems() // show email template according to selaeted email template folder | |
{ | |
List<SelectOption> options = new List<SelectOption>(); | |
folderOtherIds = new Set<Id>(); | |
options.add(new SelectOption('All', 'All')); | |
for(String f : folderListIds) | |
{ | |
if(folderMap.get(f) == null) | |
{ | |
folderOtherIds.add(f); | |
system.debug('----------------folderOtherIds-------------'+folderOtherIds); | |
} | |
else | |
options.add(new SelectOption(folderMap.get(f).id, folderMap.get(f).Name)); | |
} | |
if(folderMap.size() > 0) | |
options.add(new SelectOption('Others', 'Others')); | |
return options; | |
} | |
class EmailingTemplate // inner class to get emailTemplates Properties | |
{ | |
public Boolean isSelected {get; set;} | |
public String templateId {get; set;} | |
public String Name {get; set;} | |
public String TemplateType {get; set;} | |
public String Description {get; set;} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ClsSendEmailByTemplate{ | |
public string EmailTempateId{get;set;} | |
public EmailTemplate ET{get;set;} | |
public string emailVal{get;set;} | |
public string cc{get;set;} | |
public string emailSubject{get;set;} | |
public string body{get;set;} | |
public User usr{get;set;} | |
public ClsSendEmailByTemplate(){ | |
usr = new User(); | |
} | |
public void getTemplate(){ | |
try{ | |
if(EmailTempateId == null || EmailTempateId == ''){ | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select Email Template')); | |
} | |
else{ | |
ET = [Select Id,Subject,Body from EmailTemplate where Id =: EmailTempateId]; | |
} | |
} | |
catch(Exception ex){ | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,ex.getMessage())); | |
} | |
} | |
public void sendMail( ){ | |
try{ | |
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); | |
email.setTemplateId(ET.Id); | |
email.setTargetObjectId(usr.ContactId); | |
Messaging.SendEmailResult[] sendResult; | |
Messaging.SendEmailResult [] r =Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email}); | |
ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.INFO,'Email Has Been Sent'); | |
ApexPages.addMessage(myMsg); | |
} | |
catch(Exception ex){ | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,ex.getMessage())); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page controller="clsSelectTemplate" showHeader="false" sidebar="false" id="page"> | |
<style> | |
.popup_div_content_div .select_folder select { margin:5px 5px 0 5px; padding:2px; min-width:200px; } | |
.popup_div_content_div .n_t_d_box { width:auto; height:auto; border:#ccc 1px solid; border-top:3px #666666 solid; padding:0px; margin:15px 0 0 0; } | |
.popup_div_content_div .n_t_d_box .tr { width:atuo; height:34px; border-bottom:#e5e5e5 1px solid; } | |
.popup_div_content_div .n_t_d_box .tr .bg { background:#eee; } | |
.popup_div_content_div .n_t_d_box .tr .td1 { width:200px; float:left; } | |
.popup_div_content_div .n_t_d_box .tr .td2 { width:40px; float:left; padding:0 4px; } | |
.popup_div_content_div .n_t_d_box .tr .td2.border_left_right { border-left:#ddd 1px solid; border-right:#ddd 1px solid; margin:0 0 0 -2px; display:inline; height: 34px; } | |
.popup_div_content_div .n_t_d_box .tr .td3 { width:auto; float:left; padding:0 0 0 3px; } | |
</style> | |
<apex:form id="frm"> | |
<apex:actionFunction name="createTempList" action="{!createTempList}" rerender="eFD2OP" oncomplete="selectcheckboxonpre_temp();" status="myRecSav"/> | |
<div class="popup_div_content_div height_400px" style="height:auto !important;"> | |
<apex:outputPanel id="eFD2OP"> | |
<div class="select_folder" style="margin-left: 2px;"> | |
<strong> Folder</strong> | |
<apex:selectList value="{!folderId}" size="1" style="width:150px;" onchange="javascript: createTempList();" > <!-- Email folders ak1 --> | |
<apex:selectOptions value="{!items}"/> | |
</apex:selectList> | |
</div> | |
<div class="n_t_d_box" style="display:{!IF(emailingTemplates.size==0,'none','block')}"> | |
<div class="tr bg" > | |
<div class="td1 td_bg" style="width: 18%;"><strong>Name</strong></div> | |
<div class="td2 td_bg border_left_right" style="width:12%;"><strong>Type</strong></div> | |
<div class="td3 td_bg" style="width: 68%;"><strong>Description</strong></div> | |
<div class="cl"></div> | |
</div> | |
<apex:repeat value="{!emailingTemplates}" var="e" id="table"> | |
<!-- Start TR Data --> | |
<div class="tr"> | |
<div class="td1" style="width: 18%;"> | |
<a href="#" id="{!e.TemplateID}" onclick="javascript : templatechosen(this.id); return false;" style="color:#015ba7;text-Decoration='none !important'" onmouseover="this.style.color='#E27216'" onMouseout="this.style.color='#015ba7';">{!e.Name}</a> | |
</div> <div class="td2" style="width:12%;">{!e.TemplateType}</div> | |
<div class="td3" style="width: 68%;">{!e.Description}</div> | |
<div class="cl"></div> | |
</div> | |
<!-- End TR Data --> | |
</apex:repeat> | |
</div> | |
<apex:outputPanel id="blnkPanel" rendered="{!IF(emailingTemplates.size==0,true,false)}"> | |
<div class="n_t_d_box"> | |
<div class="tr">No records found.</div> | |
<div class="tr bg"> | |
<div class="td1 td_bg"><strong>No Templates Available</strong></div> | |
<div class="cl"></div> | |
</div> | |
</div> | |
</apex:outputPanel> | |
<script> | |
function templatechosen(id) | |
{ | |
parent.window.opener.calldisplaytemplate(id); | |
window.parent.close(); | |
} | |
</script> | |
</apex:outputPanel> | |
</div> | |
</apex:form> | |
</apex:page> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page controller="ClsSendEmailByTemplate"> | |
<apex:form > | |
<apex:pageMessages ></apex:pageMessages> | |
<apex:pageBlock title="Email" id="PB"> | |
<apex:pageBlockSection columns="1"> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Contact"/> | |
<apex:inputField value="{!usr.ContactId}" required="true"/> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Email Template" /> | |
<apex:outputPanel > | |
<apex:outputLabel value="Click Lookup to Select Email Template" /> | |
<img onclick="OpenSelectTempatePOPUP();" class="lookupIcon"/> | |
</apex:outputPanel> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Subject" /> | |
<apex:outputField value="{!ET.Subject}" style="width: 500px;"/> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Body" /> | |
<apex:inputTextarea style="height:300px; width:1020px" value="{!ET.Body}"/> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel /> | |
<apex:commandButton value="Send" action="{!sendMail}"/> | |
</apex:pageBlockSectionItem> | |
</apex:pageBlockSection> | |
</apex:pageBlock> | |
<apex:actionfunction name="getTemplate" action="{!getTemplate}" reRender="PB"> | |
<apex:param value="" assignTo="{!EmailTempateId}" name="val"/> | |
</apex:actionfunction> | |
</apex:form> | |
<script> | |
function OpenSelectTempatePOPUP(){ | |
window.open('/apex/SelectTemplate','Ratting','width=1200,height=620,toolbar=0,menubar=0,status=1,resizable=0'); | |
return false; | |
} | |
function calldisplaytemplate(id){ | |
getTemplate(id); | |
} | |
</script> | |
</apex:page> |
Screen Shots:-
Happy Coding...:)
Thanks
Anurag Jain