使用Google Sheets与App Script实现邮件正确格式化的方法
解决Google Sheets批量发送邮件格式丢失(纯文本)问题
你的代码发送纯文本邮件是因为MailApp.sendEmail的默认调用仅支持纯文本内容。要保留邮件格式,需要改用支持HTML格式的调用方式,同时正确获取Sheet中带格式的内容。
修改步骤:
- 原代码用
getValue()只能提取单元格的纯文本,需换成getRichTextValue().getHtmlContent()获取单元格的HTML格式内容 - 调用
MailApp.sendEmail时添加htmlBody参数,指定HTML格式的邮件内容,同时保留纯文本内容作为降级方案(适配不支持HTML的邮箱)
修改后的完整代码:
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName('Sheet1'); var sheet2 = ss.getSheetByName('Sheet2'); var subject = sheet2.getRange(2,1).getValue(); // 获取HTML格式的邮件模板 var messageTemplateHtml = sheet2.getRange(2,2).getRichTextValue().getHtmlContent(); var n = sheet1.getLastRow(); for (var i = 2; i < n+1 ; i++){ var emailAddress = sheet1.getRange(i,2).getValue(); var name = sheet1.getRange(i,1).getValue(); // 替换HTML模板中的占位符 var messageHtml = messageTemplateHtml.replace("<name>", name); // 发送支持HTML格式的邮件,同时生成纯文本版本作为 fallback MailApp.sendEmail({ to: emailAddress, subject: subject, body: messageTemplateHtml.replace("<name>", name).replace(/<[^>]+>/g, ''), // 移除HTML标签得到纯文本 htmlBody: messageHtml }); } }
注意事项:
- 确保Sheet2的邮件模板单元格(B2)是用Google Sheets的富文本格式编辑的(比如加粗、换行、字体样式等)
- 如果模板里包含复杂占位符或特殊字符,可能需要调整替换逻辑,但基础的
<name>占位符替换可正常工作
内容的提问来源于stack exchange,提问作者Abhilash Mukund Nayak
相关产品推荐
相关产品推荐

