chore: smtp template

This commit is contained in:
kekskurse 2025-03-13 23:41:48 +01:00
parent 4c6be5cf54
commit 12591859b8
5 changed files with 90 additions and 1 deletions

View file

@ -1,12 +1,61 @@
package smtpclient
import "errors"
import (
"bytes"
"embed"
"errors"
"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 errors.New("error mail send")
}
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
}

View file

@ -0,0 +1,29 @@
package smtpclient
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestRenderFile(t *testing.T) {
smtp := NewDummySMTPClient()
subject, err := smtp.renderFile("register.subject", nil)
assert.Nil(t, err)
assert.Equal(t, "Bestätige deine E-Mail Adresse", subject)
}
func TestRenderTemplate(t *testing.T) {
smtp := NewDummySMTPClient()
subject, txt, html, err := smtp.renderTemplates("register", map[string]string{"Name": "Test Account Service", "Link": "http://www.google.de"})
assert.Nil(t, err)
assert.Equal(t, "Bestätige deine E-Mail Adresse", subject)
assert.Equal(t, "Hallo,\n\num deinen Account auf Test Account Service zu aktivieren klicke auf folgenden Link http://www.google.de.\n\nViele Grüße,", txt)
htmlContent := `Hello, <br><br>
to activate your Acount at Test Account Service please click <a href="http://www.google.de">this link.</a>
<br><br>
Best regards,<br>`
assert.Equal(t, htmlContent, html)
}

View file

@ -0,0 +1,5 @@
Hello, <br><br>
to activate your Acount at {{ .Name }} please click <a href="{{ .Link }}">this link.</a>
<br><br>
Best regards,<br>

View file

@ -0,0 +1 @@
Bestätige deine E-Mail Adresse

View file

@ -0,0 +1,5 @@
Hallo,
um deinen Account auf {{ .Name }} zu aktivieren klicke auf folgenden Link {{ .Link }}.
Viele Grüße,