当前位置:论坛首页 > BUG提交 > Linux面板

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

发表在 BUG提交2024-1-4 20:06 [复制链接] 1 2310

系统版本: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发信方式的时候,会提示“发送失败,请检查发送者配置或者接收者信息是否正确.”
经过检查,在
  1. /www/server/panel/class/msg/mail_msg.py
复制代码
这个文件中的set_config方法中,当设置的SMTP端口为587时,ret的值返回如下信息:
  1. {
  2.     "status": true,
  3.     "msg": "\u53d1\u9001\u5b8c\u6210\uff0c\u5171\u53d1\u9001\u30101\u3011\u6761\uff0c\u6210\u529f\u30100\u3011\uff0c\u5931\u8d25\u30101\u3011\u3002",
  4.     "list": {
  5.         "****@****.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"
  6.     },
  7.     "success": 0,
  8.     "error": 1
  9. }
复制代码
通过这段报错可以大致了解到错误在该代码第194行产生,进行查询后发现上方端口判定时只判定了465端口,其余没有进行适配,导致出现无法正常连接至端口为587、需要STARTTLS的邮箱服务器


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

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


  1. /www/server/panel/class/msg/mail.html
复制代码
中增加协议选择,然后在 Python 文件中的 __mail_config 中增加使用协议相关字段并在方法中针对该字段进行分类。如果是旧版本升级则自动基于原有端口号进行适配。
使用道具 举报 只看该作者 回复
发表于 2024-1-9 10:57:49 | 显示全部楼层
已收录
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术免费分析
快速回复 返回顶部 返回列表