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

如何将Mailgun多附件cURL请求转换为Google Apps Script的UrlFetchApp实现

解决方法

核心逻辑

Google Apps Script 的 UrlFetchApp 原生支持 multipart/form-data 编码格式,当你在请求的 payload 中为 attachment 字段传入Blob对象数组时,它会自动生成多个同名的form字段,完全匹配Mailgun要求的多附件传参规则。你之前的尝试错误在于将Blob数组拼接为字符串,直接传递原始Blob数组即可生效。
如果需要自定义附件名称,只需要在获取Blob后调用.setName("自定义文件名.后缀")方法修改Blob名称即可,Mailgun会直接使用该名称作为邮件中展示的附件名。

完整实现代码

// 基础参数配置
const MAILGUN_API_KEY = "你的Mailgun API密钥";
const MAILGUN_DOMAIN = "你的Mailgun域名";
var email = {
  fromName: "发件人名称",
  fromEmail: "发件人邮箱",
  toEmail: "收件人邮箱",
  subject: "邮件主题",
  message: "邮件纯文本内容",
  htmlMessage: "邮件HTML内容",
  attachments: {
    file1: "1Xq63awYnOfSeL7fStkn0jWsou", // Google Drive文件ID
    file2: "1Iy96o9Tw9tvMw7VgZMzCA9mqm"
  }
};
// 构造基础请求参数
var params = {
  "from": email.fromName + " <" + email.fromEmail + ">",
  "to": email.toEmail,
  "subject": email.subject,
  "replyto": email.fromEmail,    
  "text": email.message,
  "html": email.htmlMessage,
};
// 处理多附件
if (Object.keys(email.attachments).length > 0) {
  var attachmentBlobs = [];
  for (const fileKey in email.attachments) {
    const fileId = email.attachments[fileKey];
    const file = DriveApp.getFileById(fileId);
    const blob = file.getBlob();
    // 如需自定义附件名,取消注释下面这行,修改文件名即可
    // blob.setName("自定义附件名_" + fileKey + "." + blob.getContentType().split("/")[1]);
    attachmentBlobs.push(blob);
  }
  // 直接把Blob数组赋值给attachment字段即可
  params.attachment = attachmentBlobs;
}
// 发送请求
var response = UrlFetchApp.fetch(
  "https://api.mailgun.net/v3/" + MAILGUN_DOMAIN + "/messages",
  {
    method: "POST",
    auth: "api:" + MAILGUN_API_KEY,
    payload: params,
    // 不要手动设置Content-Type头,让UrlFetchApp自动生成带boundary的正确值
    muteHttpExceptions: true // 可选,出错时返回错误信息方便调试
  }
);
// 打印返回结果方便调试
console.log(response.getResponseCode());
console.log(response.getContentText());

注意事项

  • 不要手动给请求设置Content-Type: multipart/form-data头,UrlFetchApp会自动识别payload中的Blob内容,生成带正确分隔boundary的请求头,手动设置反而会导致编码错误。
  • 确保你使用的Google账号对用到的Drive文件有至少查看权限。
  • 可以通过muteHttpExceptions参数开启调试,出错时可以查看Mailgun返回的具体错误信息排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:54:01