create email sender function

This commit is contained in:
2025-05-28 11:41:54 +03:00
parent 970b6408fb
commit 9eaaff9eb2
5 changed files with 273 additions and 152 deletions

View File

@@ -10,12 +10,14 @@ from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Q
from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer, LeadSerializer, LeadResponseSerializer
from api.auth.serializers import UserResponseSerializer
from api.models import UserProfile
from api.utils.decorators import handle_exceptions
from routes.models import Route, City, Country, Leads
from sitemanagement.models import Pricing
from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer, LeadSerializer, LeadResponseSerializer
from api.utils.decorators import handle_exceptions
from api.utils.emailSender import send_email
class UserDataView(ViewSet):
"""Эндпоинт для наполнения стора фронта данными"""
@@ -244,6 +246,18 @@ class LeadViewSet(ViewSet):
"moving_date": lead.moving_date,
}
}
# Тестовая отправка email
try:
email_result = send_email(
to=["timofey.syr1704@yandex.by"],
subject="Тестовое письмо от TripWB",
html_content="<h1>Тест отправки письма</h1><p>Если вы видите это сообщение, значит отправка работает!</p>"
)
print(f"Email sending result: {email_result}")
except Exception as email_error:
print(f"Error sending email: {str(email_error)}")
return Response(response_data, status=status.HTTP_201_CREATED)
except Exception as e:
return Response(

View File

@@ -0,0 +1,58 @@
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formataddr
from typing import Optional
from os.path import basename
from django.conf import settings
def send_email(
to: list[str],
subject: str,
html_content: str,
attachments: Optional[list[str]] = None,
from_email: Optional[str] = None
) -> str:
smtp_host = settings.MAIL_SERVER_URL
smtp_port = int(settings.MAIL_SERVER_SMTP_PORT)
smtp_user = settings.SENDER_MAIL_LOGIN
smtp_pass = settings.SENDER_MAIL_PASSWORD
from_email = from_email or settings.SENDER_EMAIL
msg = MIMEMultipart()
from_email = from_email or settings.CORP_EMAIL
if not from_email:
raise ValueError("from_email не задан и отсутствует в settings")
msg['From'] = formataddr(('TripWB', from_email))
msg['To'] = ', '.join(to)
msg['Subject'] = subject
msg.attach(MIMEText(html_content, 'html', 'utf-8'))
# добавляем вложения
if attachments:
for file_path in attachments:
try:
with open(file_path, 'rb') as f:
part = MIMEApplication(f.read(), Name=basename(file_path))
part['Content-Disposition'] = f'attachment; filename="{basename(file_path)}"'
msg.attach(part)
except Exception as e:
print(f"Ошибка при прикреплении файла: {file_path}{e}")
try:
with smtplib.SMTP(smtp_host, smtp_port) as server:
server.ehlo()
server.starttls()
server.login(smtp_user, smtp_pass)
server.sendmail(from_email, to, msg.as_string())
return "Email отправлен успешно"
except Exception as e:
print(f"Ошибка при отправке письма: {e}")
return f"Ошибка: {e}"

View File

@@ -1,6 +1,6 @@
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 25
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 25
max_page_size = 10