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

Google Sheets脚本发送带附件邮件时出现401认证失败故障求助

Google Sheets脚本发送PDF附件401认证错误及修复方案

问题概述

原脚本可正常发送纯文本邮件,但添加PDF/XLSX附件时触发401未授权错误;开启muteHttpExceptions后邮件可发送,但附件为空或损坏,且未修改过脚本代码。

最优解决方案(推荐)

使用Google Apps Script内置的工作表导出方法,无需手动拼接导出URL,自动处理权限与格式逻辑,代码更简洁可靠:

function sendSheetAsPDF() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const activeSheet = ss.getActiveSheet();
  const sheetName = ss.getName();
  const email = "test@gmail.com";
  const subject = "Important Info!";
  const body = "Test email.";

  // 直接将当前工作表导出为PDF Blob
  const pdfBlob = activeSheet.getAs('application/pdf')
    .setName(`${sheetName}.pdf`);

  // 发送带PDF附件的邮件
  GmailApp.sendEmail(email, subject, body, {
    attachments: [pdfBlob]
  });
}

方案优势

  • 内置方法自动管理OAuth权限,避免手动拼接URL导致的权限校验失败
  • 无需处理Token获取、HTTP请求等底层逻辑,减少出错概率
  • 直接生成符合标准的PDF Blob,不会出现附件损坏问题

原脚本问题修复(兼容原有逻辑)

如果需要保留原脚本的URL拼接逻辑,需修正以下3个关键问题:

1. 修正MIME类型错误

原代码中mimeType: "application//pdf"的双斜杠是语法错误,应改为application/pdf,否则附件无法被正确解析。

2. 移除冗余的URL参数

原URL同时包含format=pdf和exportFormat=pdf,属于重复参数,会导致服务器解析异常,需删除其中一个。

3. 确保权限范围正确

手动获取的OAuthToken可能缺少Drive读取权限,需显式声明所需权限,或重新授权脚本。

修复后的代码:

/**
 * @OnlyCurrentDoc
 * @OAuth2Scope https://www.googleapis.com/auth/drive.readonly
 * @OAuth2Scope https://www.googleapis.com/auth/gmail.send
 */
function SampleEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var ssID = ss.getId();
  var sheetgId = ss.getActiveSheet().getSheetId();
  var sheetName = ss.getName();
  var email = "test@gmail.com";
  var subject = "Important Info!";
  var body = "Test email.";

  // 修正URL参数,移除重复的exportFormat
  var url = "https://docs.google.com/spreadsheets/d/" + ssID + "/export?format=pdf&gid=" + sheetgId + "&portrait=true";

  var token = ScriptApp.getOAuthToken();

  var result = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + token
    },
    'muteHttpExceptions': false
  });

  var contents = result.getContent();

  // 修正MIME类型的双斜杠错误
  GmailApp.sendEmail(email, subject, body, { attachments: [{ fileName: sheetName + ".pdf", content: contents, mimeType: "application/pdf" }] });
}

权限修复步骤

  1. 打开脚本编辑器,点击「运行」->「运行函数」->「SampleEmail」
  2. 按照提示重新授权脚本,确保授权界面中包含Drive和Gmail的相关权限
  3. 重新运行脚本即可

内容的提问来源于stack exchange,提问作者J Sizzle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:15:41