app/email/engine.go

51 lines
981 B
Go
Raw Normal View History

2021-12-17 04:54:03 +00:00
package email
2021-12-17 03:46:04 +00:00
import (
"bytes"
_ "embed"
"html/template"
"github.com/vanng822/go-premailer/premailer"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
)
//go:embed base.gohtml
var mailTmpl string
var engine *template.Template
var app App
2021-12-17 04:54:03 +00:00
var mdParser = goldmark.New(
goldmark.WithExtensions(extension.GFM),
)
2021-12-17 03:46:04 +00:00
func init() {
engine = template.Must(template.New("email").Funcs(template.FuncMap{
2021-12-17 04:54:03 +00:00
"ToHTML": ToHTML,
2021-12-17 03:46:04 +00:00
}).Parse(mailTmpl))
}
2021-12-17 04:54:03 +00:00
func ToHTML(mdtext string) (template.HTML, error) {
var buf bytes.Buffer
if err := mdParser.Convert([]byte(mdtext), &buf); err != nil {
return "", err
}
return template.HTML(buf.String()), nil
}
func Parse(b *Body) (string, error) {
2021-12-17 03:46:04 +00:00
b.App = app
buf := &bytes.Buffer{}
err := engine.Execute(buf, b)
if err != nil {
return "", err
}
pre, err := premailer.NewPremailerFromString(buf.String(), premailer.NewOptions())
if err != nil {
return "", err
}
html, err := pre.Transform()
return html, err
}