Installing a mailer package and setting up a mail channel

This commit is contained in:
2024-07-16 13:55:35 +02:00
parent bf61fb7c18
commit 6873ad1c56
6 changed files with 73 additions and 1 deletions

View File

@ -33,7 +33,10 @@ func main() {
log.Fatal(err)
}
defer db.SQL.Close()
defer close(app.MailChan)
fmt.Println("Starting mail listener...")
listenForMail()
fmt.Printf("Starting application on port %s\n", portNumber)
srv := &http.Server{
@ -52,6 +55,17 @@ func run() (*driver.DB, error) {
gob.Register(models.Room{})
gob.Register(models.Restriction{})
mailChan := make(chan models.MailData)
app.MailChan = mailChan
msg := models.MailData{
To: "John@do.do",
From: "me@here.com",
Subject: "mail",
Content: "Hello, <strong>world</strong>",
}
app.MailChan <- msg
// change this to true when in production
app.InProduction = false

43
cmd/web/send-mail.go Normal file
View File

@ -0,0 +1,43 @@
package main
import (
"go-udemy-web-1/internal/models"
"log"
"time"
mail "github.com/xhit/go-simple-mail"
)
func listenForMail() {
go func() {
for {
msg := <-app.MailChan
sendMsg(msg)
}
}()
}
func sendMsg(m models.MailData) {
server := mail.NewSMTPClient()
server.Host = "localhost"
server.Port = 1025 // fake port
server.KeepAlive = false
server.ConnectTimeout = 10 * time.Second
server.SendTimeout = 10 * time.Second
client, err := server.Connect()
if err != nil {
errorLog.Println(err)
}
email := mail.NewMSG()
email.SetFrom(m.From).AddTo(m.To).SetSubject(m.Subject)
email.SetBody(mail.TextHTML, m.Content)
err = email.Send(client)
if err != nil {
log.Println(err)
} else {
log.Println("Email sent")
}
}