g497813927 发表于 2024-1-4 20:06:24

【已收录】SMTP STARTTLS连接异常问题

系统版本:Ubuntu 20.04.6 LTS (Focal Fossa) x86_64
面板版本:Beta 8.0.48
操作系统版本:macOS 14.2.1 (23C71)
浏览器版本:Version 120.0.2210.91 (Official build) (arm64)

问题描述:
在尝试使用需要STARTTLS的邮箱服务器(如 Microsoft Office 365 Exchange)作为SMTP发信方式的时候,会提示“发送失败,请检查发送者配置或者接收者信息是否正确.”
经过检查,在/www/server/panel/class/msg/mail_msg.py这个文件中的set_config方法中,当设置的SMTP端口为587时,ret的值返回如下信息:{
    "status": true,
    "msg": "\u53d1\u9001\u5b8c\u6210\uff0c\u5171\u53d1\u9001\u30101\u3011\u6761\uff0c\u6210\u529f\u30100\u3011\uff0c\u5931\u8d25\u30101\u3011\u3002",
    "list": {
      "****@****.com": "Traceback (most recent call last):\n File \"/www/server/panel/class/msg/mail_msg.py\", line 194, in send_msg\n server.login(self.__mail_config['send']['qq_mail'], self.__mail_config['send']['qq_stmp_pwd'])\n File \"/www/server/panel/pyenv/lib/python3.7/smtplib.py\", line 697, in login\n \"SMTP AUTH extension not supported by server.\")\nsmtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.\n"
    },
    "success": 0,
    "error": 1
}通过这段报错可以大致了解到错误在该代码第194行产生,进行查询后发现上方端口判定时只判定了465端口,其余没有进行适配,导致出现无法正常连接至端口为587、需要STARTTLS的邮箱服务器


可能的解决方案(经过测试后可以正常使用,相对较少修改代码):
在 191 行 - 192 行中间增加对587端口的适配,可以参考以下代码:
elif int(self.__mail_config['send']['port']) == 587:
    server = smtplib.SMTP(str(self.__mail_config['send']['hosts']), str(self.__mail_config['send']['port']))
    server.starttls()即为在检测端口为587时使用starttls方法。

更推荐的解决方案(可能涉及到方法重写以及更新字段,但可以覆盖更多范围(如对应邮件服务器自定义端口的情况)):


/www/server/panel/class/msg/mail.html中增加协议选择,然后在 Python 文件中的 __mail_config 中增加使用协议相关字段并在方法中针对该字段进行分类。如果是旧版本升级则自动基于原有端口号进行适配。

大炮运维V587 发表于 2024-1-9 10:57:49

已收录
页: [1]
查看完整版本: 【已收录】SMTP STARTTLS连接异常问题