chore: smtp template
This commit is contained in:
parent
4c6be5cf54
commit
12591859b8
5 changed files with 90 additions and 1 deletions
|
|
@ -1,12 +1,61 @@
|
||||||
package smtpclient
|
package smtpclient
|
||||||
|
|
||||||
import "errors"
|
import (
|
||||||
|
"bytes"
|
||||||
|
"embed"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"html/template"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
type SMTPClient struct{}
|
type SMTPClient struct{}
|
||||||
|
|
||||||
|
//go:embed template/*
|
||||||
|
var templates embed.FS
|
||||||
|
|
||||||
func (s SMTPClient) SendMail(templateName string, to string, data any) error {
|
func (s SMTPClient) SendMail(templateName string, to string, data any) error {
|
||||||
if to == "error@error.error" {
|
if to == "error@error.error" {
|
||||||
return errors.New("error mail send")
|
return errors.New("error mail send")
|
||||||
}
|
}
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
|
|
||||||
29
pkg/smtpclient/smtpclient_test.go
Normal file
29
pkg/smtpclient/smtpclient_test.go
Normal 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)
|
||||||
|
}
|
||||||
5
pkg/smtpclient/template/register.html
Normal file
5
pkg/smtpclient/template/register.html
Normal 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>
|
||||||
|
|
||||||
1
pkg/smtpclient/template/register.subject
Normal file
1
pkg/smtpclient/template/register.subject
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Bestätige deine E-Mail Adresse
|
||||||
5
pkg/smtpclient/template/register.txt
Normal file
5
pkg/smtpclient/template/register.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
Hallo,
|
||||||
|
|
||||||
|
um deinen Account auf {{ .Name }} zu aktivieren klicke auf folgenden Link {{ .Link }}.
|
||||||
|
|
||||||
|
Viele Grüße,
|
||||||
Reference in a new issue