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

使用Google Apps Script发送邮件时Gmail换行正常但Outlook存在异常的统一解决方案问询

解决Gmail与Outlook邮件换行不一致的问题

问题背景

你遇到的是典型的邮件客户端纯文本渲染差异问题——Gmail对\n(Unix风格换行)支持很好,但Outlook有时候会把单独的\n忽略掉,尤其是当内容里的换行格式不统一时。虽然你说所有表格格式逻辑一致,但单元格区域(1,16)的内容可能存在隐藏的换行符差异(比如有些单元格用了\r\n,有些用了\n),这就导致Outlook处理这个区域时出了问题。

下面是几个简单有效的解决方法,按推荐程度排序:

1. 改用HTML格式发送邮件(最可靠)

HTML格式的邮件兼容性是最好的,因为所有主流邮箱都会严格按照HTML标准渲染内容,不会出现纯文本的换行解析差异。你只需要把原来的换行符\n替换成HTML的换行标签<br>,然后用htmlBody参数发送邮件:

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet4=ss.getSheetByName('Copy');
var emailAddress = sheet4.getRange(2,12).getValue();
var subject = sheet4.getRange(2,13).getValue();

// 封装一个工具函数,把单元格区域转换成带HTML换行的字符串
function convertToHtmlLines(range) {
  return range.getValues().map(row => row[0]).join('<br>');
}

// 构建HTML内容,用<br>分隔各个部分
var htmlMessage = convertToHtmlLines(sheet4.getRange(1,15,sheet4.getRange(31,15).getValues(),1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,14,3,1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,16,sheet4.getRange(31,16).getValues(),1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,14,3,1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,17,sheet4.getRange(31,17).getValues(),1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,14,3,1))
+ '<br>' + convertToHtmlLines(sheet4.getRange(1,18,sheet4.getRange(31,18).getValues(),1));

// 发送邮件,同时提供纯文本版本作为 fallback(兼容不支持HTML的邮箱)
MailApp.sendEmail({
  to: emailAddress,
  subject: subject,
  htmlBody: htmlMessage,
  body: htmlMessage.replace(/<br>/g, '\n') // 把HTML换行转成纯文本换行
});

2. 统一使用Windows风格换行符\r\n

如果不想改用HTML,那可以把所有的.join('\n')改成.join('\r\n')——Outlook作为微软的产品,对Windows标准的换行(回车+换行)支持远好于单独的\n,而Gmail也能正确识别\r\n:

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet4=ss.getSheetByName('Copy');
var emailAddress = sheet4.getRange(2,12).getValue();
var subject = sheet4.getRange(2,13).getValue();

// 把所有join的换行符换成\r\n
var message = sheet4.getRange(1,15,sheet4.getRange(31,15).getValues(),1).getValues().join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ sheet4.getRange(1,16,sheet4.getRange(31,16).getValues(),1).getValues().join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ sheet4.getRange(1,17,sheet4.getRange(31,17).getValues(),1).getValues().join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ sheet4.getRange(1,18,sheet4.getRange(31,18).getValues(),1).getValues().join('\r\n');

MailApp.sendEmail(emailAddress, subject, message);

3. 标准化单元格内的换行符

如果上面的方法还是不行,那大概率是单元格区域(1,16)的内容本身存在换行符不一致的情况(比如有些单元格用了\n,有些用了\r或者没有换行)。你可以先统一处理这个区域的换行符:

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet4=ss.getSheetByName('Copy');
var emailAddress = sheet4.getRange(2,12).getValue();
var subject = sheet4.getRange(2,13).getValue();

// 处理区域(1,16)的内容,把所有类型的换行符统一成\r\n
var range16Values = sheet4.getRange(1,16,sheet4.getRange(31,16).getValues(),1).getValues()
  .map(row => row[0].replace(/\r?\n/g, '\r\n'));

// 拼接消息时使用处理后的区域值
var message = sheet4.getRange(1,15,sheet4.getRange(31,15).getValues(),1).getValues().join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ range16Values.join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ sheet4.getRange(1,17,sheet4.getRange(31,17).getValues(),1).getValues().join('\r\n')
+ sheet4.getRange(1,14,3,1).getValues().join('\r\n')
+ sheet4.getRange(1,18,sheet4.getRange(31,18).getValues(),1).getValues().join('\r\n');

MailApp.sendEmail(emailAddress, subject, message);

总结

优先推荐用HTML格式发送邮件,这能从根本上解决不同邮箱客户端的渲染差异问题。如果坚持用纯文本,那统一使用\r\n作为换行符基本就能解决Outlook的换行问题。

内容的提问来源于stack exchange,提问作者Spencer Chou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:42:27