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如果不是你发起的请求,请忽略此邮件。", )