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

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#!

6

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

1
  • 1
    This script is very useful.
    – Mossi
    Apr 21 at 6:28
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.