Coverage for src / mysingle / core / email / email_sending.py: 0%
30 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
1# path: app/utils/email_sending.py
3import logging
4from dataclasses import dataclass
5from pathlib import Path
6from typing import Any
8import emails
9from jinja2 import Template
11from ..config import settings
13logger = logging.getLogger()
16@dataclass
17class EmailData:
18 html_content: str
19 subject: str
22def render_email_template(*, template_name: str, context: dict[str, Any]) -> str:
23 """
24 Jinja2를 사용하여 이메일 템플릿을 렌더링하는 함수
25 """
26 template_str = (
27 Path(__file__).parent / "email-templates" / "build" / template_name
28 ).read_text()
29 html_content = Template(template_str).render(context)
30 return html_content
33def send_email(
34 *,
35 email_to: str,
36 subject: str = "",
37 html_content: str = "",
38) -> None:
39 assert settings.emails_enabled(), "no provided configuration for email variables"
40 message = emails.Message(
41 subject=subject,
42 html=html_content,
43 mail_from=(settings.EMAILS_FROM_NAME, settings.EMAILS_FROM_EMAIL),
44 )
45 smtp_options = {"host": settings.SMTP_HOST, "port": settings.SMTP_PORT}
46 if settings.SMTP_TLS:
47 smtp_options["tls"] = True
48 elif settings.SMTP_SSL:
49 smtp_options["ssl"] = True
50 if settings.SMTP_USER:
51 smtp_options["user"] = settings.SMTP_USER
52 if settings.SMTP_PASSWORD:
53 smtp_options["password"] = settings.SMTP_PASSWORD
54 response = message.send(to=email_to, smtp=smtp_options)
55 logger.info(f"send email result: {response}")