Basic frontend
This commit is contained in:
@@ -191,6 +191,59 @@ class EmailService:
|
||||
"""
|
||||
|
||||
return await self.send_email(to_email, subject, html_body, text_body)
|
||||
|
||||
async def send_password_reset_email(
|
||||
self,
|
||||
to_email: str,
|
||||
first_name: str,
|
||||
reset_token: str
|
||||
) -> dict:
|
||||
"""Send password reset email with reset link"""
|
||||
subject = f"Password Reset - {settings.APP_NAME}"
|
||||
|
||||
reset_url = f"{settings.FRONTEND_URL}/reset-password?token={reset_token}"
|
||||
|
||||
html_body = f"""
|
||||
<html>
|
||||
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
|
||||
<h2 style="color: #0066cc;">Password Reset Request</h2>
|
||||
<p>Hello {first_name},</p>
|
||||
<p>You have requested to reset your password for your {settings.APP_NAME} account.</p>
|
||||
<p>Please click the button below to reset your password:</p>
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<a href="{reset_url}" style="background-color: #0066cc; color: white; padding: 12px 24px; text-decoration: none; border-radius: 5px; display: inline-block;">Reset Password</a>
|
||||
</div>
|
||||
<p>If the button doesn't work, you can copy and paste this link into your browser:</p>
|
||||
<p style="word-break: break-all; background-color: #f5f5f5; padding: 10px; border-radius: 3px;">{reset_url}</p>
|
||||
<p><strong>This link will expire in 1 hour.</strong></p>
|
||||
<p>If you didn't request this password reset, please ignore this email. Your password will remain unchanged.</p>
|
||||
<p>For security reasons, please don't share this email with anyone.</p>
|
||||
<p>Best regards,<br>
|
||||
<strong>{settings.APP_NAME}</strong></p>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
text_body = f"""
|
||||
Password Reset Request
|
||||
|
||||
Hello {first_name},
|
||||
|
||||
You have requested to reset your password for your {settings.APP_NAME} account.
|
||||
|
||||
Please use this link to reset your password: {reset_url}
|
||||
|
||||
This link will expire in 1 hour.
|
||||
|
||||
If you didn't request this password reset, please ignore this email. Your password will remain unchanged.
|
||||
|
||||
For security reasons, please don't share this email with anyone.
|
||||
|
||||
Best regards,
|
||||
{settings.APP_NAME}
|
||||
"""
|
||||
|
||||
return await self.send_email(to_email, subject, html_body, text_body)
|
||||
|
||||
|
||||
# Create a singleton instance
|
||||
|
||||
Reference in New Issue
Block a user