From 9302a97f4d6c01c77f2498a6828e8344e30955b7 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Fri, 9 Jan 2026 13:01:25 -0500 Subject: [PATCH] Basic sending emails with templates but using fiber's templates doesn't work since it doesn't really support plain text. --- common/email/api.go | 14 ++++++++++++-- common/email/data.go | 5 +++-- emails/signup.html | 3 +++ features/email/api.go | 4 ++-- tools/cmd/qmgr/main.go | 5 ++--- views/email/index.html | 4 ++-- 6 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 emails/signup.html diff --git a/common/email/api.go b/common/email/api.go index bf20430..f9c97e2 100644 --- a/common/email/api.go +++ b/common/email/api.go @@ -6,9 +6,17 @@ import ( "context" "log" "github.com/redis/go-redis/v9" + "github.com/gofiber/template/html/v2" "MY/webapp/config" + "strings" ) +var HTMLTemplates *html.Engine + +func init() { + HTMLTemplates = html.New("./emails", ".html") +} + func NewSender(ctx context.Context) (Sender){ client := redis.NewClient(&redis.Options{ Addr: config.Settings.Redis.HostPort, @@ -56,8 +64,10 @@ func (router *Router) DeliverEmail(msg EmailMessage) error { if err != nil { return err } email_msg.Subject(msg.Subject) - email_msg.SetBodyString(mail.TypeTextPlain, msg.Text) - email_msg.SetBodyString(mail.TypeTextHTML, msg.HTML) + + out := new(strings.Builder) + err = HTMLTemplates.Render(out, msg.HTMLTemplate, msg.Data) + email_msg.SetBodyString(mail.TypeTextHTML, out.String()) if config.Settings.Email.XMailer != "" { email_msg.SetGenHeader(mail.HeaderXMailer, config.Settings.Email.XMailer) diff --git a/common/email/data.go b/common/email/data.go index c8ef520..ceabbb2 100644 --- a/common/email/data.go +++ b/common/email/data.go @@ -10,8 +10,9 @@ type EmailMessage struct { To string From string Subject string - Text string - HTML string + Data any + TextTemplate string + HTMLTemplate string } type Sender struct { diff --git a/emails/signup.html b/emails/signup.html new file mode 100644 index 0000000..d3aadde --- /dev/null +++ b/emails/signup.html @@ -0,0 +1,3 @@ +

Welcome!

+ +

You signed up!

diff --git a/features/email/api.go b/features/email/api.go index b1c783d..b3bc87e 100644 --- a/features/email/api.go +++ b/features/email/api.go @@ -11,8 +11,8 @@ func PostApiEmailSend(c *fiber.Ctx) error { To: c.FormValue("To"), From: c.FormValue("From"), Subject: c.FormValue("Subject"), - Text: c.FormValue("Message"), - HTML: c.FormValue("Message"), + TextTemplate: c.FormValue("Template"), + HTMLTemplate: c.FormValue("Template"), }) return c.Redirect("/email/") diff --git a/tools/cmd/qmgr/main.go b/tools/cmd/qmgr/main.go index 264ab63..de39b81 100644 --- a/tools/cmd/qmgr/main.go +++ b/tools/cmd/qmgr/main.go @@ -3,7 +3,6 @@ package main import ( "MY/webapp/config" email "MY/webapp/common/email" - "fmt" "context" ) @@ -16,8 +15,8 @@ func main() { To: "tina.recip@example.com", From: "toni.sender@example.com", Subject: "This is my first mail.", - Text: fmt.Sprintf("Random number %v", 200), - HTML: fmt.Sprintf("

Random number %v

", 200), + TextTemplate: "signup", + HTMLTemplate: "signup", } sender := email.NewSender(ctx) diff --git a/views/email/index.html b/views/email/index.html index a9f9705..8712fd2 100644 --- a/views/email/index.html +++ b/views/email/index.html @@ -12,9 +12,9 @@ - + - +