package main import ( "github.com/wneessen/go-mail" "fmt" "context" "github.com/redis/go-redis/v9" "time" "encoding/json" "MY/webapp/data" ) func SendEmail(msg data.EmailMessage) { email_msg := mail.NewMsg() err := email_msg.From(msg.From) if err != nil { panic(err) } err = email_msg.To(msg.To) if err != nil { panic(err) } email_msg.Subject(msg.Subject) email_msg.SetBodyString(mail.TypeTextPlain, msg.Text) email_msg.SetBodyString(mail.TypeTextHTML, msg.HTML) client, err := mail.NewClient("localhost", mail.WithPort(1025), mail.WithTLSPolicy(mail.NoTLS)) if err != nil { panic(err) } err = client.DialAndSend(email_msg) if err != nil { panic(err) } } func LoadMessage(result string) data.EmailMessage { var msg data.EmailMessage err := json.Unmarshal([]byte(result), &msg) if err != nil { panic(err) } return msg } func EmailListener(ctx context.Context) { client := redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "", DB: 0, }) for { result, err := client.BRPop(ctx, 0, "queue").Result() if err != nil { panic(err) } fmt.Printf("received: %v\n", result) // NOTE: 0=queue name, 1=message msg := LoadMessage(result[1]) SendEmail(msg) fmt.Println("SENT EMAIL") } } func main() { ctx := context.Background() go EmailListener(ctx) time.Sleep(time.Second * 100) }