From b21d2bb0316ce5346bba632f2e90fb4ba302b322 Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 30 Mar 2026 20:47:47 +0300 Subject: [PATCH] fix(email): Fix func for sending email --- utils/mail.py | 127 ++++++++++++++------------------------------------ 1 file changed, 36 insertions(+), 91 deletions(-) diff --git a/utils/mail.py b/utils/mail.py index 0d4d822..9fc4467 100644 --- a/utils/mail.py +++ b/utils/mail.py @@ -1,103 +1,66 @@ import os import smtplib import logging -from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText -from email.mime.application import MIMEApplication -from pathlib import Path +from email.mime.multipart import MIMEMultipart # Настройка логирования logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) -def send_pdf_to_email(recipient_email, pdf_filename=None, subject="PDF документ", body_text=None): - +def send_lead_to_email(name, phone, email): + """ + Отправляет информацию о заявке на фиксированный email rkplastic@mail.ru. + + Args: + name (str): ФИО клиента + phone (str): Телефон клиента + email (str): Email клиента + + Returns: + bool: True если отправка успешна, иначе False + """ # Настройки Яндекс.Почты SMTP_SERVER = "smtp.yandex.ru" SMTP_PORT = 587 SENDER_EMAIL = "w0ron.black@yandex.ru" - - # Получаем пароль из переменной окружения SENDER_PASSWORD = os.environ.get('EMAIL_PASS') - + RECIPIENT_EMAIL = "rkplastic@mail.ru" + if not SENDER_PASSWORD: - logger.error("Не найдена переменная окружения EMAIL_PASS") + logger.error("❌ Не найдена переменная окружения EMAIL_PASS") return False - - # Путь к папке с PDF файлами - data_folder = Path("./data") - - if not data_folder.exists(): - logger.error(f"Папка {data_folder.absolute()} не существует") - return False - - # Определяем файл для отправки - if pdf_filename: - pdf_path = data_folder / pdf_filename - if not pdf_path.exists(): - logger.error(f"Файл {pdf_filename} не найден в папке {data_folder}") - return False - else: - # Ищем первый PDF файл в папке - pdf_files = list(data_folder.glob("*.pdf")) - if not pdf_files: - logger.error("В папке нет PDF файлов") - return False - pdf_path = pdf_files[0] - logger.info(f"Найден файл: {pdf_path.name}") - - # Проверяем размер файла (Яндекс ограничивает вложения до 30 МБ) - file_size_mb = pdf_path.stat().st_size / (1024 * 1024) - if file_size_mb > 30: - logger.error(f"Файл слишком большой: {file_size_mb:.2f} МБ (максимум 30 МБ)") - return False - - # Текст письма по умолчанию - if body_text is None: - body_text = f""" - Здравствуйте! - - Во вложении находится PDF документ: {pdf_path.name} - - С уважением, - Отправитель - """ - - # Создаем сообщение + + # Тема и текст письма + subject = "Новая заявка с сайта" + body = f"""На сайте оставлена заявка: + Имя: {name} + Телефон: {phone} + Почта: {email} + """ + + # Создаём сообщение msg = MIMEMultipart() msg['From'] = SENDER_EMAIL - msg['To'] = recipient_email + msg['To'] = RECIPIENT_EMAIL msg['Subject'] = subject msg['Reply-To'] = SENDER_EMAIL - - # Добавляем текст письма с правильной кодировкой - msg.attach(MIMEText(body_text, 'plain', 'utf-8')) - + + # Добавляем текст в кодировке UTF-8 + msg.attach(MIMEText(body, 'plain', 'utf-8')) + try: - # Добавляем PDF файл - with open(pdf_path, 'rb') as file: - pdf_attachment = MIMEApplication(file.read(), _subtype='pdf') - pdf_attachment.add_header( - 'Content-Disposition', - 'attachment', - filename=('utf-8', '', pdf_path.name) # Поддержка русских имен файлов - ) - msg.attach(pdf_attachment) - - # Подключаемся к серверу Яндекс.Почты - logger.info("Подключение к серверу Яндекс.Почты...") + logger.info(f"Подключение к SMTP-серверу {SMTP_SERVER}:{SMTP_PORT}...") server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PASSWORD) - - # Отправляем письмо + server.send_message(msg) server.quit() - - logger.info(f"✅ Письмо успешно отправлено на {recipient_email}") - logger.info(f"📎 Файл: {pdf_path.name} ({file_size_mb:.2f} МБ)") + + logger.info(f"✅ Заявка успешно отправлена на {RECIPIENT_EMAIL}") return True - + except smtplib.SMTPAuthenticationError: logger.error("❌ Ошибка аутентификации. Проверьте пароль в переменной EMAIL_PASS") return False @@ -107,21 +70,3 @@ def send_pdf_to_email(recipient_email, pdf_filename=None, subject="PDF доку except Exception as e: logger.error(f"❌ Неожиданная ошибка: {e}") return False - -def send_pdf_to_multiple(recipient_emails, pdf_filename=None, subject="PDF документ", body_text=None): - """ - Отправляет PDF файл нескольким получателям - - Args: - recipient_emails (list): Список email получателей - pdf_filename (str, optional): Имя PDF файла - subject (str): Тема письма - body_text (str): Текст письма - - Returns: - dict: Словарь с результатами для каждого получателя - """ - results = {} - for email in recipient_emails: - results[email] = send_pdf_to_email(email, pdf_filename, subject, body_text) - return results