pronouns.cc/backend/routes/v2/auth/send_email.go

55 lines
1.2 KiB
Go
Raw Normal View History

2023-12-18 23:39:16 +01:00
package auth
import (
"bytes"
"embed"
"html/template"
"time"
2023-12-18 23:39:16 +01:00
"codeberg.org/pronounscc/pronouns.cc/backend/log"
"emperror.dev/errors"
2023-12-18 23:39:16 +01:00
"github.com/jordan-wright/email"
)
func (s *Server) SendEmail(to, title, template string, data map[string]any) {
e := email.NewEmail()
e.From = s.emailAddress
e.To = []string{to}
text, html, err := s.Template(template, data)
if err != nil {
log.Errorf("executing templates: %v", err)
return
}
e.Text = text
e.HTML = html
err = s.emailPool.Send(e, 10*time.Second)
2023-12-18 23:39:16 +01:00
if err != nil {
log.Errorf("sending email: %v", err)
}
}
//go:embed templates/*
var fs embed.FS
var tmpl = template.Must(template.ParseFS(fs, "templates/*"))
func (s *Server) Template(template string, data map[string]any) (text, html []byte, err error) {
data["BaseURL"] = s.baseURL
textWriter := new(bytes.Buffer)
htmlWriter := new(bytes.Buffer)
err = tmpl.ExecuteTemplate(textWriter, "templates/"+template+".txt", data)
if err != nil {
return nil, nil, errors.Wrap(err, "executing text template")
}
err = tmpl.ExecuteTemplate(htmlWriter, "templates/"+template+".html", data)
if err != nil {
return nil, nil, errors.Wrap(err, "executing HTML template")
}
return textWriter.Bytes(), htmlWriter.Bytes(), nil
}