Apps Script中MailApp.sendEmail传数组收件人报错求助
解决MailApp.sendEmail参数不匹配的报错
这个问题我太熟悉了!你碰到的报错核心就是参数类型不匹配,咱们来一步步拆解:
为什么会报错?
报错提示:
Exception: The parameters (number[],String,String,(class)) don't match the method signature for MailApp.sendEmail.
这里的关键是number[]——你传给sendEmail的收件人列表email_list_S1是一个数字数组,但MailApp.sendEmail要求收件人参数必须是:
- 单个邮箱字符串,或者
- 逗号分隔的多邮箱字符串,或者
- 字符串类型的邮箱数组
你的email_list_S1是通过map(elem => elem[0])生成的,这里elem[0]对应的单元格值被Google Sheets识别成了数字类型(比如邮箱格式被误解析,或者单元格是空值自动转成了数字),导致最终数组不符合方法要求。
两种可行的解决方案
方案1:强制将每个邮箱转为字符串类型
修改生成email_list_S1的代码,在map时把每个元素强制转成字符串:
var email_list_S1 = data2.filter(function(item){ return item[15]=="ON" && item[9]=="S1" && item[436] ==""; }).map(elem => String(elem[0])); // 用String()强制转换为字符串类型
方案2:转成你已经验证可行的逗号分隔字符串
如果转字符串数组还是有问题,可以直接把数组拼接成你之前用的逗号分隔格式:
var email_list_S1 = data2.filter(function(item){ return item[15]=="ON" && item[9]=="S1" && item[436] ==""; }).map(elem => String(elem[0])).join(','); // 拼接为逗号分隔的字符串
验证效果
修改后,email_list_S1要么是符合要求的字符串数组,要么是你已经确认可行的逗号分隔字符串,就能顺利调用MailApp.sendEmail啦!
内容的提问来源于stack exchange,提问作者Mask
相关产品推荐
相关产品推荐

