Simple email sending example.

master
Zed A. Shaw 4 weeks ago
parent 5c07583ba4
commit f9b94f8101
  1. 27
      features/email/api.go
  2. 33
      tools/cmd/mailer/main.go
  3. 22
      views/email/index.html

@ -1,15 +1,34 @@
package features_email
import (
email "MY/webapp/common/email"
"context"
"github.com/gofiber/fiber/v2"
. "MY/webapp/common"
)
func GetApiExample(c *fiber.Ctx) error {
tables := []string{"To", "From"}
func PostApiEmailSend(c *fiber.Ctx) error {
ctx := context.Background()
return c.JSON(tables)
msg := email.EmailMessage{
To: c.FormValue("To"),
From: c.FormValue("From"),
Subject: c.FormValue("Subject"),
Text: c.FormValue("Message"),
HTML: c.FormValue("Message"),
}
sender := email.NewSender(ctx, email.Config{
RedisHostPort: "127.0.0.1:6379",
})
defer sender.Close()
err := sender.QueueEmail(msg)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/email/")
}
func SetupApi(app *fiber.App) {
app.Get("/api/email/send", GetApiExample)
app.Post("/api/email/send", PostApiEmailSend)
}

@ -2,23 +2,17 @@ package main
import (
"context"
"time"
"fmt"
"os"
"os/signal"
"syscall"
email "MY/webapp/common/email"
)
func EmailReceiver(ctx context.Context) {
router, err := email.NewRouter(ctx, email.Config{
RedisHostPort: "127.0.0.1:6379",
SMTPHost: "localhost",
SMTPPort: 1025,
})
if err != nil { panic(err) }
defer router.Close()
func EmailReceiver(router *email.Router) {
for {
err := router.HandleEmailRequest()
fmt.Println("EMAIL ROUTED!")
if err != nil {
fmt.Println(err)
@ -29,8 +23,21 @@ func EmailReceiver(ctx context.Context) {
func main() {
ctx := context.Background()
go EmailReceiver(ctx)
router, err := email.NewRouter(ctx, email.Config{
RedisHostPort: "127.0.0.1:6379",
SMTPHost: "localhost",
SMTPPort: 1025,
})
if err != nil { panic(err) }
defer router.Close()
go EmailReceiver(&router)
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
time.Sleep(time.Second * 100)
_ = <-c
fmt.Println("Shutdown now...")
}

@ -1,3 +1,21 @@
<h1>email</h1>
<h1>Send An Email</h1>
<p>Replace me.</p>
<form action="/api/email/send" method="POST">
<block>
<label for="To">To:</label>
<input id="To" name="To">
<label for="From">From:</label>
<input id="From" name="From">
<label for="Subject">Subject:</label>
<input id="Subject" name="Subject">
<label for="Message">Message</label>
<textarea id="Message" name="Message" cols="80" rows="10"></textarea>
<input type="submit" value="Send!">
</block>
</form>

Loading…
Cancel
Save