Files
2026-07-18 20:32:51 +08:00

49 lines
1.4 KiB
Python

import logging
from email.message import EmailMessage
import aiosmtplib
from app.config import settings
logger = logging.getLogger(__name__)
async def _send(subject: str, recipient: str, text: str) -> None:
if settings.email_delivery_mode == "console":
logger.warning("开发邮件\nTo: %s\nSubject: %s\n%s", recipient, subject, text)
return
message = EmailMessage()
message["From"] = settings.email_from
message["To"] = recipient
message["Subject"] = subject
message.set_content(text)
await aiosmtplib.send(
message,
hostname=settings.smtp_host,
port=settings.smtp_port,
username=settings.smtp_username,
password=settings.smtp_password,
start_tls=settings.smtp_starttls,
)
async def send_confirmation_email(recipient: str, token: str) -> None:
url = f"{settings.frontend_url.rstrip('/')}/auth/confirm?token={token}"
await _send(
"确认你的 OpenCloud 邮箱",
recipient,
f"请打开下面的链接完成邮箱确认:\n\n{url}\n\n链接将在指定时间后失效。",
)
async def send_password_reset_email(recipient: str, token: str) -> None:
url = f"{settings.frontend_url.rstrip('/')}/auth/reset-password?token={token}"
await _send(
"重置你的 OpenCloud 密码",
recipient,
f"请打开下面的链接重置密码:\n\n{url}\n\n如果不是你发起的请求,请忽略此邮件。",
)