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"
"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)

@ -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 {

@ -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"),
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/")

@ -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("<h1>Random number %v</h1>", 200),
TextTemplate: "signup",
HTMLTemplate: "signup",
}
sender := email.NewSender(ctx)

@ -12,9 +12,9 @@
<label for="Subject">Subject:</label>
<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!">
</block>

Loading…
Cancel
Save