Installing a mailer package and setting up a mail channel
This commit is contained in:
@ -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
43
cmd/web/send-mail.go
Normal 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")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user