谷歌表格批量发送HTML邮件异常:仅显示主题与HtmlTemplate无正文
解决谷歌脚本批量发送动态HTML邮件仅显示“HtmlTemplate”的问题
问题核心
你的代码直接将HtmlTemplate对象传给了MailApp.sendEmail的第三个参数(纯文本正文位),导致对象被自动转为字符串"HtmlTemplate",而非渲染后的HTML内容。同时,循环内反复调用getRange会显著降低脚本执行效率。
修复方案
- 渲染HTML模板:调用
evaluate().getContent()将模板转为最终的HTML字符串 - 正确配置邮件参数:通过
sendEmail的配置选项传入htmlBody,而非直接用第三个参数 - 批量获取表格数据:一次性读取整表数据,减少API调用次数
修改后的完整代码
function sendEmail() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName('Sheet1'); // 批量获取所有数据,避免循环内反复调用getRange var data = sheet1.getDataRange().getValues(); var cc = "mohabyasser@gmail.com"; var subject = "Testmail"; // 从第2行开始遍历(跳过表头) for (var i = 1; i < data.length; i++) { var row = data[i]; var emailAddress = row[2]; // 第3列(索引从0开始) // 创建并填充模板 var template = HtmlService.createTemplateFromFile("email"); template.الاسم = row[1]; template.رقمالتليفون = row[3]; template.رقمالبطاقة = row[4]; template.المحكمة = row[5]; template.وجهةالسفرمنمحافظةيرجىكتابةمحافظةالاقامةفقط = row[6]; template.وجهةالسفرالىمحافظةيرجىكتابةمحافظةالعملفقط = row[7]; template.تاريخرحلةالسفرالأوليالأسبوعالأول = row[8]; template.ساعةرحلةالسفر1 = row[9]; template.تاريخرحلةالعودةالأوليالأسبوعالأول = row[10]; template.ساعةالرحلةالمطلوبةللعودة1 = row[11]; template.تاريخرحلةالسفرالثانيةالأسبوعالثاني = row[12]; template.ساعةالرحلةالمطلوبةللسفر2 = row[13]; template.تاريخرحلةالعودةالثانيةالأسبوعالثاني = row[14]; template.ساعةالرحلةالمطلوبةللعودة2 = row[15]; template.تاريخرحلةالسفرالثالثةالأسبوعالثالث = row[16]; template.ساعةالرحلةالمطلوبةللسفر3 = row[17]; template.تاريخرحلةالعودةالثالثةالأسبوعالثالث = row[18]; template.ساعةالرحلةالمطلوبةللعودة3 = row[19]; template.تاريخرحلةالسفرالرابعةالأسبوعالرابع = row[20]; template.ساعةالرحلةالمطلوبةللسفر4 = row[21]; template.تاريخرحلةالعودةالرابعةالأسبوعالرابع = row[22]; template.ساعةالرحلةالمطلوبةللعودة4 = row[23]; template.تاريخرحلةالسفرالخامسةالأسبوعالخامس = row[24]; template.ساعةالرحلةالمطلوبةللسفر5 = row[25]; template.تاريخرحلةالعودةالخامسةالأسبوعالخامس = row[26]; template.ساعةالرحلةالمطلوبةللعودة5 = row[27]; // 渲染模板为HTML字符串 var htmlBody = template.evaluate().getContent(); // 发送邮件:第三个参数设为纯文本 fallback(或空字符串),通过选项传入HTML内容 MailApp.sendEmail({ to: emailAddress, cc: cc, subject: subject, htmlBody: htmlBody, // 可选:添加纯文本版本,适配不支持HTML的邮箱 body: "请使用支持HTML的邮箱查看此邮件内容" }); } }
关键修改说明
template.evaluate().getContent():将填充后的模板编译为可直接使用的HTML字符串MailApp.sendEmail改用配置对象参数:明确指定htmlBody字段,避免混淆纯文本与HTML正文- 批量获取
data:一次性读取整个表格的所有数据,循环内直接通过数组索引取值,大幅提升脚本执行速度(谷歌脚本API调用有配额限制,减少调用次数也能避免触发限制)
内容的提问来源于stack exchange,提问作者user20795119
相关产品推荐
相关产品推荐

