I am creating a custom email client and have all the functionality needed using SingleEmailMessage.
However, I am unable to set a parentId on the SingleEmailMessage. I've tried looking on previous questions and saw people using mail.setSaveAsActivity(true);
but its not saving it under a case's related lists.
On EmailMessage there is a parentId field that can be set to the case. But I do not see any examples of anyone sending EmailMessages.
Are EmailMessages basically receipts from a SingleEmailMessage? How can I get the parentId to attach to a case?
public PageReference sendEmail(){
List<String> recipients = new List<String>();
List<String> ccs = new List<String>();
List<String> bcs = new List<String>();
recipients.add(email);
for(String additional : additionalTo.split(';')){
if(additional.trim().length() > 0){
recipients.add(additional.trim());
}
}
for(String carbonCopy : cc.split(';')){
if(carbonCopy.trim().length() > 0){
ccs.add(carbonCopy.trim());
}
}
for(String blindCopy : bc.split(';')){
if(blindCopy.trim().length() > 0){
bcs.add(blindCopy.trim());
}
}
Integer numOfEmails = recipients.size() + ccs.size() + bcs.size();
Messaging.reserveSingleEmailCapacity(numOfEmails);
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(recipients);
mail.setCcAddresses(ccs);
mail.setBccAddresses(bcs);
mail.setReplyTo(fromAddressesMap.get(fromAddress));
System.debug('To Address: ' + email);
mail.setSenderDisplayName('The Vitality Group Customer Support');
mail.setSubject(subject);
mail.setBccSender(false);
mail.setUseSignature(false);
mail.setPlainTextBody(body);
mail.setSaveAsActivity(true);
if(emailAttachment != null){
Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
efa.setFileName(fileName);
efa.setBody(emailAttachment);
mail.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
}
if(memberCase != null){
mail.setSubject(subject + ' ref: ' + memberCase.Id);
mail.setWhatId(memberCase.Id);
}
else{
mail.setTargetObjectId(con.Id);
}
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
System.debug(r);
return new PageReference('/' + con.Id);
}
Best Answer
EmailMessage is a type object that has to do recording emails that are sent/received on cases. You don't use this object to send emails on cases, but simply use this object to log the data. Use Messaging.SingleEmailMessage. Here's a minimal version that you need to send an email, and have it appear on the case: