需先注册Mailgun企业账户获取API密钥与Signing Key,配置Webhook监听clicked事件,并在Dify中用代码组件生成带HMAC签名的动态按钮URL,再通过HTTP请求节点调用Mailgun API发送HTML邮件。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

开通Mailgun账户并获取API密钥
要在Dify中发送带动态交互按钮的邮件,必须先让Mailgun支持HTML邮件+Webhook回传能力,否则按钮点击后无法触发后续动作。
访问 https://www.mailgun.com/ 注册企业邮箱(个人免费版仅限sandbox域名,且每日限100封)。
登录后进入 Dashboard → Domains → 点击默认生成的 sandbox 域名(如 sandbox1234567890abcdef.mailgun.org)→ 复制 Domain Name 和 Default SMTP Login。
在左侧菜单选择 “Settings” → “API Keys”,点击 “Generate New Key”,记下 Private API Key ——该密钥将用于Dify后端调用,泄露即等同于邮箱控制权丢失。
配置Mailgun Webhook接收点击事件
动态按钮本质是嵌入邮件中的带签名URL,用户点击后由Mailgun转发POST请求到你指定的端点。没有这步,按钮就是纯静态图片。
进入 Mailgun 控制台 → Domains → 选中你的生产域名(非sandbox)→ Webhooks → 点击 “Add Webhook”。
Event Type 选择 clicked → URL 填写你已部署的接收接口地址(如 https://yourapp.com/api/mailgun/click),确保该接口能解析 application/x-www-form-urlencoded 格式数据。
勾选 “Enable signing key”,Mailgun会自动生成 Signing Key。这一步不可跳过,否则无法验证请求来源是否真实来自Mailgun,第三方伪造点击将直接绕过校验。
在Dify中创建含按钮的HTML邮件模板
Dify不提供可视化邮件编辑器,所有交互逻辑必须靠代码块注入HTML + 必要的URL签名参数。
方法一:使用「代码」组件拼接HTML字符串
输入变量:recipient_email、user_id、action_type(如 "accept" 或 "decline");
代码块内写:
import hmac, hashlib, base64, time
def generate_signature(email, user_id, action):
timestamp = str(int(time.time()))
to_sign = f"{email}|{user_id}|{action}|{timestamp}"
sig = hmac.new(b"YOUR_MAILGUN_SIGNING_KEY", to_sign.encode(), hashlib.sha256).digest()
return f"{base64.urlsafe_b64encode(sig).decode().rstrip('=')}.{timestamp}"
sig = generate_signature(recipient_email, user_id, action_type)
button_url = f"https://yourapp.com/api/confirm?e={recipient_email}&u={user_id}&a={action_type}&s={sig}"
html = f'''<div style="font-family: sans-serif;">
<p>您好,这是一封测试邮件。</p>
<button onclick="window.location.href='{button_url}'" style="background:#007bff;color:white;border:none;padding:10px 20px;border-radius:4px;cursor:pointer;">立即确认</button>
</div>'''
return html
方法二:用「文本」组件硬编码HTML(仅限固定内容)
直接输入完整HTML,其中按钮链接需提前用Mailgun官方工具生成带签名的URL(推荐使用其 https://documentation.mailgun.com/en/latest/user_manual.html#tracking-clicks 提供的签名生成器)。
配置Dify邮件发送节点调用Mailgun API
在Dify工作流中添加「HTTP请求」组件,而非内置“电子邮件”组件——后者不支持自定义Header与签名验证字段。
第一步:设置请求URL → https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages(将 YOUR_DOMAIN_NAME 替换为你的实际Mailgun域名)
第二步:设置Headers → 添加两行:
Authorization: Basic base64_encode("api:YOUR_PRIVATE_API_KEY")
Content-Type: application/x-www-form-urlencoded
第三步:设置Body(x-www-form-urlencoded格式):
from → your@verified-domain.com(必须是Mailgun已验证的发件人)
to → {{recipient_email}}
subject → {{email_subject}}
html → {{generated_html}}(来自上一步代码组件输出)
o:tracking → true(启用Mailgun点击追踪)
o:tracking-clicks → true
第四步:检查响应体是否含 "message": "Queued. Thank you." 字样,不是200就说明API密钥错误或域名未验证。











