4

I tried to use the force:source:retrieve command with the -m parameter as EmailTemplate but it doesn't retrieve the email templates in my connected sandbox.

How can I retrieve the email templates?

3 Answers 3

3

The EmailTemplate metadata type does not support wildcard retrieval[0] - in package.xml or using the CLI. You need to specify each individual EmailTemplate you want to retrieve. E.g. sfdx force:source:retrieve -m EmailTemplate won't work, but sfdx force:source:retrieve -m EmailTemplate:folder/MyEmailTemplate should .

[0] https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_emailtemplate.htm#!

7

I ran into this situation few days ago, so I created a bash script, which will first query all email folders and then creates package.xml and retrieves all EmailTemplates using that package.xml.

This is assuming you are on a unix box and jq is installed.

1) Prepare a file named DownloadAllEmailTemplates.sh with below content:

rm -f temp.txt
rm -f package_temp.xml
echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n" >> package_temp.xml
echo "<Package xmlns=\"http://soap.sforce.com/2006/04/metadata\">" >> package_temp.xml

sfdx force:mdapi:listmetadata --metadatatype=EmailFolder --targetusername=$1 --json | jq '.result[].fullName' > temp.txt
input="temp.txt"
echo "  <types>" >> package_temp.xml
while IFS= read -r line
do
    folderName="${line//\"/}" 
    echo "$folderName"
    rm -f temp_1.txt
    sfdx force:mdapi:listmetadata --metadatatype=EmailTemplate --folder=$folderName --targetusername=$1 --json | jq '.result[].fullName' >> temp_1.txt
    while IFS= read -r line1
    do
        templateName="${line1//\"/}"
        echo "    <members>$templateName</members>" >> package_temp.xml
    done < "temp_1.txt"
    rm -f temp_1.txt
done < "$input"
echo "    <name>EmailTemplate</name>" >> package_temp.xml
echo "  </types>" >> package_temp.xml
rm -f temp.txt

sfdx force:source:retrieve --targetusername=$1 --manifest=package_temp.xml 

If you have a org alias as production, you can run the below command to retrieve all email templates from that org.

sh DownloadAllEmailTemplates.sh production

2
  • 1
    This script is very useful.
    – Mossi
    Commented Apr 21, 2021 at 6:28
  • This was brilliant! How/where can I buy you a coffee?? Commented May 16, 2023 at 23:10
1

Sample command which works in VS Code:

sfdx force:source:retrieve -m EmailTemplate:Folder_DeveloperName/Email_Template_DeveloperName

Use this query to obtain the folder and template names to be retrieved:

SELECT Folder.DeveloperName, DeveloperName
FROM EmailTemplate

Note that templates in the Unfiled Public folder will get returned with blank folder names; for these, use 'unfiled\$public' as the folder name when retrieving.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .