How to use Mailgun variable in email template?

Viewed 5011

I am using Mailgun API with nodejs+express to send emails. I want to transition into using templates instead of writing the whole email as the HTML tag in nodejs.

The Mailgun documentation shows how to send variables to the template but not how to use them inside the template.

This is how I'm sending the Mailgun request

    const data = {
    from: "Shared Video <Share@website-template.com>",
    to: shareTo,
    subject: subject,
    template: "share_video",
    v: (subject = subject),
    v: (shareToName = shareToName),
    v: (userName = userName),
    v: (videoTitle = videoTitle),
    v: (videoID = videoID),
};
mailgun.messages().send(data, function (error, body) {
    console.log(body);
    req.flash("success", "Video Shared");
    res.redirect("/");
});

So how can I use those variables in the email template?

1 Answers

According to Mailgun Template Documentation you can pass template data using any of the 2 options provided below,

Option 1

const data = {
  from: "Shared Video <Share@website-template.com>",
  to: shareTo,
  subject: subject,
  template: "share_video",
  'h:X-Mailgun-Variables': JSON.stringify({
    subject: subject,
    shareToName: shareToName,
    userName: userName,
    videoTitle: videoTitle,
    videoID: videoID
  })
};

Option 2

const data = {
  from: "Shared Video <Share@website-template.com>",
  to: shareTo,
  subject: subject,
  template: "share_video",
  'v:subject': subject,
  'v:shareToName': shareToName,
  'v:userName': userName,
  'v:videoTitle': videoTitle,
  'v:videoID': videoID,
};

Finally, according to their documentation

The second way (Option 2 in our case) is not recomended as it’s limited to simple key value data. If you have arrays, dictionaries in values or complex json data you have to supply variables via X-Mailgun-Variables header.

Related