48 lines
947 B
Go
48 lines
947 B
Go
|
package messenger
|
||
|
|
||
|
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
|
||
|
|
||
|
func init() {
|
||
|
md := goldmark.New(
|
||
|
goldmark.WithExtensions(extension.GFM),
|
||
|
)
|
||
|
engine = template.Must(template.New("email").Funcs(template.FuncMap{
|
||
|
"ToHTML": func(mdtext string) (string, error) {
|
||
|
var buf bytes.Buffer
|
||
|
if err := md.Convert([]byte(mdtext), &buf); err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return buf.String(), nil
|
||
|
},
|
||
|
}).Parse(mailTmpl))
|
||
|
}
|
||
|
|
||
|
func Parse(b *Base) (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
|
||
|
}
|