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

Google Sheets邮件发送脚本报错:MailApp.sendEmail参数不匹配

问题:MailApp.sendEmail 参数不匹配报错,无法从Google Sheets单元格获取邮箱发送邮件

问题描述

我编写了一个从Google Sheet中获取数据发送邮件的脚本,其余功能正常,但使用从表格获取的emailAddress作为收件人调用MailApp.sendEmail时,出现报错:

parameters (number[],String,String) does not correspond to the signature of the method for MailApp.sendEmail

直接输入邮箱字符串则可正常发送,请问为何无法向表格中的用户正常发送邮件?

我的代码

function sendEmails() { 
var foglio = SpreadsheetApp.getActiveSheet(); 
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getRange("G21"); 
var nomeRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B21"); 
var cognomeRange = SpreadsheetApp.getActiveSpreadsheet().getRange("C21"); 
var nomeaddettoRange = SpreadsheetApp.getActiveSpreadsheet().getRange("D21"); 
var numeroRange = SpreadsheetApp.getActiveSpreadsheet().getRange("E21"); 
var emailaddettoRange = SpreadsheetApp.getActiveSpreadsheet().getRange("H21"); 
var noteRange = SpreadsheetApp.getActiveSpreadsheet().getRange("F21"); 
var emailAddress = emailaddettoRange.getValues(); 
var nome = nomeRange.getValues(); 
var cognome = cognomeRange.getValues(); 
var nomeaddetto = nomeaddettoRange.getValues(); 
var numero = numeroRange.getValues(); 
var email = emailRange.getValues(); 
var note=noteRange.getValues(); 
var subject = 'Un cliente ti ha cercato oggi!'; 
var message = 'Ciao ' + nomeaddetto + ', \n\n' + 'oggi ha chiamato il/la sig./ra ' + nome + ' '+ cognome+ ' il suo numero di ricontatto è '+ numero + ' e la sua mail è ' + email +'.'+' Ha detto che ' + note; 
MailApp.sendEmail(emailAddress, subject, message); 
SpreadsheetApp.flush(); 
}

解答

Hey Andrea, the issue here is super straightforward once you spot it—you're using getValues() instead of getValue() for your single-cell ranges!

Let me break it down:

  • getValues() returns a 2D array even when you target a single cell. For example, if H21 contains maria@example.com, emailaddettoRange.getValues() will give you [["maria@example.com"]], not just the plain string email address.
  • MailApp.sendEmail() expects the first parameter to be a string (or a simple array of strings) for recipients, but right now you're passing a nested array. That's exactly why you're getting the "parameter signature mismatch" error—Google Apps Script is seeing an array where it expects a string value.

修复后的代码

Just replace all instances of getValues() with getValue() since each of your ranges targets a single cell:

function sendEmails() { 
var foglio = SpreadsheetApp.getActiveSheet(); 
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getRange("G21"); 
var nomeRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B21"); 
var cognomeRange = SpreadsheetApp.getActiveSpreadsheet().getRange("C21"); 
var nomeaddettoRange = SpreadsheetApp.getActiveSpreadsheet().getRange("D21"); 
var numeroRange = SpreadsheetApp.getActiveSpreadsheet().getRange("E21"); 
var emailaddettoRange = SpreadsheetApp.getActiveSpreadsheet().getRange("H21"); 
var noteRange = SpreadsheetApp.getActiveSpreadsheet().getRange("F21"); 
// 用getValue()获取单个单元格的纯值,而非数组
var emailAddress = emailaddettoRange.getValue(); 
var nome = nomeRange.getValue(); 
var cognome = cognomeRange.getValue(); 
var nomeaddetto = nomeaddettoRange.getValue(); 
var numero = numeroRange.getValue(); 
var email = emailRange.getValue(); 
var note=noteRange.getValue(); 
var subject = 'Un cliente ti ha cercato oggi!'; 
var message = 'Ciao ' + nomeaddetto + ', \n\n' + 'oggi ha chiamato il/la sig./ra ' + nome + ' '+ cognome+ ' il suo numero di ricontatto è '+ numero + ' e la sua mail è ' + email +'.'+' Ha detto che ' + note; 
MailApp.sendEmail(emailAddress, subject, message); 
SpreadsheetApp.flush(); 
}

额外优化小建议

You can also clean up your code a bit to make it more efficient and readable:

function sendEmails() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); // 只获取一次活动表格,避免重复调用
var foglio = ss.getActiveSheet(); 
var emailRange = ss.getRange("G21"); 
var nomeRange = ss.getRange("B21"); 
var cognomeRange = ss.getRange("C21"); 
var nomeaddettoRange = ss.getRange("D21"); 
var numeroRange = ss.getRange("E21"); 
var emailaddettoRange = ss.getRange("H21"); 
var noteRange = ss.getRange("F21"); 

var emailAddress = emailaddettoRange.getValue(); 
var nome = nomeRange.getValue(); 
var cognome = cognomeRange.getValue(); 
var nomeaddetto = nomeaddettoRange.getValue(); 
var numero = numeroRange.getValue(); 
var email = emailRange.getValue(); 
var note=noteRange.getValue(); 

var subject = 'Un cliente ti ha cercato oggi!'; 
// 使用模板字符串让消息格式更清晰
var message = `Ciao ${nomeaddetto}, 

oggi ha chiamato il/la sig./ra ${nome} ${cognome}
Il suo numero di ricontatto è ${numero} e la sua mail è ${email}.
Ha detto che: ${note}`; 

MailApp.sendEmail(emailAddress, subject, message); 
SpreadsheetApp.flush(); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:53:12