Created
January 20, 2022 11:53
-
-
Save rsindall/2f8240b8f2fced7b311cbae1187b5570 to your computer and use it in GitHub Desktop.
Send Email InvocableMethod using Salesforce Apex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
global class EmailAction { | |
@InvocableMethod(label='Send Email') | |
global static List<EmailActionResult> sendEmails(List<EmailActionRequest> requests) { | |
List<EmailActionResult> results = new List<EmailActionResult>(); | |
for(EmailActionRequest request : requests){ | |
results.add(sendEmail(request)); | |
} | |
return results; | |
} | |
public static EmailActionResult sendEmail(EmailActionRequest request) { | |
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); | |
if (String.isNotBlank(request.subject)){ | |
mail.setSubject(request.subject); | |
} | |
if (request.getBccAddresses().size() > 0){ | |
mail.setBccAddresses(request.getBccAddresses()); | |
} | |
if (request.getCcAddresses().size() > 0){ | |
mail.setBccAddresses(request.getCcAddresses()); | |
} | |
if (String.isNotBlank(request.emailTemplateId)){ | |
mail.setTemplateId(request.emailTemplateId); | |
} | |
if (String.isNotBlank(request.htmlBody)){ | |
mail.setHtmlBody(request.htmlBody); | |
} | |
if (String.isNotBlank(request.plainTextBody)){ | |
mail.setPlainTextBody(request.plainTextBody); | |
} | |
if (String.isNotBlank(request.orgWideEmailAddressId)){ | |
mail.setOrgWideEmailAddressId(request.orgWideEmailAddressId); | |
} | |
if (String.isNotBlank(request.displayName)){ | |
mail.setSenderDisplayName(request.displayName); | |
} | |
if (String.isNotBlank(request.targetObjectId)){ | |
// Only User, Contact, Lead, or Person objects are allowed for targetObjectId | |
mail.setTargetObjectId(request.targetObjectId); | |
} | |
if (String.isNotBlank(request.whatId)){ | |
mail.setWhatId(request.whatId); | |
} | |
mail.setSaveAsActivity(request.saveAsActivity); | |
mail.setOptOutPolicy('FILTER'); | |
Messaging.SingleEmailMessage[] messages = new List<Messaging.SingleEmailMessage>(); | |
messages.add(mail); | |
Messaging.SendEmailResult[] results = Messaging.sendEmail(messages); | |
EmailActionResult emailActionResult = new EmailActionResult(); | |
for(Messaging.SendEmailResult result :results) { | |
if(result.IsSuccess()) { | |
emailActionResult.isSuccess = true; | |
} else { | |
emailActionResult.isSuccess = false; | |
Messaging.SendEmailError[] errors = result.getErrors(); | |
if (errors.size() > 0 ){ | |
emailActionResult.errorMessage = errors[0].getMessage(); | |
System.debug('EmailAction error: ' + errors[0].getMessage()); | |
} | |
} | |
} | |
return emailActionResult; | |
} | |
global class EmailActionResult { | |
@InvocableVariable | |
global Boolean isSuccess; | |
@InvocableVariable | |
global String errorMessage; | |
} | |
global class EmailActionRequest { | |
private List<String> bccAddresses; | |
private List<String> ccAddresses; | |
@InvocableVariable(required=false) | |
global Id emailTemplateId; | |
@InvocableVariable(required=false) | |
global String subject; | |
@InvocableVariable(required=false) | |
global String htmlBody; | |
@InvocableVariable(required=false) | |
global String plainTextBody; | |
@InvocableVariable(required=false) | |
global String ccAddress; | |
@InvocableVariable(required=false) | |
global String bccAddress; | |
@InvocableVariable(required=false) | |
global Id orgWideEmailAddressId; | |
@InvocableVariable(required=false) | |
global String displayName; | |
@InvocableVariable(required=true) | |
global Id targetObjectId; | |
@InvocableVariable(required=true) | |
global Id whatId; | |
@InvocableVariable(required=false) | |
global Boolean saveAsActivity = true; | |
public EmailActionRequest() { | |
ccAddresses = new List<String>(); | |
bccAddresses = new List<String>(); | |
} | |
public List<String> getCcAddresses(){ | |
if (ccAddresses != null){ | |
ccAddresses.add(ccAddress); | |
} | |
return ccAddresses; | |
} | |
public List<String> getBccAddresses(){ | |
if (bccAddress != null){ | |
bccAddresses.add(bccAddress); | |
} | |
return bccAddresses; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment