import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import config def send_email(to_email: str, subject: str, body_html: str): try: msg = MIMEMultipart("alternative") msg["Subject"] = subject msg["From"] = config.SMTP_FROM msg["To"] = to_email html_part = MIMEText(body_html, "html") msg.attach(html_part) with smtplib.SMTP(config.SMTP_HOST, config.SMTP_PORT) as server: if config.SMTP_USER and config.SMTP_PASS: server.starttls() server.login(config.SMTP_USER, config.SMTP_PASS) server.sendmail(config.SMTP_FROM, to_email, msg.as_string()) return True except Exception as e: print(f"FAILED TO SEND EMAIL: {e}") return False def send_verification_email(to_email: str, token: str, lang: str = "en"): verify_url = f"{config.FRONTEND_URL}/{lang}/auth?verify_token={token}" templates = { "en": { "subject": "Verify your Radionica 3D account", "body": f"""

Welcome to Radionica 3D!

Please click the link below to verify your email address and activate your account:

Verify Email

Or copy this link: {verify_url}

""" }, "me": { "subject": "Potvrdite vaš Radionica 3D nalog", "body": f"""

Dobrodošli u Radionicu 3D!

Kliknite na link ispod kako biste potvrdili vašu email adresu и aktivirali nalog:

Potvrdi Email

Ili kopirajte ovaj link: {verify_url}

""" }, "ru": { "subject": "Подтвердите вашу учетную запись Radionica 3D", "body": f"""

Добро пожаловать в Radionica 3D!

Пожалуйста, нажмите на ссылку ниже, чтобы подтвердить свой email и активировать аккаунт:

Подтвердить Email

Или скопируйте эту ссылку: {verify_url}

""" }, "ua": { "subject": "Підтвердіть вашу обліковий запис Radionica 3D", "body": f"""

Ласкаво просимо до Radionica 3D!

Будь ласка, натисніть на посилання нижче, щоб підтвердити свій email та активувати акаунт:

Підтвердити Email

Або скопіюйте це посилання: {verify_url}

""" } } tpl = templates.get(lang, templates["en"]) return send_email(to_email, tpl["subject"], tpl["body"]) def send_password_reset_email(to_email: str, token: str, lang: str = "en"): reset_url = f"{config.FRONTEND_URL}/{lang}/auth?token={token}" templates = { "en": { "subject": "Reset your Radionica 3D password", "body": f"""

Password Reset Request

You requested a password reset. Click the button below to set a new password. This link is valid for 10 minutes.

Reset Password

Or copy this link: {reset_url}

""" }, "me": { "subject": "Resetovanje lozinke na Radionica 3D", "body": f"""

Zahtjev za resetovanje lozinke

Zatražili ste resetovanje lozinke. Kliknite na dugme ispod kako biste postavili novu lozinku. Ovaj link važi 10 minuta.

Resetuj lozinku

Ili kopirajte ovaj link: {reset_url}

""" }, "ru": { "subject": "Сброс пароля Radionica 3D", "body": f"""

Запрос на сброс пароля

Вы запросили сброс пароля. Нажмите на кнопку ниже, чтобы установить новый пароль. Ссылка действительна в течение 10 минут.

Сбросить пароль

Или скопируйте эту ссылку: {reset_url}

""" }, "ua": { "subject": "Скидання пароля Radionica 3D", "body": f"""

Запит на скидання пароля

Ви запросили скидання пароля. Натисніть на кнопку нижче, щоб встановити новий пароль. Посилання дійсне протягом 10 хвилин.

Скинути пароль

Або скопіюйте це посилання: {reset_url}

""" } } tpl = templates.get(lang, templates["en"]) return send_email(to_email, tpl["subject"], tpl["body"])