Google App Script发送邮件时正文显示[object Object]问题求助
问题原因
邮件正文显示[object Object]的核心问题是**MailApp.sendEmail参数传递错误**:
- 你把
{htmlBody:output}这个对象当成了纯文本正文参数传入,但sendEmail的第三个参数默认接收字符串类型的纯文本内容,对象被强制转换为字符串后就会显示[object Object]。 - 你定义的
senderName、cc、replyto参数在sendEmail函数里未被使用,这些邮件配置也没生效。
解决方法
修改sendEmail函数的调用逻辑,使用MailApp.sendEmail的配置对象重载形式,把所有邮件相关配置整合到一个对象中传递。
修改后的完整代码:
function sendEmails(){ const ss= SpreadsheetApp.getActiveSpreadsheet(); const sheet= ss.getActiveSheet(); const sheetValues = sheet.getDataRange().getValues(); const html= HtmlService.createTemplateFromFile('template'); const output = html.evaluate().getContent(); Logger.log(output); for(let i = 1; i < sheetValues.length; i++){ const row= sheetValues[i]; const senderName = 'TEST EMAIL'; const replyto = 'matias.saldana92@gmail.com'; const cc =''; const subject = "April's Newsletter"; const firstName=row[1]; const lastName=row[2]; const recipientEmail=row[3]; // 整合所有邮件配置为一个对象 const emailOptions = { htmlBody: output, name: senderName, replyTo: replyto, cc: cc }; const sendEmailtoCostumer=sendEmail(subject,recipientEmail,emailOptions) sheet.getRange(i + 1,6,1,1).setValue(sendEmailtoCostumer); } } function sendEmail(subject,recipientEmail,emailOptions){ try{ // 使用配置对象形式调用sendEmail MailApp.sendEmail({ to: recipientEmail, subject: subject, ...emailOptions // 展开所有配置选项 }); const date = Utilities.formatDate(new Date(),'GMT-04:00','MM/dd/yyyy h:mm a'); return 'Newsletter Sent on ' + date; } catch(error){ return error.message; } }
关键改动说明
- 重构
sendEmail函数参数,仅传递必要的subject、recipientEmail和整合后的emailOptions配置对象。 - 调用
MailApp.sendEmail时传入包含所有选项的配置对象,确保htmlBody被正确识别为HTML邮件正文,同时让senderName、replyto、cc配置生效。 - 移除了原来错误的
emailbody对象,避免将对象当作纯文本参数传递。
内容的提问来源于stack exchange,提问作者Matias Saldaña
相关产品推荐
相关产品推荐

