package mailer import ( "bytes" "fmt" "html/template" "log" "net/url" "strings" "github.com/wneessen/go-mail" "git.linuxforward.com/byom/byom-onboard/internal/platform/config" ) const welcomeEmailTemplate = ` Bienvenue sur BYOM

BYOM

Configuration terminée

Votre application est prête à être utilisée.

Informations d'accès

Utilisateur
{{.Username}}
Mot de passe
{{.Password}}

URLs d'accès

{{range .Subdomains}}

{{.}}

{{end}}

Application principale:

{{.WebAppURL}}

{{if .SetupGuide}}

Guide de démarrage

{{.SetupGuide}}

{{end}}
` const verifyEmailTemplate = ` Vérification Email - BYOM

BYOM

Vérification de votre email

Pour finaliser votre inscription, veuillez vérifier votre adresse email.

Vérifier mon email
` const workspaceWelcomeTemplate = ` Bienvenue sur BYOM

BYOM

Votre espace est prêt

Votre paiement a été confirmé et votre espace BYOM est maintenant disponible.

Accéder à mon espace

Interface

Design minimaliste et efficace

Collaboration

Outils de travail en équipe

Support

Assistance technique dédiée

Sécurité

Protection des données

` type Mailer struct { client *mail.Client from string } type EmailData struct { Username string Password string Subdomains []string WebAppURL string SetupGuide string } type VerifyEmailData struct { VerificationURL string } func NewMailer(config *config.MailerConfig) *Mailer { log.Printf("Test mail successfully delivered.") fmt.Println(config) client, err := mail.NewClient(config.Host, mail.WithSMTPAuth(mail.SMTPAuthPlain), mail.WithTLSPortPolicy(mail.DefaultTLSPolicy), mail.WithUsername(config.Username), mail.WithPassword(config.Password), ) if err != nil { log.Fatalf("Failed to create mail client: %v", err) } return &Mailer{ client: client, from: config.From, } } func (m *Mailer) SendEmail(to string, data *EmailData) error { tmpl := template.Must(template.New("welcomeEmail").Parse(welcomeEmailTemplate)) var tpl bytes.Buffer err := tmpl.Execute(&tpl, data) if err != nil { return err } body := tpl.String() message := mail.NewMsg() message.From(m.from) message.To(to) message.Subject("Bienvenue sur BYOM!") message.SetBodyString(mail.TypeTextHTML, body) message.ReplyTo(m.from) return m.client.DialAndSend(message) } func (m *Mailer) SendVerifyEmail(to, token, plan string) error { if strings.HasSuffix(to, "@example.com") { return fmt.Errorf("cannot send email to example.com domain: %s", to) } message := mail.NewMsg() message.From(m.from) message.To(to) message.Subject("Vérification de votre adresse email") verificationURL := fmt.Sprintf("https://byom.moooffle.com/verify-email?token=%s&plan=%s&email=%s", token, plan, url.QueryEscape(to), ) htmlBody := fmt.Sprintf(` Vérification de votre email

Bienvenue !

Merci de vous être inscrit. Pour finaliser votre inscription, veuillez vérifier votre adresse email en cliquant sur le bouton ci-dessous.

Vérifier mon email

Si le bouton ne fonctionne pas, vous pouvez copier et coller le lien suivant dans votre navigateur :
%s


Si vous n'avez pas créé de compte, vous pouvez ignorer cet email.

`, verificationURL, verificationURL) message.SetBodyString(mail.TypeTextHTML, htmlBody) message.ReplyTo(m.from) return m.client.DialAndSend(message) } func (m *Mailer) SendWelcomeEmail(to string, data *EmailData) error { tmpl := template.Must(template.New("workspaceWelcome").Parse(workspaceWelcomeTemplate)) var tpl bytes.Buffer err := tmpl.Execute(&tpl, data) if err != nil { return err } message := mail.NewMsg() message.From(m.from) message.To(to) message.Subject("Bienvenue sur votre espace de travail Byom !") message.SetBodyString(mail.TypeTextHTML, tpl.String()) message.ReplyTo(m.from) return m.client.DialAndSend(message) }