4.1 项目规划与需求梳理
2026/8/1 10:32:28
有的电脑可以使用smtplib包的SMTP_SSL方法发送邮件,有些不行(可能公司服务器禁用了服务)
# 发送try:withsmtplib.SMTP_SSL(EMAIL_CONFIG['smtp_host'],EMAIL_CONFIG['smtp_port'])asserver:server.login(EMAIL_CONFIG['sender'],EMAIL_CONFIG['password'])server.sendmail(EMAIL_CONFIG['sender'],EMAIL_CONFIG['receiver'],msg.as_string())print("✅ 邮件发送成功")exceptExceptionase:print(f"❌ 邮件发送失败:{e}")raise参考网上资料:
该错误通常源于客户端与服务器之间的SSL/TLS协议版本不匹配,特别是在服务器禁用SSLv2而客户端默认尝试使用PROTOCOL_SSLv23时
DS提供解决方案:使用 STARTTLS 替代 SMTP_SSL
这是一种更标准、兼容性更好的做法。它先建立明文连接,再通过 starttls() 命令升级为 TLS 加密。
try:# with smtplib.SMTP_SSL(EMAIL_CONFIG['smtp_host'], EMAIL_CONFIG['smtp_port'],context=context) as server:# server.login(EMAIL_CONFIG['sender'], EMAIL_CONFIG['password'])# server.sendmail(EMAIL_CONFIG['sender'], EMAIL_CONFIG['receiver'], msg.as_string())withsmtplib.SMTP(EMAIL_CONFIG['smtp_host'],EMAIL_CONFIG['smtp_port'])asserver:server.starttls()# 显式升级为 TLS 连接server.login(EMAIL_CONFIG['sender'],EMAIL_CONFIG['password'])server.sendmail(EMAIL_CONFIG['sender'],EMAIL_CONFIG['receiver'],msg.as_string())print("✅ 邮件发送成功")exceptExceptionase:print(f"❌ 邮件发送失败:{e}")raise