You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ColdFusion的CfHttp配置Mailgun API发送邮件?

解决ColdFusion CfHttp调用Mailgun API的参数传递问题

你的核心问题出在数据传递的位置和格式错误,以下是具体分析和修正方案:

关键结论

  • Python里的data=data对应ColdFusion中**type="body"的<cfhttpparam>,所有请求参数必须放在请求体**中,而非请求头。
  • 手动拼接JSON字符串极易引发格式错误,应该用ColdFusion结构体构建数据,再通过serializeJSON()生成标准JSON。

你的代码问题分析

  1. 错误将请求数据放入请求头:你把data放到了名为data的请求头里,Mailgun API只会读取请求体中的参数,因此提示from parameter is missing。
  2. JSON格式构建错误:手动拼接的mailgun_variables和data字符串存在转义隐患,且serializeJSON(data)会把已经是字符串的data再次序列化,生成双重转义的无效JSON。

修正后的代码

// 用结构体构建嵌套的Mailgun变量
mailgunVariables = {
    company_id: 1008,
    company_contact: "Joe Smith",
    random_key: "91A303C8-91FB-AA1D-DE07F18782594721"
};

// 构建完整的请求参数结构体
mainData = {
    from: "email@domain.com",
    to: "email@domain.com",
    subject: "Subject line",
    template: "welcome",
    "o:tag": ["welcome", "welcome-countdown", "welcome-alt", "coldfusion"],
    // Mailgun要求h:X-Mailgun-Variables的值是JSON字符串,所以单独序列化
    "h:X-Mailgun-Variables": serializeJSON(mailgunVariables)
};
<cfhttp url="https://api.mailgun.net/v3/domain.com/messages"
        method="POST"
        username="api"
        password="APIKEY"
        result="response">
    <!-- 指定请求内容类型为JSON -->
    <cfhttpparam type="header" name="Content-Type" value="application/json" />
    <!-- 将序列化后的JSON放入请求体 -->
    <cfhttpparam type="body" value="#serializeJSON(mainData)#" />
</cfhttp>

重要说明

  1. 结构体构建优势:用ColdFusion原生结构体定义数据,serializeJSON()会自动处理引号、数组、嵌套结构的格式,避免手动拼接的错误。
  2. 嵌套JSON字段处理:h:X-Mailgun-Variables需要传入JSON格式的字符串,因此要对嵌套的mailgunVariables单独执行serializeJSON(),再作为值放入主结构体。
  3. 验证请求体:可以临时添加writeDump(serializeJSON(mainData)); abort;查看生成的JSON是否符合Mailgun API要求。

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:54:32