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

Google Sheets脚本调用MailApp.sendEmail添加附件时报参数不匹配异常

报错原因分析
  • 核心原因是MailApp.sendEmail传入的第一个收件人参数类型不匹配:你传入的patientEmails[i]是number[](数字数组)类型,不符合接口要求的「字符串/字符串数组」格式。仅传前三个参数时接口存在隐式类型兼容逻辑可以正常执行,新增第四个配置参数后接口参数校验规则更严格,类型不匹配就会直接抛出方法签名不匹配的异常。
  • 次要潜在问题:代码没有校验DriveApp.getFilesByName的返回结果是否存在匹配文件,直接调用next()方法,如果云盘内不存在对应名称的PDF,后续会抛出没有可迭代元素的运行时错误。
修复步骤
  1. 修正收件人参数的取值逻辑:patientEmails是getValues()返回的二维数组,patientEmails[i]取到的是第i行的整行数组,需要取对应列的单个值再转为字符串格式,示例:
// 假设邮箱存储在每行的第一列,取第一个元素再转字符串
var emailAddress = patientEmails[i][0].toString();
  1. 补充文件存在性校验:
var file1 = DriveApp.getFilesByName("why abilix.PDF");
// 校验是否存在匹配文件
if (!file1.hasNext()) {
  throw new Error("云盘内未找到指定名称的PDF文件");
}
var pdfAttachment = file1.next().getAs(MimeType.PDF);
  1. 完整可运行的修改后代码:
var file1 = DriveApp.getFilesByName("why abilix.PDF");
if (!file1.hasNext()) {
  throw new Error("云盘内未找到指定名称的PDF文件");
}
var pdfAttachment = file1.next().getAs(MimeType.PDF);

var emailBody = textTemplate[0][0].replace("{patient.name}",patientNames[i][0])
                            .replace("{stage}",phase[j]);
// 修正收件人取值
var emailAddress = patientEmails[i][0].toString();

MailApp.sendEmail(emailAddress, subject, emailBody, {
  name: 'Automatic Emailer Script',
  attachments: [pdfAttachment]
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:00:02