GmailApp.sendEmail传入html对象后主题与正文丢失问题咨询
问题根因
你遇到的主题、正文丢失问题,基本是以下几个原因导致的:
- 代码存在语法错误:你提供的复现代码中,
sendEmails_22nd函数末尾缺少闭合大括号,整个脚本会抛出语法解析错误。如果你的代码中加了错误捕获没有把异常抛出,运行时作用域错乱会导致传入sendEmail的主题、正文参数实际为undefined,最终发出的邮件缺失对应字段。 - 参数错位:
GmailApp.sendEmail的位置传参顺序是固定的(recipient, subject, body, options),如果你实际写代码时不小心把存HTML配置的options对象提前到了subject、body的位置,会导致参数解析完全错乱,主题、正文字段无法被正确读取。补充:该方法也支持传入单个对象作为参数,这种写法必须显式声明
to/subject/body/htmlBody等字段,漏写就会丢失对应内容。 - HTML正文逻辑理解错误:只要传入
htmlBody配置,支持HTML的邮件客户端就会优先渲染该字段内容作为正文,你当前代码里htmlBody只传了签名内容,没有把firstBody/secondBody的通知正文拼接进去,打开邮件只能看到签名,会误以为正文丢失。 - HTML语法瑕疵:你写的签名中,电话号码的a标签属性之间缺少空格,
"color:rgb(17,85,204)"target="_blank"这段里引号后直接跟了target属性,可能触发部分邮件客户端的内容过滤,导致正文渲染异常。
修复方案
- 先补全代码语法:给
sendEmails_22nd函数补上缺失的闭合大括号,先排除基础语法问题。 - 校验参数顺序:如果用位置传参,严格按照
收件人→主题→纯文本正文→配置对象的顺序传参;如果用对象形式传参,必须写全所有必填字段。 - 补全HTML正文内容:把纯文本正文的换行符替换为
<br>标签后,和签名拼接再传入htmlBody,保证HTML客户端能看到完整内容,参考代码:
// 把纯文本正文转成适配HTML的格式,和签名拼接 const htmlBody7th = firstBody.replace(/\n/g, '<br>') + '<br><br>' + signature; GmailApp.sendEmail(emails[i], subject, firstBody, {htmlBody: htmlBody7th});
- 修复HTML语法问题:给a标签的属性之间补上缺失的空格,避免被客户端判定为异常内容过滤。
内容的提问来源于stack exchange,提问作者Apalila
相关产品推荐
相关产品推荐

