TransWikia.com

Single Email Message Error -- REQUIRED_FIELD_MISSING, Missing target address

Salesforce Asked by Shantanu Mahajan on December 22, 2020

I have written a trigger in which I want to send an email to the Email address of Contact. But when i am testing the trigger it is giving me an error of

REQUIRED_FIELD_MISSING, Missing target address (target, to, cc, bcc): []:

Following is the code for trigger

trigger SendEmailMessageToFlatContact on Building_Wing__c (after update) {

    set<id> setValidBuildId = new set<id>();
    List<Flat__c> listFlat = new List<Flat__c>();
    List<String> ListOkEmails = new List<String>();
    List<String> ListPaymentEmails = new List<String>();
    map<String, Flat__c> mapEmailFlat = new map<String, Flat__c>();
    boolean Flag;

    for(Building_Wing__c objBuild: trigger.new)
    {
        if(trigger.oldMap.get(objBuild.id).Stage_Completed__c != trigger.newMap.get(objBuild.id).Stage_Completed__c)
        {
            setValidBuildId.add(objbuild.id);
        }
    }

    listFlat = [Select id, name, Primary_Contact__c,Building_Wing__c,Amount_Due_By_Stage__c,Building_Wing__r.Stage_Completed__c ,Primary_Email__c,Contact_Phone__c, Flat_Total_Cost__c, Amount_Received__c  from flat__c where Building_Wing__c In: setValidBuildId and Flat_Total_Cost__c >0];
    Decimal PaidPercentage = 0;
    String body;
    List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
    EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName= 'Installment_Due_Template'];    
    List<ID> SendTargetObject =  new List<ID>();
    for(flat__c objFlat: listFlat)
    {          
        PaidPercentage = (objFlat.Amount_Received__c / objFlat.Flat_Total_Cost__c)*100;
        Messaging.SingleEmailMessage mail =  new Messaging.SingleEmailMessage();

        if(PaidPercentage < objFlat.Building_Wing__r.Stage_Completed__c && objFlat.Primary_Contact__c != null && objFlat.Primary_Email__c != null && objFlat.Contact_Phone__c != null)
        {

            ListPaymentEmails.add(objFlat.Primary_Email__c);
            body = 'Dear Customer Please Pay Pending Amount::'+objFlat.Amount_Due_By_Stage__c;
            SMSUtil.sendSms(objFlat.Contact_Phone__c,body);
            mapEmailFlat.put(objFlat.Primary_Email__c, objFlat);
            mail.setToAddresses(ListPaymentEmails);
            mail.setTargetObjectId(objFlat.Primary_Contact__c);
            mail.setTemplateID(templateId.Id); 
            mail.setSaveAsActivity(true);
            system.debug('IF Mail-------------->'+mail);

        }
        else if(objFlat.Primary_Contact__c != null && objFlat.Primary_Email__c != null)
        {
            body = 'Dear Customer New Stage has been Completed.';
            SMSUtil.sendSms(objFlat.Contact_Phone__c,body);
            ListOkEmails.add(objFlat.Primary_Email__c);
            mail.setToAddresses(ListPaymentEmails); 
            mail.setTargetObjectId(objFlat.Primary_Contact__c);
            mail.setTemplateID(templateId.Id); 
            mail.setSaveAsActivity(true);
           system.debug('else Mail-------------->'+mail);
        }

        mails.add(mail);   
    }
    system.debug('ListPaymentEmails >>' +ListPaymentEmails + 'ListOkEmails >>' +ListOkEmails);
    // Email message to both group
    system.debug('Mails------------->'+mails);

      if(mails.size() > 0){
          Messaging.sendEmail(mails);
      }

}

One Answer

Your error message: REQUIRED_FIELD_MISSING, Missing target address (target, to, cc, bcc) refers to the Single Email Messaging Section of the Apex docs.

In this line: mail.setTargetObjectId(objFlat.Primary_Contact__c); you're trying to set the target object to an Id that's a field in objFlat which I presume contains a ContactId.

From the docs:

setTargetObjectId(targetObjectId) Required if using a template, optional otherwise. The ID of the contact, lead, or user to which the email will be sent. The ID you specify sets the context and ensures that merge fields in the template contain the correct data.

Since you're using a template, I'd check to see if all the necessary fields for the template are being set in your code for the merge fields. The error message is telling you that they're not.

Answered by crmprogdev on December 22, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP