Add email service for sending emails
This commit is contained in:
56
models/email.go
Normal file
56
models/email.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/go-mail/mail/v2"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultSender = os.Getenv("LENSLOCKED_EMAIL_FROM")
|
||||
)
|
||||
|
||||
type Email struct {
|
||||
To string
|
||||
Subject string
|
||||
Text string
|
||||
Html string
|
||||
}
|
||||
|
||||
type EmailService struct {
|
||||
DefaultSender string
|
||||
|
||||
dialer *mail.Dialer
|
||||
}
|
||||
|
||||
func NewEmailService(host string, port int, username, pass, sender string) *EmailService {
|
||||
es := EmailService{
|
||||
dialer: mail.NewDialer(host, port, username, pass),
|
||||
DefaultSender: sender,
|
||||
}
|
||||
return &es
|
||||
}
|
||||
|
||||
func (es *EmailService) Send(email Email) error {
|
||||
msg := mail.NewMessage()
|
||||
|
||||
msg.SetHeader("To", email.To)
|
||||
msg.SetHeader("From", es.DefaultSender)
|
||||
msg.SetHeader("Subject", email.Subject)
|
||||
|
||||
if email.Html != "" && email.Text != "" {
|
||||
msg.SetBody("text/plain", email.Text)
|
||||
msg.AddAlternative("text/html", email.Html)
|
||||
} else if email.Text != "" {
|
||||
msg.SetBody("text/plain", email.Text)
|
||||
} else if email.Html != "" {
|
||||
msg.SetBody("text/html", email.Html)
|
||||
}
|
||||
|
||||
err := es.dialer.DialAndSend(msg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("send: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user