Skip to content

Instantly share code, notes, and snippets.

@rsindall
Created January 20, 2022 11:53
Show Gist options
  • Save rsindall/2f8240b8f2fced7b311cbae1187b5570 to your computer and use it in GitHub Desktop.
Save rsindall/2f8240b8f2fced7b311cbae1187b5570 to your computer and use it in GitHub Desktop.
Send Email InvocableMethod using Salesforce Apex
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