57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
import os
|
||
import smtplib
|
||
from email.mime.application import MIMEApplication
|
||
from email.mime.multipart import MIMEMultipart
|
||
from email.mime.text import MIMEText
|
||
from typing import List
|
||
|
||
from .config import Config
|
||
|
||
|
||
class EmailSender:
|
||
"""Класс для отправки email уведомлений"""
|
||
|
||
def __init__(self, config: Config):
|
||
self.config = config
|
||
|
||
def send_email(self, subject: str, body: str, attachments: List[str] = None):
|
||
"""Отправка email с вложениями"""
|
||
if not all([self.config.EMAIL_HOST, self.config.EMAIL_USER,
|
||
self.config.EMAIL_PASSWORD, self.config.EMAIL_FROM]):
|
||
print("Настройки email не заполнены. Отправка email пропущена.")
|
||
return False
|
||
|
||
try:
|
||
# Создаем сообщение
|
||
msg = MIMEMultipart()
|
||
msg['From'] = self.config.EMAIL_FROM
|
||
msg['To'] = ', '.join(self.config.EMAIL_TO)
|
||
msg['Subject'] = subject
|
||
|
||
# Добавляем текст сообщения
|
||
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
||
|
||
# Добавляем вложения
|
||
if attachments:
|
||
for attachment_path in attachments:
|
||
if os.path.exists(attachment_path):
|
||
with open(attachment_path, 'rb') as f:
|
||
part = MIMEApplication(f.read(), Name=os.path.basename(attachment_path))
|
||
part['Content-Disposition'] = f'attachment; filename="{os.path.basename(attachment_path)}"'
|
||
msg.attach(part)
|
||
|
||
# Подключаемся к SMTP серверу
|
||
with smtplib.SMTP_SSL(self.config.EMAIL_HOST, self.config.EMAIL_PORT) as server:
|
||
server.login(self.config.EMAIL_USER, self.config.EMAIL_PASSWORD)
|
||
server.send_message(msg)
|
||
|
||
print(f"Email успешно отправлен на {', '.join(self.config.EMAIL_TO)}")
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"Ошибка при отправке email: {e}")
|
||
return False
|
||
|
||
|
||
# ============================================================================
|