95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"crypto/tls"
|
|
|
|
hermes "github.com/matcornic/hermes/v2"
|
|
gomail "gopkg.in/mail.v2"
|
|
)
|
|
|
|
type EmailConfig struct {
|
|
Host string
|
|
Port int
|
|
From string
|
|
Username string
|
|
Password string
|
|
SiteURL string
|
|
InsecureSkipVerify bool
|
|
}
|
|
|
|
type EmailInvite struct {
|
|
ConfirmToken string
|
|
FullName string
|
|
To string
|
|
}
|
|
|
|
func SendEmailInvite(config EmailConfig, invite EmailInvite) error {
|
|
h := hermes.Hermes{
|
|
Product: hermes.Product{
|
|
Name: "Taskscafe",
|
|
Link: config.SiteURL,
|
|
Logo: "https://github.com/JordanKnott/taskcafe/raw/master/.github/taskcafe-full.png",
|
|
},
|
|
}
|
|
|
|
email := hermes.Email{
|
|
Body: hermes.Body{
|
|
Name: invite.FullName,
|
|
Intros: []string{
|
|
"You have been invited to join Taskcafe",
|
|
},
|
|
Actions: []hermes.Action{
|
|
{
|
|
Instructions: "To get started with Taskcafe, please click here:",
|
|
Button: hermes.Button{
|
|
Color: "#7367F0", // Optional action button color
|
|
TextColor: "#FFFFFF",
|
|
Text: "Register your account",
|
|
Link: config.SiteURL + "/register?confirmToken=" + invite.ConfirmToken,
|
|
},
|
|
},
|
|
},
|
|
Outros: []string{
|
|
"Need help, or have questions? Just reply to this email, we'd love to help.",
|
|
},
|
|
},
|
|
}
|
|
|
|
emailBody, err := h.GenerateHTML(email)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
emailBodyPlain, err := h.GeneratePlainText(email)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
m := gomail.NewMessage()
|
|
|
|
// Set E-Mail sender
|
|
m.SetHeader("From", config.From)
|
|
|
|
// Set E-Mail receivers
|
|
m.SetHeader("To", invite.To)
|
|
|
|
// Set E-Mail subject
|
|
m.SetHeader("Subject", "You have been invited to Taskcafe")
|
|
|
|
// Set E-Mail body. You can set plain text or html with text/html
|
|
m.SetBody("text/html", emailBody)
|
|
m.AddAlternative("text/plain", emailBodyPlain)
|
|
|
|
// Settings for SMTP server
|
|
d := gomail.NewDialer(config.Host, config.Port, config.Username, config.Password)
|
|
|
|
// This is only needed when SSL/TLS certificate is not valid on server.
|
|
// In production this should be set to false.
|
|
d.TLSConfig = &tls.Config{InsecureSkipVerify: config.InsecureSkipVerify}
|
|
|
|
// Now send E-Mail
|
|
if err := d.DialAndSend(m); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|