You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Google App Script中更新含多action参数的Mailgun路由?

解决Google Apps Script中Mailgun路由多Action参数的问题

我帮你定位到问题根源了!问题出在Google Apps Script的UrlFetchApp处理数组参数的默认逻辑上。

你看,在curl和Python里,传递多个action参数时,是直接重复action=xxx的键值对,比如:

action=forward%28%22testing%40gmail.com%22%29&action=stop%28%29

但当你在GAS里把数组赋值给action键时,UrlFetchApp会自动把它编码成带[]后缀的格式,变成:

action[]=forward(...)=&action[]=stop()

而Mailgun的API并不识别这种带后缀的参数格式,所以才会报错。

解决方案:手动构建Payload字符串

你需要手动拼接符合API要求的表单数据字符串,而不是用对象来传递参数。修改后的代码如下:

var fwd = "testing@gmail.com"; // 替换成你的目标邮箱
var address = "forward" + "(" + '"' + fwd + '"' + ")";
var stp = "stop()";
// 手动拼接多个action参数,用&分隔,同时编码特殊字符
var payload = "action=" + encodeURIComponent(address) + "&action=" + encodeURIComponent(stp);

var base = "https://api.mailgun.net/v3/routes/";
var url = base + routeID;
var options = {
  "method": "put",
  "payload": payload,
  "headers": { 
    Authorization: 'Basic ' + Utilities.base64Encode("api:" + MAILGUN_KEY) 
  },
  // 明确指定内容类型,和curl请求保持一致
  "contentType": "application/x-www-form-urlencoded"
};

// 执行请求并查看响应
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());

为什么这样可行?

  • 手动拼接的字符串完全匹配curl请求中的-d参数格式,每个action参数都重复出现,完美符合Mailgun API的预期。
  • encodeURIComponent()会自动处理括号、引号、@这类特殊字符,避免出现编码错误导致API解析失败。
  • 显式设置contentType让服务器明确知道这是表单编码的数据,和你之前的curl/Python请求逻辑完全对齐。

这样修改后,你的GAS脚本应该就能像Python和curl一样正常更新带有多个action的Mailgun路由了。

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

火山引擎 最新活动