Skip to content

Instantly share code, notes, and snippets.

@SalesforceBobLightning
Last active July 3, 2018 22:31
Show Gist options
  • Save SalesforceBobLightning/0131109176e88ebceecd0ae55ab7bff1 to your computer and use it in GitHub Desktop.
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
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;
}
}
}
@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