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

Apps Script发送HTML邮件时如何实现Spreadsheet单元格内容换行

问题根因

Google Apps Script HTML模板的<?= 变量 ?>输出语法默认会对内容中的HTML特殊字符做转义处理,你手动拼接的<br />标签会被转义为普通文本实体,最终在邮件里以明文形式显示,无法被解析为HTML换行标签。

解决方案

两种方案选其一即可,优先选第一种,稳定性更高:

  • 方案1(推荐):利用现有CSS样式自动识别换行,无需手动替换标签
    你的HTML模板中承载cmess内容的p标签已经添加了white-space:pre-line;样式,该样式原生支持将文本中的\n换行符直接渲染为页面换行,完全不需要额外把换行符替换为<br />。
    操作步骤:

    1. 删除冗余的splitTest()函数
    2. 移除sendMail()函数中调用splitTest、用<br />拼接数组的逻辑,直接读取Settings工作表B4的原始文本赋值给模板变量即可
    3. 模板中保持<?= cmess ?>的写法不变,默认的转义逻辑还能避免文本中的特殊字符破坏邮件HTML结构
  • 方案2:改用非转义模板输出语法
    如果你坚持要手动拼接<br />标签实现换行,只需要把HTML模板中输出cmess的代码从<?= cmess ?>修改为<?!= cmess ?>即可。语法中增加的感叹号代表强制不转义输出内容,你拼接的<br />标签会被正常解析为HTML元素。

    注意:该方案下如果文本中包含未处理的HTML特殊字符,可能导致邮件排版错乱,非必要不选。

修正后核心代码(方案1)

function sendMail() {
  var ename = 3; // 字段对应列号,首列从0开始计数
  var cname = 2;
  var email = 5;
  var emailTemp = HtmlService.createTemplateFromFile("email");
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Recipients");
  var wsSettings = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings");
  var name = wsSettings.getRange("B2").getValue();
  var subject = wsSettings.getRange("B1").getValue();
  // 直接读取带原始换行符的文本,无需额外替换
  var cMessage = wsSettings.getRange("B4").getValue();
  var data = ws.getRange("A2:G" + ws.getLastRow()).getValues();
  data = data.filter(function(r){ return r[6] == true}); // 筛选勾选了复选框的收件人
  data.forEach(function(row){
    emailTemp.cmess = cMessage;
    var htmlMessage = emailTemp.evaluate().getContent();
    GmailApp.sendEmail(
      row[email],
      subject,
      "Bitte öffnen Sie das Html-Format,um die Email zu lesen, Danke!",
      {
        name: name,
        htmlBody: htmlMessage
      }
    );
  }); 
};

HTML模板无需任何修改,原有样式和输出逻辑可以直接复用。


内容的提问来源于stack exchange,提问作者Chinese Formosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:21:39