Basic sending emails with templates but using fiber's templates doesn't work since it doesn't really support plain text.

master
Zed A. Shaw 10 months ago
parent 2600b60b8b
commit 9302a97f4d
  1. 14
      common/email/api.go
  2. 5
      common/email/data.go
  3. 3
      emails/signup.html
  4. 4
      features/email/api.go
  5. 5
      tools/cmd/qmgr/main.go
  6. 4
      views/email/index.html

@ -6,9 +6,17 @@ import (
"context" "context"
"log" "log"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"github.com/gofiber/template/html/v2"
"MY/webapp/config" "MY/webapp/config"
"strings"
) )
var HTMLTemplates *html.Engine
func init() {
HTMLTemplates = html.New("./emails", ".html")
}
func NewSender(ctx context.Context) (Sender){ func NewSender(ctx context.Context) (Sender){
client := redis.NewClient(&redis.Options{ client := redis.NewClient(&redis.Options{
Addr: config.Settings.Redis.HostPort, Addr: config.Settings.Redis.HostPort,
@ -56,8 +64,10 @@ func (router *Router) DeliverEmail(msg EmailMessage) error {
if err != nil { return err } if err != nil { return err }
email_msg.Subject(msg.Subject) 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 != "" { if config.Settings.Email.XMailer != "" {
email_msg.SetGenHeader(mail.HeaderXMailer, config.Settings.Email.XMailer) email_msg.SetGenHeader(mail.HeaderXMailer, config.Settings.Email.XMailer)

@ -10,8 +10,9 @@ type EmailMessage struct {
To string To string
From string From string
Subject string Subject string
Text string Data any
HTML string TextTemplate string
HTMLTemplate string
} }
type Sender struct { type Sender struct {

@ -0,0 +1,3 @@
<h1>Welcome!</h1>
<p>You signed up!</p>

@ -11,8 +11,8 @@ func PostApiEmailSend(c *fiber.Ctx) error {
To: c.FormValue("To"), To: c.FormValue("To"),
From: c.FormValue("From"), From: c.FormValue("From"),
Subject: c.FormValue("Subject"), Subject: c.FormValue("Subject"),
Text: c.FormValue("Message"), TextTemplate: c.FormValue("Template"),
HTML: c.FormValue("Message"), HTMLTemplate: c.FormValue("Template"),
}) })
return c.Redirect("/email/") return c.Redirect("/email/")

@ -3,7 +3,6 @@ package main
import ( import (
"MY/webapp/config" "MY/webapp/config"
email "MY/webapp/common/email" email "MY/webapp/common/email"
"fmt"
"context" "context"
) )
@ -16,8 +15,8 @@ func main() {
To: "tina.recip@example.com", To: "tina.recip@example.com",
From: "toni.sender@example.com", From: "toni.sender@example.com",
Subject: "This is my first mail.", Subject: "This is my first mail.",
Text: fmt.Sprintf("Random number %v", 200), TextTemplate: "signup",
HTML: fmt.Sprintf("<h1>Random number %v</h1>", 200), HTMLTemplate: "signup",
} }
sender := email.NewSender(ctx) sender := email.NewSender(ctx)

@ -12,9 +12,9 @@
<label for="Subject">Subject:</label> <label for="Subject">Subject:</label>
<input id="Subject" name="Subject"> <input id="Subject" name="Subject">
<label for="Message">Message</label> <label for="Template">Template</label>
<textarea id="Message" name="Message" cols="80" rows="10"></textarea> <input id="Template" name="Template"></textarea>
<input type="submit" value="Send!"> <input type="submit" value="Send!">
</block> </block>

Loading…
Cancel
Save