Implement mailer and add welcome email for POP account

This commit is contained in:
William Bouzourène 2026-05-05 18:58:40 +02:00
parent a6b926c9bf
commit b582b10360
Signed by: bouzoure
GPG key ID: 423440D735B56BE2
10 changed files with 170 additions and 3 deletions

66
helpers/authelia/mail.go Normal file
View file

@ -0,0 +1,66 @@
package authelia
import (
ht "html/template"
tt "text/template"
"git.readonly.ch/bouzoure/pop-camarades/helpers"
"git.readonly.ch/bouzoure/pop-camarades/models"
)
type InputWelcomeMail struct {
Person models.Person
ResetURL string
}
func SendWelcomeMail(person models.Person) error {
config, err := helpers.GetConfig()
if err != nil {
return err
}
mailer, err := helpers.GetMailer()
if err != nil {
return err
}
msg, err := helpers.NewMessage()
if err != nil {
return err
}
mailsFS, err := helpers.GetEmbeddedFS("mails")
if err != nil {
return err
}
inputValues := InputWelcomeMail{
Person: person,
ResetURL: config.Authelia.ResetURL,
}
tplHTML, err := ht.ParseFS(mailsFS, "mails/welcome.html")
if err != nil {
return err
}
tplTXT, err := tt.ParseFS(mailsFS, "mails/welcome.txt")
if err != nil {
return err
}
msg.Subject("Ton compte POP Vaud")
msg.AddTo(person.Email)
err = msg.SetBodyHTMLTemplate(tplHTML, inputValues)
if err != nil {
return err
}
err = msg.AddAlternativeTextTemplate(tplTXT, inputValues)
if err != nil {
return err
}
return mailer.DialAndSend(msg)
}

View file

@ -101,7 +101,10 @@ func SyncUsers() error {
account.UpdateNeeded = false
if !account.AccountCreated.Valid {
// TODO: send email
err := SendWelcomeMail(account.Person)
if err != nil {
log.Error(err)
}
account.AccountCreated.Scan(time.Now())
}

View file

@ -22,6 +22,15 @@ type Config struct {
}
Authelia struct {
UsersLocation string `env:"AUTHELIA_USERS_LOCATION"`
ResetURL string `env:"AUTHELIA_RESET_URL"`
}
Mail struct {
Host string `env:"MAIL_HOST"`
Port int `env:"MAIL_PORT"`
Username string `env:"MAIL_USERNAME"`
Password string `env:"MAIL_PASSWORD"`
FromName string `env:"MAIL_FROM_NAME"`
FromAddress string `env:"MAIL_FROM_ADDRESS"`
}
}

49
helpers/mailer.go Normal file
View file

@ -0,0 +1,49 @@
package helpers
import (
"github.com/wneessen/go-mail"
)
var mailer *mail.Client
var mailerSet bool
func GetMailer() (*mail.Client, error) {
if mailerSet {
return mailer, nil
}
config, err := GetConfig()
if err != nil {
return mailer, err
}
mailer, err = mail.NewClient(
config.Mail.Host,
mail.WithPort(config.Mail.Port),
mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover),
mail.WithUsername(config.Mail.Username),
mail.WithPassword(config.Mail.Password),
)
if err != nil {
return mailer, err
}
mailerSet = true
return mailer, nil
}
func NewMessage() (*mail.Msg, error) {
msg := mail.NewMsg()
config, err := GetConfig()
if err != nil {
return msg, err
}
msg.FromFormat(
config.Mail.FromName,
config.Mail.FromAddress,
)
return msg, nil
}