Add email service for sending emails

This commit is contained in:
2024-09-01 11:56:51 -04:00
parent c4e5d3575e
commit 14b3863f8e
4 changed files with 63 additions and 0 deletions

56
models/email.go Normal file
View 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
}