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 package features_email
import ( import (
email "MY/webapp/common/email"
"context"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
. "MY/webapp/common"
) )
func GetApiExample(c *fiber.Ctx) error { func PostApiEmailSend(c *fiber.Ctx) error {
tables := []string{"To", "From"} 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) { func SetupApi(app *fiber.App) {
app.Get("/api/email/send", GetApiExample) app.Post("/api/email/send", PostApiEmailSend)
} }

@ -2,23 +2,17 @@ package main
import ( import (
"context" "context"
"time"
"fmt" "fmt"
"os"
"os/signal"
"syscall"
email "MY/webapp/common/email" email "MY/webapp/common/email"
) )
func EmailReceiver(ctx context.Context) { func EmailReceiver(router *email.Router) {
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()
for { for {
err := router.HandleEmailRequest() err := router.HandleEmailRequest()
fmt.Println("EMAIL ROUTED!")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
@ -29,8 +23,21 @@ func EmailReceiver(ctx context.Context) {
func main() { func main() {
ctx := context.Background() 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