You need to sign in to do that
Don't have an account?
SUJAY 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.
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.