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 containsmaria@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
相关产品推荐
相关产品推荐

