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()));
        }
    }
}