package auth import ( "bytes" "embed" "html/template" "time" "codeberg.org/pronounscc/pronouns.cc/backend/log" "emperror.dev/errors" "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) 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 }