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