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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:00