remove logo feature not work in human input email notification

在 Dify 工作流中配置了人工审批节点(Human Input Node),并通过该节点发送邮件通知,同时在应用设置中开启了"去除品牌 Logo"(remove logo)功能。用户预期收到不包含 Dify Logo 的纯内容邮件,但实际邮件底部仍然显示了品牌 Logo。

快速结论:在 Dify 工作流中配置了人工审批节点(Human Input)并发送邮件通知时,即使开启了去除品牌 Logo 的开关(remove_webapp_brand),收到的邮件中依然会显示 Dify Logo。这个问题是由于人工审批节点的邮件发送走了独立的邮件管道,没有检查用户的品牌设置。

问题场景

在 Dify 工作流中配置了人工审批节点(Human Input Node),并通过该节点发送邮件通知,同时在应用设置中开启了”去除品牌 Logo”(remove logo)功能。用户预期收到不包含 Dify Logo 的纯内容邮件,但实际邮件底部仍然显示了品牌 Logo。

报错原文

这不是一个运行时错误,而是预期行为与实际行为不符。核心逻辑缺失点位于以下代码路径:

dispatch_human_input_email_task 函数
- 路径:api/tasks/mail_human_input_delivery_task.py
- 行为:直接将用户配置的 Markdown 内容渲染为 HTML 后,通过 mail.send() 发送
- 缺少:未读取租户的 remove_webapp_brand 配置

对比系统邮件(例如密码重置、邀请邮件):
- 路径:api/libs/email_i18n.py (EmailI18nService)
- 行为:根据 remove_webapp_brand 标志选择带品牌/无品牌的模板集
- 存在:并行维护了带品牌和无品牌的邮件模板

原因分析

这是一个架构层面的设计缺失。系统邮件(如密码重置、邀请通知等)通过 EmailI18nService 层处理,该服务会根据租户的 custom_configremove_webapp_brand 标志选择对应模板——分为带品牌和无品牌两套模板。然而,人工审批节点的邮件通知走的是完全不同的邮件管道:

  • 直接发送: dispatch_human_input_email_task 函数直接将用户配置的 Markdown 内容渲染为 HTML 后,调用 mail.send() 发送邮件。
  • 跳过品牌检查: 该流程根本没有读取租户的 custom_config,也没有检查 remove_webapp_brand 标志。
  • 不使用模板: 人工审批邮件完全不使用任何模板文件,直接传递用户渲染后的内容,因此无法应用品牌/无品牌模板切换逻辑。

环境排查

  • Dify 版本:1.14.2(该问题被确认的版本)
  • 部署方式:Self Hosted (Docker)
  • 受影响功能:工作流 → 人工审批节点 → 发送邮件通知
  • 相关代码文件:
    • api/tasks/mail_human_input_delivery_task.py
    • api/core/workflow/human_input_adapter.py
    • api/libs/email_i18n.py
    • api/extensions/ext_mail.py
    • api/models/account.py

解决步骤

注意:以下解决方案基于 Issue 中开发者的分析,属于修复方向,尚未提供具体的补丁。在官方修复发布之前,可以按以下思路进行手动修复或等待更新。

  1. 获取租户配置:修改 dispatch_human_input_email_task 函数,在发送邮件前从 custom_config 中读取当前租户的 remove_webapp_brand 设置。相关代码参考 api/models/account.py 中的配置获取逻辑。
  2. 路由到品牌感知层:根据 remove_webapp_brand 的值,将邮件内容路由到现有的 EmailI18nService 进行模板选择,或者将用户配置的内容包裹到带品牌/无品牌的模板中。具体做法是:
    • 如果 remove_webapp_brand = True,则移除 Dify Logo 相关 HTML。
    • 如果 remove_webapp_brand = False(默认值),则保留现有行为(带 Logo)。
  3. 修改发送链路:确保 mail.send() 调用之前,邮件内容已经过品牌处理,而不是直接传递用户渲染后的原始 HTML。

可优先尝试的临时方案:如果你熟悉 Dify 的代码,可以手动修改 api/tasks/mail_human_input_delivery_task.py,在发送邮件前获取租户配置并移除 Logo。但请注意,这需要自行维护代码,官方更新后可能会覆盖。

验证方法

修复前:在工作流中配置人工审批节点并触发邮件通知,收到的邮件底部显示 Dify Logo。

修复后:重新触发同样的工作流,发送的邮件底部不应再包含 Dify Logo 及相关品牌元素。检查邮件 HTML 源代码,确保没有 <img> 标签引用 Dify Logo 图片。

参考来源

langgenius/dify #37434

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18344

发表回复

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