create email sender function
This commit is contained in:
@@ -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(
|
||||
|
||||
58
backend/api/utils/emailSender.py
Normal file
58
backend/api/utils/emailSender.py
Normal 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}"
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user