[SalesForce] Sending email to multiple users via trigger

I have two objects. Department__c and Employee__c. They have master detail relationship. Department__c has a field called 'Active__c' – a checkbox. Whenever the value of that checkbox changes, I am firing an after update trigger that sends email to employees in that department. There is no error shown while update but email is not sent either. Please help. Here is the trigger code and handler code respectively.

Trigger

trigger DeptActiveUpdate on Department__c (after update) {
    String[] strList=new List<String>();     
    list<Employee__c> lstEmployee=new list<Employee__c> ([select email__c, department__c from Employee__c where Department__c in :Trigger.New]);   
    for (Department__c dept: Trigger.new)   
    {       
        Department__c objOldDept=Trigger.oldMap.get(dept.ID);
        if(dept.Active__c != objOldDept.Active__c)
        {             
        for( Employee__c emp: lstEmployee)
        {
            if(dept.Id == emp.department__c )
            strList.add(emp.email__c);           
        }
        }     
            if(dept.Active__c == true)
            {
                 EmailSender.activeTrue(strList);
            }
            else
            {
                 EmailSender.activeFalse(strList);
            }                   
        }         
}

Handler

public class EmailSender{            
    public static void activeTrue(List<String> str){
        System.debug('Email List: '+str);
        Messaging.SingleEmailMessage mail1 = new Messaging.SingleEmailMessage();
        mail1.setSubject('Important');
        mail1.setPlainTextBody('This department has been activated.');
        mail1.setSaveAsActivity(false);
        mail1.setToAddresses(str);
        User objUser= [select id from User where Email = 'jigartrivedi88@yahoo.com' limit 1];
        mail1.setTargetObjectId(objUser.Id);
        Messaging.sendEmail(new Messaging.Email[] {mail1});
        System.debug('inside active true. end of function.');
    }    
    public static void activeFalse(List<String> str){
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        mail.setSubject('Important');
        mail.setPlainTextBody('This department has been activated.');
        mail.setSaveAsActivity(false);
        mail.setToAddresses(str);
        User objUser = [select id from User where Email = 'jigartrivedi88@yahoo.com' limit 1];
        mail.setTargetObjectId(objUser.Id);
        Messaging.sendEmail(new Messaging.Email[] {mail});        
        System.debug('inside active false. end of function.');
    }
}

Best Answer

It seems that yahoo policy is conflicted. As I am sending email through my yahoo account as a user. What was happening and what made my above code correct is I was sending mails to multiple employees using my user account in salesforce which has yahoo mail id. When the trigger was fired the code was running properly but the mail was not sent to the intended recipients. It was due to Yahoo's policy. And, as a result the mail was failed to send. I am executing it in my developer account.

Related Topic