You need to sign in to do that
Don't have an account?
❤Code
multiple email from apex trigger received
I have written a trigger to send email. Whenever the trigger is fired i am getting equal no of mails which is equal to no of records retrieved.
Ex - If i am getting 3 records, three times i am receiving email. Can anybody tell me where i am going wrong . I want a single email to be fired.
trigger taskEmail on Project__c (after update ) {
set<String> projName = new set<String>();
list<Task__c> listTask = new list<Task__c>();
for(Project__c pro : Trigger.new) {
projName.add(pro.Name);
}
listTask = [SELECT Id,Project_Approval__c,Project_Name__c,Status__c,Task_Executioner__c FROM Task__c WHERE Project_Name__c IN : projName];
system.debug('11111' + listTask.size());
EmailTemplate et=[Select id from EmailTemplate where name='Multiple Tasks'];
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
Set<Task__c> setTaskName = new Set<Task__c>();
setTaskName.addAll(listTask);
List<Task__c> finalTsk = new List<Task__c>();
finalTsk.addAll(setTaskName);
if(listTask.size() > 0) {
system.debug('222222' + listTask.size());
for(Task__c con : finalTsk) {
system.debug('33333 enter for ');
if(con.Project_Approval__c =='Approved' && con.Status__c == 'Open'){
system.debug('444 enter if inside for ');
//String userEmail = t.Task_Executioner__r.Email;
//String[] toAddresses = new String[] {userEmail};
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
//mail.setToAddresses(toAddresses);
//mail.setSenderDisplayName('Test');
mail.setTargetObjectId(con.Task_Executioner__c);
//mail.setTargetObjectId(t.Task_Executioner_1__c);
//mail.setTargetObjectId(t.Task_Executioner_2__c);
mail.setTemplateId(et.Id);
mail.setSaveAsActivity(false);
mail.setWhatId(con.Id);
mails.add(mail);
//Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
system.debug('0000000');
}
Messaging.sendEmail(mails);
}
}
Regards
Ex - If i am getting 3 records, three times i am receiving email. Can anybody tell me where i am going wrong . I want a single email to be fired.
trigger taskEmail on Project__c (after update ) {
set<String> projName = new set<String>();
list<Task__c> listTask = new list<Task__c>();
for(Project__c pro : Trigger.new) {
projName.add(pro.Name);
}
listTask = [SELECT Id,Project_Approval__c,Project_Name__c,Status__c,Task_Executioner__c FROM Task__c WHERE Project_Name__c IN : projName];
system.debug('11111' + listTask.size());
EmailTemplate et=[Select id from EmailTemplate where name='Multiple Tasks'];
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
Set<Task__c> setTaskName = new Set<Task__c>();
setTaskName.addAll(listTask);
List<Task__c> finalTsk = new List<Task__c>();
finalTsk.addAll(setTaskName);
if(listTask.size() > 0) {
system.debug('222222' + listTask.size());
for(Task__c con : finalTsk) {
system.debug('33333 enter for ');
if(con.Project_Approval__c =='Approved' && con.Status__c == 'Open'){
system.debug('444 enter if inside for ');
//String userEmail = t.Task_Executioner__r.Email;
//String[] toAddresses = new String[] {userEmail};
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
//mail.setToAddresses(toAddresses);
//mail.setSenderDisplayName('Test');
mail.setTargetObjectId(con.Task_Executioner__c);
//mail.setTargetObjectId(t.Task_Executioner_1__c);
//mail.setTargetObjectId(t.Task_Executioner_2__c);
mail.setTemplateId(et.Id);
mail.setSaveAsActivity(false);
mail.setWhatId(con.Id);
mails.add(mail);
//Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
system.debug('0000000');
}
Messaging.sendEmail(mails);
}
}
Regards
All Answers
Please mark this as solution by selecting it as best answer if this solves your problem, So that if anyone has this issue this post can help
Yes the task Executioner is receiving the email multiple times. Below is the updated code - The value present i listTask listg variable , that much email is triggered.
I need a single email to be trigered instead of multiple..
trigger taskEmail on Project__c (after update ) {
set<String> projName = new set<String>();
list<Task__c> listTask = new list<Task__c>();
for(Project__c pro : Trigger.new) {
projName.add(pro.Name);
}
listTask = [SELECT Id,Project_Approval__c,Project_Name__c,Status__c,Task_Executioner__c FROM Task__c WHERE Project_Name__c IN : projName];
system.debug('11111' + listTask.size());
EmailTemplate et=[Select id from EmailTemplate where name='Multiple Tasks'];
List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
if(listTask.size() > 0) {
system.debug('222222' + listTask.size());
for(Task__c con : listTask ) {
system.debug('33333 enter for ');
if(con.Project_Approval__c =='Approved' && con.Status__c == 'Open'){
system.debug('444 enter if inside for ');
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId(con.Task_Executioner__c);
mail.setTemplateId(et.Id);
mail.setSaveAsActivity(false);
mail.setWhatId(con.Id);
mails.add(mail);
}
system.debug('0000000');
}
Messaging.sendEmail(mails);
}
}
Regards
I made a few changes in the for loop, try this
I m getting incorrect method error in the line no 12. can u plese check.
executionerIds.add();
Regards
I m still geting 3 emails.
Regards,
Superb bro.U r genius. Worked like a charm. Thanks very much..
Regards..