Coverage for src / mysingle / core / email / email_gen.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_gen.py
4import logging
6from ..config import settings
7from .email_sending import EmailData, render_email_template
8from .email_token import generate_email_token
10logging.basicConfig(level=logging.INFO)
11logger = logging.getLogger()
14def generate_verification_email(email_to: str, origin: str) -> EmailData:
15 """
16 신규 가입자 검증 이메일 발송 함수
17 """
18 project_name = settings.PROJECT_NAME
19 verification_token = generate_email_token(email_to)
21 verification_link = f"{origin}/api/auth/verify-email?token={verification_token}"
23 subject = f"{project_name} - 이메일 인증 요청"
24 html_content = render_email_template(
25 template_name="verify_email.html",
26 context={
27 "project_name": settings.PROJECT_NAME,
28 "frontend_url": settings.FRONTEND_URL,
29 "email": email_to,
30 "link": verification_link,
31 },
32 )
33 return EmailData(html_content=html_content, subject=subject)
36def generate_reset_password_email(
37 email_to: str, email: str, token: str, origin: str
38) -> EmailData:
39 """
40 패스워드 리셋 이메일 생성
41 """
42 project_name = settings.PROJECT_NAME
43 subject = f"{project_name} - 패스워드 재설정"
44 link = f"{origin}/auth/reset-password?token={token}"
45 html_content = render_email_template(
46 template_name="reset_password.html",
47 context={
48 "project_name": settings.PROJECT_NAME,
49 "frontend_url": settings.FRONTEND_URL,
50 "username": email,
51 "email": email_to,
52 "valid_hours": settings.EMAIL_TOKEN_EXPIRE_HOURS,
53 "link": link,
54 },
55 )
56 return EmailData(html_content=html_content, subject=subject)
59def generate_new_account_email(
60 email_to: str,
61 username: str,
62 password: str,
63 origin: str,
64) -> EmailData:
65 """
66 신규 계정 생성 이메일 생성(관리자)
67 """
68 project_name = settings.PROJECT_NAME
69 subject = f"{project_name} - New account for user {username}"
70 link = f"{origin}/"
71 html_content = render_email_template(
72 template_name="new_account.html",
73 context={
74 "project_name": settings.PROJECT_NAME,
75 "frontend_url": settings.FRONTEND_URL,
76 "username": username,
77 "password": password,
78 "email": email_to,
79 "link": link,
80 },
81 )
82 return EmailData(html_content=html_content, subject=subject)
85def generate_password_reset_confirmation_email(
86 email_to: str, username: str, origin: str
87) -> EmailData:
88 """
89 비밀번호 재설정 완료 알림 이메일 생성
90 """
91 project_name = settings.PROJECT_NAME
92 subject = f"{project_name} - 비밀번호 변경 완료"
94 html_content = render_email_template(
95 template_name="password_reset_confirmation.html",
96 context={
97 "project_name": settings.PROJECT_NAME,
98 "frontend_url": settings.FRONTEND_URL,
99 "username": username,
100 "email": email_to,
101 "login_link": f"{origin}/auth/login",
102 "support_email": settings.EMAILS_FROM_EMAIL,
103 },
104 )
105 return EmailData(html_content=html_content, subject=subject)