如何在Google Apps Script中优化GmailApp发信代码可读性及修复HTML加粗失效问题
问题原因
- 你代码里写的
<b>是HTML转义字符,会被直接渲染为<b>文本,不会被解析为加粗标签 - 拼接了加粗标签的内容仅传入了
GmailApp.sendEmail的第三个纯文本参数,你提前定义的html变量和htmlBody配置完全没有用到,邮件客户端默认按纯文本解析内容,自然不会渲染HTML样式 - 邮件发送相关的参数定义分散,重复声明了
option、options两个配置对象,逻辑混乱
修复方案
1. 调整内容拼接逻辑
把转义的<b>、</b>替换为原生的<b>、</b>,同时分别准备纯文本版本和HTML版本的邮件内容,兼顾不支持HTML的邮件客户端。
2. 重构邮件发送代码
合并邮件配置参数,统一传入sendEmail方法的第四个高级参数,明确传入htmlBody配置开启HTML渲染。
修正后完整代码
// 提前声明变量避免变量提升问题 let send = 0; let messageText = ''; // 纯文本版本内容 let messageHtml = ''; // HTML版本内容 // 拼接回答内容 const question = itemResponse.getItem().getTitle(); const answer = itemResponse.getResponse(); // 纯文本内容不需要加粗标签,保留换行 messageText += `${i + 1}. ${question}: ${answer}\n`; // HTML内容插入<b>标签,换行后续统一替换为<br> messageHtml += `${i + 1}. <b>${question}</b>: ${answer}\n`; if(answer === 'English') send = 1; if(answer === 'Japanese') send = 2; // 邮件公共配置 const EMAIL_CONFIG = { from: 'myemail@gmail.com', adminAddress: 'myemail@gmail.com', title: '【incoming】Notification' } // 拼接完整邮件内容 const plainContent = `確認してください。The form was submitted with the following contents.\n\n${question}\n${messageText}`; const htmlContent = `確認してください。The form was submitted with the following contents.<br><br>${question}<br>${messageHtml.replace(/\n/g, '<br>')}`; // 发送逻辑 if(send === 1){ GmailApp.sendEmail( EMAIL_CONFIG.adminAddress, EMAIL_CONFIG.title, plainContent, { from: EMAIL_CONFIG.from, htmlBody: htmlContent } ); }
效果说明
修改后htmlBody参数会被Gmail识别为邮件的HTML版本,其中的<b>标签会被正常渲染为加粗效果,同时保留了纯文本版本的内容作为降级方案,兼容性更好。邮件发送的所有配置都集中到了EMAIL_CONFIG对象中,参数按sendEmail方法的入参顺序排列,可读性大幅提升。
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

