+ Start a Discussion
Olga Kim 5Olga Kim 5 

send emails in batch apex

I have a requirement to create a batch class for Tenant__c object for the Property management app. 
The condition is when our Tenant doesn't pay rent by the beginning of the month, we send him/her an email with a reminder.  

There is a field called "Status" on Tenant object if the status is not "Paid" then send email.

I wrote a batch class but I am not sure where do I put condition to send emails? In Execute or Finish?

Please Help!


global class TenantLatePaymentTask implements Database.Batchable<SObject> {
         global Database.QueryLocator start(Database.BatchableContext BC) {
            return Database.getQueryLocator([
        SELECT Name, Id, Email_Address__c,description__c from Tenant__c
        Where Status__c='Non-Active']); }

global void execute(Database.BatchableContext BC, List<Tenant__c> tenants) {

list<Tenant__c> TenList=new list<Tenant__c>();
   
    for (Tenant__c tenant : tenants) {
tenant.description__c='Last Payment is missing. Please Follow up with the Tenant';
TenList.add(tenant);          
        
}
    list<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();

    for (Tenant__c Ten :TenList ) {
    if (Ten.Email_Address__c != null && Ten.Status__c!='Paid') {
      
      Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();    
     
      List<String> sendTo = new List<String>();
      sendTo.add(Ten.Email_Address__c);
      mail.setToAddresses(sendTo);
    
     
      mail.setReplyTo('dreamhouse@gmail.com');
      mail.setSenderDisplayName('Dreamhouse real estate Co');
    
     
      List<String> ccTo = new List<String>();
      ccTo.add('business@bankofnigeria.com');
      mail.setCcAddresses(ccTo);

      
      mail.setSubject('Last Rent Payment is Missing');
      String body = 'Dear ' + Ten.First_Name__c + ', ';
      body += 'Please, submit your last rent payment';
      mail.setHtmlBody(body);
    
      
      mails.add(mail);
    }
  }
  
  Messaging.sendEmail(mails);
    if(TenList!=null && TenList.size()>0){
        database.update(TenList);
}
}global void finish(Database.BatchableContext BC) {
 
}

 
Maharajan CMaharajan C
Hi Kim,

It should be in execute method only.

Thanks,
Maharajan.C
Olga Kim 5Olga Kim 5
ok. thank you.
it is my first batch class. does it look correct? I am not sure how to check is it working or not?