Is this good design for custom email template?
Don't use plain words as replacement keys since you might accidentally erase a real "name".  For example, in your template, use "Hello {{name}}," and you add "{{" and "}}" to the word you want to replace before calling replace.  It's easier to do that than to read each template carefully to make sure the keywords do not appear anywhere where they should not be changed.
Hide EmailTemplate inside EmailGenerator and make it private.  EmailTemplate is a "dirty" class that should not be exposed publicly: the method create(Map&lt;String, String&gt; valuesMap) must not be accessible since you need exactly the right arguments in the map.
You don't even really need EmailTemplate.  If you don't want to reread the files all the time, you can use a "lazy" map, Map&lt;String, String&gt; textFilesCache (file name -> file text).  When you fetch a file, you define a method that checks if textFilesCache(filename) is null and, if it is, it loads the file and adds it to textFilesCache.  It's even more efficient than the enum since the template files you never use will never be read.  An enum seems overkill here and it make the code less readable.
(If you want to have some fun, you can even take a look at WeakHashMap.  It's overkill here since you will only have a few files, but if you had very many and very large files, the JVM can drop some values of a WeakHashMap to free memory.)