package services import ( "fmt" "net/smtp" "strings" configs "goFiber/config" ) type EmailService struct{} func NewEmailService() *EmailService { return &EmailService{} } func (s *EmailService) Send(to, subject, body string) error { host := strings.TrimSpace(configs.AppConfig.EmailHost) port := strings.TrimSpace(configs.AppConfig.EmailPort) from := strings.TrimSpace(configs.AppConfig.EmailFrom) if host == "" || port == "" || from == "" { return fmt.Errorf("email configuration is incomplete") } addr := host + ":" + port username := strings.TrimSpace(configs.AppConfig.EmailHostUser) password := strings.TrimSpace(configs.AppConfig.EmailHostPassword) var auth smtp.Auth if username != "" && password != "" { auth = smtp.PlainAuth("", username, password, host) } message := "From: " + from + "\r\n" + "To: " + to + "\r\n" + "Subject: " + subject + "\r\n" + "MIME-Version: 1.0\r\n" + "Content-Type: text/plain; charset=UTF-8\r\n\r\n" + body return smtp.SendMail(addr, auth, from, []string{to}, []byte(message)) } func (s *EmailService) SendVerificationEmail(to, firstName, verifyURL string) error { subject := "Email verification" body := fmt.Sprintf( "Hi %s,\n\nPlease verify your email by opening this link:\n%s\n\nIf you did not create this account, you can ignore this email.", firstName, verifyURL, ) return s.Send(to, subject, body) }