60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package smtpclient
|
|
|
|
import (
|
|
"bytes"
|
|
"embed"
|
|
"fmt"
|
|
"html/template"
|
|
"strings"
|
|
)
|
|
|
|
type SMTPClient struct{}
|
|
|
|
//go:embed template/*
|
|
var templates embed.FS
|
|
|
|
func (s SMTPClient) SendMail(templateName string, to string, data any) error {
|
|
if to == "error@error.error" {
|
|
return ErrCantSendMailToErrorMail
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewDummySMTPClient() SMTPClient {
|
|
s := SMTPClient{}
|
|
return s
|
|
}
|
|
|
|
func (s SMTPClient) renderTemplates(templateName string, data any) (string, string, string, error) {
|
|
subject, err := s.renderFile(fmt.Sprintf("%v.subject", templateName), data)
|
|
if err != nil {
|
|
return "", "", "", err
|
|
}
|
|
txt, err := s.renderFile(fmt.Sprintf("%v.txt", templateName), data)
|
|
if err != nil {
|
|
return "", "", "", err
|
|
}
|
|
|
|
html, err := s.renderFile(fmt.Sprintf("%v.html", templateName), data)
|
|
if err != nil {
|
|
return "", "", "", err
|
|
}
|
|
|
|
return subject, txt, html, nil
|
|
}
|
|
|
|
func (s SMTPClient) renderFile(filename string, data any) (string, error) {
|
|
tmpl, err := template.ParseFS(templates, "template/"+filename)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
err = tmpl.Execute(&buf, data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
renderedString := buf.String()
|
|
return strings.Trim(renderedString, "\n"), nil
|
|
}
|