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"""
Please click the link below to verify your email address and activate your account:
Or copy this link: {verify_url}
""" }, "me": { "subject": "Potvrdite vaš Radionica 3D nalog", "body": f"""Kliknite na link ispod kako biste potvrdili vašu email adresu и aktivirali nalog:
Ili kopirajte ovaj link: {verify_url}
""" }, "ru": { "subject": "Подтвердите вашу учетную запись Radionica 3D", "body": f"""Пожалуйста, нажмите на ссылку ниже, чтобы подтвердить свой email и активировать аккаунт:
Или скопируйте эту ссылку: {verify_url}
""" }, "ua": { "subject": "Підтвердіть вашу обліковий запис Radionica 3D", "body": f"""Будь ласка, натисніть на посилання нижче, щоб підтвердити свій 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"""You requested a password reset. Click the button below to set a new password. This link is valid for 10 minutes.
Or copy this link: {reset_url}
""" }, "me": { "subject": "Resetovanje lozinke na Radionica 3D", "body": f"""Zatražili ste resetovanje lozinke. Kliknite na dugme ispod kako biste postavili novu lozinku. Ovaj link važi 10 minuta.
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"]) def send_contact_form_email(admin_email: str, name: str, from_email: str, subject: str, message: str): """Notify admin about new contact form submission""" subject_line = f"Contact Form: {subject} (from {name})" body = f"""From: {name} ({from_email})
Subject: {subject}
Message:
This message was sent from the Radionica 3D Contact page.
""" return send_email(admin_email, subject_line, body)