Implement mailer and add welcome email for POP account
This commit is contained in:
parent
a6b926c9bf
commit
b582b10360
10 changed files with 170 additions and 3 deletions
66
helpers/authelia/mail.go
Normal file
66
helpers/authelia/mail.go
Normal 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)
|
||||
}
|
||||
|
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
49
helpers/mailer.go
Normal 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue