Installing a mailer package and setting up a mail channel
This commit is contained in:
		@ -33,7 +33,9 @@ func main() {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer db.SQL.Close()
 | 
			
		||||
	defer close(app.MailChan)
 | 
			
		||||
 | 
			
		||||
	fmt.Println("Starting mail listener...")
 | 
			
		||||
	fmt.Printf("Starting application on port %s\n", portNumber)
 | 
			
		||||
 | 
			
		||||
	srv := &http.Server{
 | 
			
		||||
@ -52,6 +54,19 @@ func run() (*driver.DB, error) {
 | 
			
		||||
	gob.Register(models.Room{})
 | 
			
		||||
	gob.Register(models.Restriction{})
 | 
			
		||||
 | 
			
		||||
	mailChan := make(chan models.MailData)
 | 
			
		||||
	app.MailChan = mailChan
 | 
			
		||||
 | 
			
		||||
	listenForMail()
 | 
			
		||||
 | 
			
		||||
	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