Rendering HTML email version of articles with Hugo

I recently started using Mailcoach, mainly for sending emails to the subscriber list for Chinese Boost.

Mailcoach’s HTML email templating abilities are pretty basic, but that’s fine. I’m happy to use simple HTML emails, and found this HTML email template that looks like it will do the job nicely.

As the content on Chinese Boost is managed with Hugo, it would be nice to have Hugo also be responsible for generating HTML email content for each article that can then just be copy-pasted into Mailcoach for sending to subscribers. Hugo has an output formats feature that lets you do exactly that.

The first thing to do is to define an HTML email output format in your Hugo site’s config, e.g. in config.yaml:

outputFormats:
  HTMLemail:
    name: HTMLemail
    path: email
    mediaType: text/html
    isHTML: true
outputs:
  page:
    - HTML
    - HTMLemail
    - RSS

Then you need to add a new template for the HTML email output format. For example, if you have a posts/single.html layout file, then create a posts/single.htmlemail.html layout file next to it.

You can then paste the leemunroe/responsive-html-email-template content there and modify it to have your content in an HTML email format.

Note that you can put Mailcoach’s template parameters (such as ::unsubscribeUrl::) in the Hugo HTML email template, so that Mailcoach will then render them at sending time.

I would recommend adding a noindex meta tag to avoid duplicate content:

<meta name="robots" content="noindex">

Finally, if you want an easy way to preview the HTML email content, you can link to it from the main HTML post like this:

{{ with  .OutputFormats.Get "HTMLemail" -}}
<a href="{{ .RelPermalink }}" rel="nofollow">
  View as HTML email
</a>
{{- end }}

If you don’t want to display that to users, you can use an alternate link in the head instead:

{{ with  .OutputFormats.Get "HTMLemail" -}}
<link rel="alternate,nofollow" href="{{ .RelPermalink }}">
{{- end }}

Tech mentioned