package services import ( "fmt" "net/smtp" "strings" "neomovies-api/pkg/config" ) type EmailService struct { config *config.Config } func NewEmailService(cfg *config.Config) *EmailService { return &EmailService{ config: cfg, } } type EmailOptions struct { To []string Subject string Body string IsHTML bool } func (s *EmailService) SendEmail(options *EmailOptions) error { if s.config.GmailUser == "" || s.config.GmailPassword == "" { return fmt.Errorf("Gmail credentials not configured") } // Gmail SMTP конфигурация smtpHost := "smtp.gmail.com" smtpPort := "587" auth := smtp.PlainAuth("", s.config.GmailUser, s.config.GmailPassword, smtpHost) // Создаем заголовки email headers := make(map[string]string) headers["From"] = s.config.GmailUser headers["To"] = strings.Join(options.To, ",") headers["Subject"] = options.Subject if options.IsHTML { headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=UTF-8" } // Формируем сообщение message := "" for key, value := range headers { message += fmt.Sprintf("%s: %s\r\n", key, value) } message += "\r\n" + options.Body // Отправляем email err := smtp.SendMail( smtpHost+":"+smtpPort, auth, s.config.GmailUser, options.To, []byte(message), ) return err } // Предустановленные шаблоны email func (s *EmailService) SendVerificationEmail(userEmail, code string) error { options := &EmailOptions{ To: []string{userEmail}, Subject: "Подтверждение регистрации Neo Movies", Body: fmt.Sprintf(`
Здравствуйте!
Для завершения регистрации введите этот код:
Код действителен в течение 10 минут.
Если вы не регистрировались на нашем сайте, просто проигнорируйте это письмо.
Вы запросили сброс пароля для вашего аккаунта Neo Movies.
Нажмите на ссылку ниже, чтобы создать новый пароль:
Ссылка действительна в течение 1 часа.
Если вы не запрашивали сброс пароля, проигнорируйте это сообщение.
С уважением,
Команда Neo Movies
У нас есть новые рекомендации фильмов специально для вас:
Заходите в приложение, чтобы узнать больше деталей!
С уважением,
Команда Neo Movies