![[Bug]: Email settings won't save from UI](https://www.chat-gpts.plus/wp-content/uploads/2026/06/19221-be408ddc.jpg)
[Bug]: Email settings won’t save from UI
快速结论:该报错发生在 LiteLLM UI 仪表盘中,用户尝试通过 UI 保存 SMTP 邮件服务器设置时,虽然提示“设置已保存”,但刷新页面后设置丢失。优先排查加密密钥环境变量 LITELLM_MASTER_KEY 或 LITELLM_SALT_KEY 是否被更改,或控制台是否出现加密/解密错误。
问题场景
用户通过 pip install litellm[proxy] prisma 安装 LiteLLM Proxy,使用 UI Dashboard 配置邮件服务器时触发。多位用户在 LiteLLM 版本 1.80.16 至 1.89.2 上均复现该问题,部分用户同时遇到发送测试邮件后服务崩溃或回调测试失败(报错:Service must be in list. Service=smtp_email not in typing.Union[...])。
报错原文
# 控制台出现加密/解密错误(用户报告):
Exception occured - 400: {'error': "Service must be in list. Service=smtp_email not in typing.Union[typing.Literal['slack_budget_alerts', 'langfuse', 'langfuse_otel', 'slack', 'openmeter', 'webhook', 'email', 'braintrust', 'datadog', 'datadog_llm_observability', 'generic_api', 'arize', 'sqs'], str]"}
原因分析
可能原因:
- 加密密钥环境变量(
LITELLM_MASTER_KEY或LITELLM_SALT_KEY)在部署后被修改,导致之前加密存储的 SMTP 配置无法解密,UI 显示为空白或失效。 - LiteLLM 后端在保存 email 设置时,使用的回调服务类型
smtp_email未被正确注册到服务列表中,导致验证失败(错误码 400)。 - 该问题在多个版本(1.80.16 至 1.89.2)中持续存在,可能为 UI 或后端接口的持久化机制缺陷。
环境排查
- 确认 LiteLLM 版本(如
1.80.16,1.81.0,1.89.2),是否使用最新镜像或 pip 安装包。 - 检查 Docker 镜像标签(如
1.81.13,1.83.10,1.85.1,1.87.0)。 - 确认环境变量
LITELLM_MASTER_KEY和LITELLM_SALT_KEY是否有过变更。 - 查看浏览器控制台(Console)是否出现 JavaScript 加密/解密错误。
- 检查数据库(Prisma)中 email 配置表是否正常写入记录。
解决步骤
- 检查加密密钥一致性:确保
LITELLM_MASTER_KEY和LITELLM_SALT_KEY自安装/配置后从未修改。若曾修改,需要恢复原始密钥或重新配置所有已保存的加密设置。 - 查看控制台日志:在 UI 界面打开浏览器开发者工具,检查 Network 请求保存 email 设置时返回的状态码和响应体,以及 Console 是否出现解密失败相关错误。
- 尝试通过 API 直接保存:使用以下示例 API 调用替代 UI 保存(将
{base_url}替换为实际代理地址),验证 backend 是否正常工作:curl -X POST "http://{base_url}/email/settings" \ -H "Authorization: Bearer {master_key}" \ -H "Content-Type: application/json" \ -d '{ "smtp_host": "smtp.example.com", "smtp_port": 587, "smtp_username": "user@example.com", "smtp_password": "your_password", "smtp_sender_email": "noreply@example.com" }'如果 API 返回成功并持久化,说明问题仅限于 UI 层;若 API 也失败,则需检查后端处理逻辑。
- 升级到最新版本:由于问题在多个版本持续存在,可尝试升级到当前最新版(如
1.90.0或更高),查看是否包含修复。 - 临时手动配置:如果 UI 无法保存,可改为手动修改配置文件(如
config.yaml或环境变量),并在重启后确认生效。 - 回滚加密密钥:如果怀疑密钥变更导致解密失败,可尝试将
LITELLM_SALT_KEY和LITELLM_MASTER_KEY恢复为最初使用的值(若有备份),然后重启服务。
可优先尝试:确认 LITELLM_MASTER_KEY 和 LITELLM_SALT_KEY 是否与初始安装时一致,并检查浏览器 Console 的加密错误信息。
验证方法
执行保存操作后,刷新页面(F5 或重新加载),检查 email 设置字段是否仍保留填入的值。同时点击“测试发送”按钮,确认不会触发服务崩溃或报错。也可在后台数据库查询 email 配置记录是否存在且内容正确。



