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

1# path: app/utils/email_gen.py 

2 

3 

4import logging 

5 

6from ..config import settings 

7from .email_sending import EmailData, render_email_template 

8from .email_token import generate_email_token 

9 

10logging.basicConfig(level=logging.INFO) 

11logger = logging.getLogger() 

12 

13 

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) 

20 

21 verification_link = f"{origin}/api/auth/verify-email?token={verification_token}" 

22 

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) 

34 

35 

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) 

57 

58 

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) 

83 

84 

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} - 비밀번호 변경 완료" 

93 

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)