remove logo feature not work in human input email notification

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

remove logo feature not work in human input email notification

remove logo feature not work in human input email notification

快速结论:在 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
文章: 7850

发表回复

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