You need to enable JavaScript to run this app. GAS调用GmailApp.createDraft创建多附件草稿发送后仅重复显示首份附件问题
优惠活动
大模型
产品
解决方案
定价
更多

GAS调用GmailApp.createDraft创建多附件草稿发送后仅重复显示首份附件问题

GAS创建带多个PDF附件草稿后手动发送附件重复问题解决方案

根因说明

该问题是Google Apps Script调用GmailApp.createDraft()接口的已知适配问题:直接传入动态生成的Blob数组创建草稿时,Gmail前端解析附件时若未识别到每个Blob的唯一显式属性,会将所有附件判定为同一文件的重复副本,导致手动发送后仅保留首份附件内容。GmailApp.sendEmail()走后端直接发信逻辑,绕过了前端解析步骤,因此不会触发该问题。

修复方案

步骤1:优化Blob属性配置

给每个加密后的PDF Blob显式设置唯一文件名和标准MIME类型,避免Gmail识别冲突,修改后的附件生成代码如下:

// 提前初始化附件数组,省略循环内的判断逻辑
const docblob = [];
for( var i = 0 ; i < idsarray.length ; i++) {
  var pdfname = DriveApp.getFileById(idsarray[i]).getName();
  // 给文件名增加序号前缀,保证绝对唯一,避免重名文件导致的识别错误
  var uniquePdfName = `${i+1}_${pdfname}`;
  var blob = encryptpdf(idsarray[i], pdfname , email);
  // 显式覆盖Blob的属性,覆盖加密函数可能返回的默认属性
  blob = blob.setName(uniquePdfName).setContentType('application/pdf');
  docblob.push(blob);
}

步骤2:补全草稿创建参数

创建草稿时的参数结构要和sendEmail()的参数完全对齐,避免缺失字段触发Gmail的默认处理逻辑,修改后的草稿创建代码如下:

GmailApp.createDraft(
  email,
  "docs", // 不要留空主题字段,空主题会提升附件解析异常概率
  "",
  {
    attachments: docblob,
    htmlBody: body // 即使后续要修改正文,也先传入初始生成的正文,保持参数结构完整
  }
);

兜底方案

如果上述修改仍未解决问题,可先将加密后的PDF Blob暂存到Drive的临时目录,创建草稿时调用临时文件的getBlob()方法获取属性完整的Blob对象,草稿创建完成后删除临时文件即可,该方案可100%规避Blob识别异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 22:45:07