AI-News/backend/smtp_test.py

45 lines
1.3 KiB
Python
Raw Normal View History

2025-12-04 10:04:21 +08:00
# smtp_test.py
import os, smtplib, ssl
from email.message import EmailMessage
from dotenv import load_dotenv
load_dotenv(".env")
SMTP_HOST = os.getenv("SMTP_HOST", "smtp.163.com")
SMTP_USER = os.getenv("SMTP_USER") # 必须是完整邮箱
SMTP_PASS = os.getenv("SMTP_PASSWORD") # 163“客户端授权码”
FROM = os.getenv("MAIL_FROM", SMTP_USER) # 建议与 SMTP_USER 相同
TO = SMTP_USER # 先给自己发一封
assert SMTP_USER and SMTP_PASS, "缺少 SMTP_USER/SMTP_PASSWORD 环境变量"
def make_msg():
m = EmailMessage()
m["Subject"] = "SMTP 测试 - 465/587"
m["From"] = FROM
m["To"] = TO
m.set_content("hello from smtp_test.py")
return m
ctx = ssl.create_default_context()
# 先 465/SSL
try:
print(">>> try SSL 465")
with smtplib.SMTP_SSL(SMTP_HOST, 465, context=ctx, timeout=20) as s:
s.set_debuglevel(1)
s.login(SMTP_USER, SMTP_PASS)
s.send_message(make_msg())
print("OK via 465/SSL")
except Exception as e:
print("465 failed:", e)
print(">>> fallback STARTTLS 587")
with smtplib.SMTP(SMTP_HOST, 587, timeout=20) as s:
s.set_debuglevel(1)
s.ehlo()
s.starttls(context=ctx)
s.ehlo()
s.login(SMTP_USER, SMTP_PASS)
s.send_message(make_msg())
print("OK via 587/STARTTLS")