I am trying to set up an invocable apex class to send an email to a contact with merge fields from other record ID types with an optional variable to set the sender. I have looked at this question for guidance, however, am having trouble using variable sender.
Can someone have a look over what I have done and offer some suggestions?
global class Invocable_SendEmail {
global class DataWrapper {
@InvocableVariable(label='Record ID' required=true)
public String recordID;
@InvocableVariable(label='Email Template ID' required=true)
public String emailTemplateID;
@InvocableVariable(label='Contact ID' required = true)
public String contactID;
@InvocableVariable(label='Sender Email' required=false)
public String sender;
}
@invocableMethod(label='Send Email to Applicant')
global static void sendMailToLead (List<DataWrapper> passedData) {
// Send the email:
for (DataWrapper dw: passedData) {
// Get the email template
EmailTemplate selectedTemplate = [SELECT Id FROM EmailTemplate WHERE Id =: dw.emailTemplateId];
// Get sender details
// fetch Org Wide Email Address if sender is filled
if (dw.sender != null) {
OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address = sender];
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
if ( owea.size() > 0 ) {
mailToSend.setOrgWideEmailAddressId(owea.get(0).Id);
}
}
// Create SingleEmailMessage object and set the target and template.
Messaging.SingleEmailMessage mailToSend = new Messaging.SingleEmailMessage();
mailToSend.setTargetObjectId(dw.contactID);
mailToSend.setWhatId(dw.recordID);
mailToSend.setTemplateID(selectedTemplate.Id);
// Send the email and debug results
List<Messaging.SendEmailResult> sendResults = Messaging.sendEmail(new List<Messaging.Email> { mailToSend });
System.debug(sendResults[0]);
}
}
}
Best Answer
Fixed the issues,
global class Invocable_SendEmail {
}
Fix includes updating line: OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address = sender]; to: OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address =: dw.sender];
And putting // Get sender details section after creation of SingleEmailMessage object