Last active
July 3, 2018 22:31
-
-
Save SalesforceBobLightning/0131109176e88ebceecd0ae55ab7bff1 to your computer and use it in GitHub Desktop.
Salesforce Apex Class EmailAction has an @InvocableMethod for sending emails from Process Builder
This file contains 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; | |
} | |
} | |
} |
This file contains 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
@isTest | |
public class EmailActionTests { | |
@isTest | |
static void sendEmails_Success(){ | |
// arrange | |
Contact target = new Contact(); | |
target.FirstName = 'Dee'; | |
target.LastName = 'Licious'; | |
target.email = 'dee@example.com'; | |
insert target; | |
Account what = new Account(); | |
what.Name = 'Ghostbusters'; | |
insert what; | |
EmailAction.EmailActionRequest request = new EmailAction.EmailActionRequest(); | |
request.bccAddress = 'bcc@example.com'; | |
request.ccAddress = 'cc@example.com'; | |
request.displayName = 'Acme Inc'; | |
request.saveAsActivity = true; | |
request.subject = 'Test Subject'; | |
request.targetObjectId = target.Id; | |
request.whatId = what.Id; | |
request.plainTextBody = 'Hello World'; | |
request.htmlBody = '<b>Hello World</b>'; | |
List<EmailAction.EmailActionRequest> requests = new List<EmailAction.EmailActionRequest>(); | |
requests.add(request); | |
// act | |
List<EmailAction.EmailActionResult> results = EmailAction.sendEmails(requests); | |
// assert | |
System.assertEquals(1, results.size()); | |
System.assertEquals(true, results[0].isSuccess); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment