You need to sign in to do that
Don't have an account?
suji srinivasan
Hi, I am unable to send mail in batch Apex
I got error like First error: SendEmail failed. First exception on row 0; first error: INVALID_ID_FIELD, ID is invalid or you do not have access to the record.: [toAddresses, rid.Owner.Email]
public class AccountRatingBatchClass implements Database.Batchable<sObject> {
public List<Account> start(Database.BatchableContext bc){
Integer year = Date.today().year() - 1;
List<Account> aq = [SELECT Id,Rating,CreatedDate FROM Account
WHERE CALENDAR_YEAR(CreatedDate) =:year AND CreatedDate < LAST_N_DAYS:365 AND Rating = 'Client' AND OpportunityCount__c=0];
return aq;
}
public void execute(Database.BatchableContext bc,List<Account> accList){
for(Account acc : accList){
acc.Rating='Prospect';
}
List<Messaging.SingleEmailMessage> atm = new List<Messaging.SingleEmailMessage>();
EmailTemplate et=[Select id from EmailTemplate where Name='AccountProspectGetOpp'];
for(Account al : accList){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
List<AccountTeamMember> recips = new List<AccountTeamMember>(
[SELECT UserId,User.isActive,User.Email FROM AccountTeamMember
WHERE AccountId =: al.Id AND User.isActive=true]);
for(AccountTeamMember rid : recips){
mail.settoAddresses(new string[]{'rid.Owner.Email'});
mail.setTargetObjectId(rid.UserId);
mail.setSenderDisplayName('Salesforce System');
mail.setUseSignature(false);
mail.setBccSender(false);
mail.setSaveAsActivity(false);
mail.setTemplateId(et.Id);
}
atm.add(mail);
}
for(Account acl : accList){
Messaging.SingleEmailMessage mails = new Messaging.SingleEmailMessage();
List<Account> recip = new List<Account>(
[SELECT ownerId,owner.Email FROM Account WHERE Id =: acl.Id]);
for(Account rrid : recip){
mails.settoAddresses(new string[]{'rid.Owner.Email'});
mails.setTargetObjectId(rrid.ownerid);
mails.setSenderDisplayName('Salesforce System');
mails.setUseSignature(false);
mails.setBccSender(false);
mails.setSaveAsActivity(false);
mails.setTemplateId(et.Id);
}
atm.add(mails);
}
update accList;
System.debug(accList);
Messaging.sendEmail(atm);
}
public void finish(Database.BatchableContext bc){
}
}
thanks in advance
public class AccountRatingBatchClass implements Database.Batchable<sObject> {
public List<Account> start(Database.BatchableContext bc){
Integer year = Date.today().year() - 1;
List<Account> aq = [SELECT Id,Rating,CreatedDate FROM Account
WHERE CALENDAR_YEAR(CreatedDate) =:year AND CreatedDate < LAST_N_DAYS:365 AND Rating = 'Client' AND OpportunityCount__c=0];
return aq;
}
public void execute(Database.BatchableContext bc,List<Account> accList){
for(Account acc : accList){
acc.Rating='Prospect';
}
List<Messaging.SingleEmailMessage> atm = new List<Messaging.SingleEmailMessage>();
EmailTemplate et=[Select id from EmailTemplate where Name='AccountProspectGetOpp'];
for(Account al : accList){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
List<AccountTeamMember> recips = new List<AccountTeamMember>(
[SELECT UserId,User.isActive,User.Email FROM AccountTeamMember
WHERE AccountId =: al.Id AND User.isActive=true]);
for(AccountTeamMember rid : recips){
mail.settoAddresses(new string[]{'rid.Owner.Email'});
mail.setTargetObjectId(rid.UserId);
mail.setSenderDisplayName('Salesforce System');
mail.setUseSignature(false);
mail.setBccSender(false);
mail.setSaveAsActivity(false);
mail.setTemplateId(et.Id);
}
atm.add(mail);
}
for(Account acl : accList){
Messaging.SingleEmailMessage mails = new Messaging.SingleEmailMessage();
List<Account> recip = new List<Account>(
[SELECT ownerId,owner.Email FROM Account WHERE Id =: acl.Id]);
for(Account rrid : recip){
mails.settoAddresses(new string[]{'rid.Owner.Email'});
mails.setTargetObjectId(rrid.ownerid);
mails.setSenderDisplayName('Salesforce System');
mails.setUseSignature(false);
mails.setBccSender(false);
mails.setSaveAsActivity(false);
mails.setTemplateId(et.Id);
}
atm.add(mails);
}
update accList;
System.debug(accList);
Messaging.sendEmail(atm);
}
public void finish(Database.BatchableContext bc){
}
}
thanks in advance
try with below code.
If this helps, Please mark it as best answer.
Thanks!!