+ Start a Discussion
Anto HotelbedsAnto Hotelbeds 

query attachments on outbound email

Hi all,

In my org, when a customer service agent is working on a case and hits the send email button to use the standard send email functionality, I hav a requirement that is:
- Capture the body of the email and create with it a Case Comment related to the parent case of the email. Also, get all the attachments related to the email and relate them to the case. Finally, delete the email message.

I am able to do everything except for the attachments part. I have created a trigger on emailMessage that creates the case comment without trouble, but another part of my trigger is created to get the attachments, but it always returns 0 elements in the list. This is the trigger on email message related to the attachment part(just getting the attachment of the first email to check if it works):
trigger EmailMessageAfterOperationTrigger on EmailMessage (after delete, after insert, after undelete, after update) {

if (trigger.isInsert){
    	Attachment[] attList = [select id, name, body from Attachment where ParentId = :Trigger.new[0].Id];
    	Attachment[] insertAttList = new Attachment[]{};

        system.debug('Has the email attachments?:' + Trigger.new[0].HasAttachment);
    	system.debug('list of attachments realted to the email message: ' + attList);

    	for(Attachment a: attList){
               Attachment att = new Attachment(name = a.name, body = a.body, parentid = Trigger.new[0].id);
       if(insertAttList.size() > 0){
            insert insertAttList;
This is the debug log the system shows:
09:45:00.579 (1579755455)|USER_DEBUG|[146]|DEBUG|Has the email attachments?:true
09:45:00.579 (1579760206)|SYSTEM_METHOD_EXIT|[146]|System.debug(ANY)
09:45:00.579 (1579778024)|SYSTEM_METHOD_ENTRY|[147]|String.valueOf(Object)
09:45:00.579 (1579802168)|SYSTEM_METHOD_EXIT|[147]|String.valueOf(Object)
09:45:00.579 (1579814171)|SYSTEM_METHOD_ENTRY|[147]|System.debug(ANY)
09:45:00.579 (1579819259)|USER_DEBUG|[147]|DEBUG|list of attachments realted to the email message: ()

I have also created a trigger on attachment before insert but it doesnt get fired when sending an email with attachment:
trigger AttachmentBeforeOperationTrigger on Attachment (before delete, before insert, before update) {

	if (Trigger.isInsert || Trigger.isUpdate){
		for (Attachment a: Trigger.new){
			system.debug('el attachment: ' + a);


I need to get this attachments related to the email message, can please anyone help me?



NagaNaga (Salesforce Developers) 
Hi Antonio,

Please see the code below

List<Messaging.EmailFileAttachment> attach1 = new List<Messaging.EmailFileAttachment>();

List<Document> doc = [Select id, DeveloperName, ContentType, type, Body from Document where Name = 'Document Name]; 

 for(Document dc: doc)         


Messaging.EmailFileAttachment attach = new Messaging.EmailFileAttachment(); 




attach.Body = dc.Body;               


In the SignleEmailMessage object set this:

If you want some more information on adding attachments to outbound emails 

Please follow the below link


Best Regards
Naga Kiran
Anto HotelbedsAnto Hotelbeds

Thanks for your help but I am not trying to send the email via Apex. I want to use the standard Salesforce functionality  (EmailAuthor) and get the attachments.