Google Apps Script发送Gmail时HTML正文异常及添加签名问题求助
问题修复方案
1. 自定义HTML邮件正文无法渲染
根因:GmailApp.sendEmail 参数传值顺序错误,该方法的标准传参规则为:GmailApp.sendEmail(收件人地址, 邮件主题, 纯文本备选内容, 高级配置对象)
你将HTML内容直接放在了第三个纯文本参数位,没有纳入高级配置对象的htmlBody字段,导致HTML被识别为纯文本无法渲染。
2. 无法自动加载当前用户Gmail默认签名
根因:GmailApp 原生发送方法不会自动拼接用户签名,需要调用Gmail API获取当前账户的默认签名内容,再手动拼接到HTML邮件末尾。
修复步骤与代码
前置操作
打开你的Google Apps Script编辑器,点击左侧菜单栏「服务」旁的+号,找到「Gmail API」后点击添加,完成API服务启用。
修复后完整代码
// 发送邮件入口函数 function approver() { const ui = SpreadsheetApp.getUi(); const row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow(); Logger.log(row); const data = SpreadsheetApp.getActiveSheet().getRange(row, 8, 1, 8).getValues()[0]; const user = { first: data[4], email: data[7], attachments: data[0], row: row }; Logger.log(user); const res = ui.alert('Send to ' + user.first + '(' + user.email + ')?', ui.ButtonSet.YES_NO); if (res == ui.Button.YES) { sendUser(user); } Logger.log(res); } // 新增:获取当前用户Gmail默认签名 function getUserSignature() { const sendAs = Gmail.Users.Settings.SendAs.get('me', 'me'); return sendAs.signature || ''; } // 修复后的邮件发送函数 function sendUser(user) { const sheet = SpreadsheetApp.getActiveSheet(); const row = user.row; // 直接用传递过来的行号,避免激活单元格变化导致取值错误 const filename = sheet.getRange(row,8,1,1).getValue(); const folder = DriveApp.getFoldersByName('COPIES SUPPLIER QUOTES').next(); const fileIter = folder.getFilesByName(filename); // 增加文件存在性判断,避免报错 if (!fileIter.hasNext()) { SpreadsheetApp.getUi().alert('未找到指定附件文件:' + filename); return; } const attachFile = fileIter.next().getAs(MimeType.PDF); // 渲染HTML模板 const temp = HtmlService.createTemplateFromFile('EmailTemplate'); temp.user = user; let message = temp.evaluate().getContent(); // 拼接用户签名 const signature = getUserSignature(); message += signature; // 修正sendEmail参数顺序 GmailApp.sendEmail( user.email, 'Tester', '请使用支持HTML渲染的邮件客户端查看此邮件', // 纯文本备选内容 { htmlBody: message, attachments: [attachFile] } ); }
验证说明
修改完成后保存代码,首次运行时会触发授权提示,完成授权后即可正常发送带用户签名、可正常渲染HTML内容的带附件邮件。
内容的提问来源于stack exchange,提问作者Darryl Jaftha
相关产品推荐
相关产品推荐

