diff --git a/pkg/smtpclient/smtpclient.go b/pkg/smtpclient/smtpclient.go index dadb63c..d966a86 100644 --- a/pkg/smtpclient/smtpclient.go +++ b/pkg/smtpclient/smtpclient.go @@ -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 +} diff --git a/pkg/smtpclient/smtpclient_test.go b/pkg/smtpclient/smtpclient_test.go new file mode 100644 index 0000000..43025c0 --- /dev/null +++ b/pkg/smtpclient/smtpclient_test.go @@ -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,

+to activate your Acount at Test Account Service please click this link. +

+Best regards,
` + assert.Equal(t, htmlContent, html) +} diff --git a/pkg/smtpclient/template/register.html b/pkg/smtpclient/template/register.html new file mode 100644 index 0000000..bfa726a --- /dev/null +++ b/pkg/smtpclient/template/register.html @@ -0,0 +1,5 @@ +Hello,

+to activate your Acount at {{ .Name }} please click this link. +

+Best regards,
+ diff --git a/pkg/smtpclient/template/register.subject b/pkg/smtpclient/template/register.subject new file mode 100644 index 0000000..50ad873 --- /dev/null +++ b/pkg/smtpclient/template/register.subject @@ -0,0 +1 @@ +Bestätige deine E-Mail Adresse diff --git a/pkg/smtpclient/template/register.txt b/pkg/smtpclient/template/register.txt new file mode 100644 index 0000000..a413200 --- /dev/null +++ b/pkg/smtpclient/template/register.txt @@ -0,0 +1,5 @@ +Hallo, + +um deinen Account auf {{ .Name }} zu aktivieren klicke auf folgenden Link {{ .Link }}. + +Viele Grüße,