[Bug]: Can’t send emails to non-authenticated server

用户在使用 LiteLLM 代理(LiteLLM Proxy)时,配置了邮件发送功能,但目标 SMTP 服务器是一个不需要登录认证的内部邮件服务器(例如:仅通过 IP 白名单或端口 25 进行发送)。系统中,邮件发送逻辑强制要求提供 smtp_username 和 smtp_password ,导致

[Bug]: Can't send emails to non-authenticated server

[Bug]: Can’t send emails to non-authenticated server

快速结论:当 LiteLLM 代理配置了 SMTP 邮件发送,但目标 SMTP 服务器不需要认证(如公司内部 IP 白名单服务器或端口 25 无认证服务器)时,会触发此错误。优先排查 SMTP 用户名和密码的环境变量是否被设置,如果不需要认证,则应确保这两个变量未设置。

问题场景

用户在使用 LiteLLM 代理(LiteLLM Proxy)时,配置了邮件发送功能,但目标 SMTP 服务器是一个不需要登录认证的内部邮件服务器(例如:仅通过 IP 白名单或端口 25 进行发送)。系统中,邮件发送逻辑强制要求提供 smtp_usernamesmtp_password,导致无法连接此类服务器。

报错原文

20:44:16 - LiteLLM Proxy:DEBUG: utils.py:108 - An error occurred while sending the email:SMTP AUTH extension not supported by server.
litellm-litellm-1     | Traceback (most recent call last):
litellm-litellm-1     |   File "/usr/local/lib/python3.11/site-packages/litellm/proxy/utils.py", line 2494, in send_email
litellm-litellm-1     |     server.login(smtp_username, smtp_password)  # type: ignore
litellm-litellm-1     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
litellm-litellm-1     |   File "/usr/local/lib/python3.11/smtplib.py", line 716, in login
litellm-litellm-1     |     raise SMTPNotSupportedError(
litellm-litellm-1     | smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
12:08:19 - LiteLLM Proxy:ERROR: utils.py:5096 - An error occurred while sending the email:(535, b'5.7.8 Error: authentication failed: (reason unavailable)')
Traceback (most recent call last):
  File "/app/.venv/lib/python3.13/site-packages/litellm/proxy/utils.py", line 5083, in send_email
    server.login(
    ~~~~~~~~~~~~^
        user=smtp_username,
        ^^^^^^^^^^^^^^^^^^^
        REDACTED,
        ^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  ...
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed: (reason unavailable)')

原因分析

根本原因是 LiteLLM Proxy 在发送邮件时,固定调用了 server.login(smtp_username, smtp_password)(在 litellm/proxy/utils.py 的邮件发送函数中),即使 smtp_usernamesmtp_password 为空或未设置,也会执行登录操作。对于不需要认证的内部 SMTP 服务器,该登录操作会直接报错 SMTP AUTH extension not supported by serverAuthentication failed。理想的行为应该是:只有当提供了用户名和密码时,才调用 login();否则直接发送邮件而不认证。

环境排查

  • LiteLLM 版本:Issue 中提及 v1.88.1,建议确认当前版本。
  • Python 版本:报错涉及 Python 3.11 和 3.13,均为标准环境。
  • SMTP 服务器类型:是否为不需要认证的服务器(例如:端口 25、内部 IP 白名单)?
  • 环境变量配置:检查是否错误地设置了 SMTP_USERNAMESMTP_PASSWORD,即使不需要认证也不应留空。

解决步骤

  1. 确认修复版本:通过 Issue 的历史记录和仓库检查,确认 GitHub 上已经合并了修复(if username and password 的判断)。请确保使用 LiteLLM 的版本 ≥ 修复 commit 的版本。如果使用的是稳定版,建议升级到最新版本(例如 v1.90.0 或更高)。
  2. 不设置 SMTP 凭证:如果 SMTP 服务器不需要认证,请确保 SMTP_USERNAMESMTP_PASSWORD 环境变量未设置(或留空)。LiteLLM 读取配置时,应跳过 login 步骤。
  3. 检查文档/配置:查阅 LiteLLM 的官方文档,确认 SMTP 配置部分是否明确说明用户名和密码是可选的。Issue 中反馈文档中仍显示为“必填”,因此建议以文档更新为准。
  4. 手动修改代码(临时):如果无法升级,可参考 Issue 中的建议,找到 litellm/proxy/utils.py 中的 send_email 函数(对应报错行),在 server.login(...) 调用前添加判断:if smtp_username and smtp_password: server.login(...)

验证方法

重启 LiteLLM 代理后,触发一次邮件发送事件(例如:设置测试告警或通过接口发送邮件)。观察日志中是否不再出现 SMTP AUTH extension not supportedAuthentication failed 错误,并确认邮件已成功发送至收件人。

参考来源

BerriAI/litellm #6625

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13879

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注