function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
SUJAY GANGULY 5SUJAY GANGULY 5 

can send email with email template

I am adding a Email Template Id in a custom object test field. Now I want to send email using that field value in another object. I come close but one error is occur. "System.EmailException: SendEmail failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Add a recipient to send an email.: [] ".

Can anyone suggest what should i do?


Here is my Apex code:

Public class ProjectTeamStakeholderTriggerHelper{
    Map<String,String> UserEmailMap;
     public ProjectTeamStakeholderTriggerHelper(){
         UserEmailMap= new Map<String,String>();
         for(User usrId:[select id,email from User]){
             UserEmailMap.put(usrId.id, usrId.Email);
         }
     }
    
    public void ProjectTeamStakeholder(List<Project_Teams_and_Stakeholder_Groups_c> newProjectTeamList, List<Project_Teams_and_Stakeholder_Groups_c> oldProjectTeam){
        //variable declaration
        Map<String,Email_Template_c> EmailTemplateObjMap= new Map<String,Email_Template_c>();
        Set<Id> ProjectTeamStakeholderList= new Set<Id>();
        Set<String> UniqueKeySet= new Set<String>();
        Integer AccountableFlag=0;
        Integer ConsultedFlag=0;
        Integer InformedFlag=0;
        Integer ResponsibleFalg=0;
        List<String> EmailTemplateStandardList = new List<String>();
        List<RACI_Chart_c> EmailRACIList= new List<RACI_Chart_c>();
        List<Id> EmailToUserIds= new List<ID>();
        List<String> SendEmailAddressList= new List<String>();
        Boolean EamilSend=false;
        
        //retrieve all Email Template records
        for(Email_Template_c emailId:[select UniqueNamec,Email_Template_Typec ,Email_Objectc,Organizationc,RACI_Typec,Template_IDc from Email_Template_c]){
            EmailTemplateObjMap.put(emailId.UniqueName__c, emailId);
            
        }
        for(Project_Teams_and_Stakeholder_Groups__c oldTeamSta: oldProjectTeam){
            ProjectTeamStakeholderList.add(oldTeamSta.Id);
            UniqueKeySet.add(oldTeamSta.Organization_c+''+'Project Teams and Stakeholder Groups');//set Uniquekey
        }
        
          //Set flag depending on the Email Template object
       // try{
        for(String uniqueKey:UniqueKeySet){
            Email_Template__c EmailTemplate= EmailTemplateObjMap.get(uniqueKey);
            if(EmailTemplate.Email_Object_c=='Project Teams and Stakeholder Groups'&& EmailTemplate.Email_Template_Typec=='Edit' && EmailTemplate.RACI_Type_c=='Accountable'){
                AccountableFlag=1;
                EmailTemplateStandardList.add(EmailTemplate.Template_ID__c);
                if(EmailTemplate!=null){
                    System.debug('Email tamplate is'+EmailTemplate);
                }
                
            }
        }
        EmailRACIList= [select id,User_c,User_Typec from RACI_Chartc where Project_Teams_and_Stakeholder_Groups_c in :ProjectTeamStakeholderList];
        
         //Set the approverList
        for(RACI_Chart__c RACIChart:EmailRACIList){
            if((AccountableFlag==1 && ConsultedFlag==0 && InformedFlag==0 && ResponsibleFalg==0)&&(RACIChart.User_Type__c == 'Accountable')){
                EmailToUserIds.add(RACIChart.User__c);
            }
        }
         //Email Sending : Start Here
        for(Id UserId: EmailToUserIds){
            SendEmailAddressList.add(UserEmailMap.get(UserId));
        }
        for(Project_Teams_and_Stakeholder_Groups__c OldProTeamSta: oldProjectTeam){
            for(Project_Teams_and_Stakeholder_Groups__c NewProTeamSta:newProjectTeamList){
                if(OldProTeamSta!=NewProTeamSta){
                EamilSend=true;    
                }
            }
        }
       // }
        //Catch(Exception e){
         //   System.debug(e);
       // }
        if(EamilSend){
            system.debug('Email notification for approval submition::::::::'+SendEmailAddressList);
             List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
             Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
             string body = 'Email Template test';
             mail.setSubject('Email Template test');
                    //String[] toAddresses = new String[] {userIdEmailMap.get(IdItr)};
             mail.setToAddresses(SendEmailAddressList);
             mail.setHtmlBody(body);
             mails.add(mail);
             Messaging.sendEmail(mails);
        }
        System.debug(SendEmailAddressList);
        System.debug(EmailTemplateStandardList);
          //Email Sending : End Here
    }
}

here is my trigger:
trigger EmailTemSendTrigger on Project_Teams_and_Stakeholder_Groups__c (before update) {
    
    if(Trigger.isBefore && Trigger.isUpdate){
         
        ProjectTeamStakeholderTriggerHelper helper= new ProjectTeamStakeholderTriggerHelper();
         helper.ProjectTeamStakeholder(trigger.new,trigger.old);
        
    }
}

Email will send when record is edited.