app/email/engine.go

51 lines
981 B
Go

package email
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
var mdParser = goldmark.New(
goldmark.WithExtensions(extension.GFM),
)
func init() {
engine = template.Must(template.New("email").Funcs(template.FuncMap{
"ToHTML": ToHTML,
}).Parse(mailTmpl))
}
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) {
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
}