Use Handlebars templates
Use Handlebars templates with the Trigger Email from Firestore extension
If you specified a "Templates collection" parameter during configuration of the extension, you can create and manage Handlebars templates templates for your emails.
Template collection structure
Give each document a memorable ID that you use as the template name in the documents you write to your templates collection.
The template document can include any of the following fields:
- subject: A template string for the subject of the email.
- text: A template string for the plaintext content of the email.
- html: A template string for the HTML content of the email.
- amp: A template string for the AMP4EMAIL content of the email.
- attachments: An array of attachments with template strings as values; Nodemailer options supported: utf-8 string, custom content type, URL, encoded string, data URI, and pre-generated MIME node (be aware that your email has no access to the cloud server's file system).
An example template might have an ID of following
and content like:
{
subject: "@{{username}} is now following you!",
html: "Just writing to let you know that <code>@{{username}}</code> ({{name}}) is now following you.",
attachments: [
{
filename: "{{username}}.jpg",
path: "{{imagePath}}"
}
]
}
Send emails using templates
To deliver email using templates, when adding documents to your mail collection, include a template
field with name
and data
properties. For example, using our following
template from above:
admin
.firestore()
.collection("MAIL_COLLECTION")
.add({
toUids: ["abc123"],
template: {
name: "following",
data: {
username: "ada",
name: "Ada Lovelace",
imagePath: "https://example.com/path/to/file/image-name.jpg",
},
},
});
Template Partials
You can compose templates using reusable partials by specifying {partial: true}
in the template document. Each of the standard data fields (subject
, html
, text
, and amp
) will be defined as a partial used only in its own environment. For example, a partial called footer
might have data like:
{
partial: true,
html: "<p>This mail was sent by ExampleApp, Inc. <a href='https://example.com/unsubscribe'>Unsubscribe</a></p>",
text: "This mail was sent by ExampleApp, Inc. Unsubscribe here: https://example.com/unsubscribe"
}
In another template, include the partial by referencing its name (document ID):
<p>This is my main template content, but it will use a common footer.</p>
{{> footer }}