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!

Bienvenue sur Byom!

Votre application a été configurée avec succès et est prête à être utilisée.

Informations d'accès :

Nom d'utilisateur : {{.Username}}

Mot de passe : {{.Password}}

URL de votre application :

{{range .Subdomains}}

{{.}}

{{end}}

Application principale : {{.WebAppURL}}

Pour bien commencer :

{{.SetupGuide}}

` const verifyEmailTemplate = ` Vérification de votre email - Byom

Vérification de votre email

Merci de vous être inscrit!

Pour finaliser votre inscription et accéder à toutes les fonctionnalités de Byom, veuillez vérifier votre adresse email.

🔒 Note de sécurité:

Ce lien expirera dans 24 heures pour des raisons de sécurité.

` const workspaceWelcomeTemplate = ` Votre espace de travail Byom est prêt !

BYOM

Votre espace de travail est prêt !

Félicitations !

Votre paiement a été confirmé et votre espace de travail Byom est maintenant prêt à être utilisé.

Ce qui vous attend :

  • Interface intuitive et personnalisable
  • Outils de collaboration avancés
  • Support technique dédié
  • Sécurité renforcée
` 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("http://192.168.1.35:5173/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) }