由于附件身份验证失败,Google表单脚本突然停止工作,无法发送电子邮件附件



软件:Google Sheets&谷歌应用程序脚本

大家好,我一直在给自己发送测试电子邮件,并附上谷歌表单中的附件。他们做得很好。然后,有一天我跳了进来,开始收到身份验证错误。我尝试了几种不同的修复方法,但仍然被卡住了。如果我什么都不改,我不知道它为什么会坏。不管怎样,我现在正在改变东西,试图修复它。

它可以让我发送普通的电子邮件,但当我尝试附加pdf或xsls文件时,它失败了。这一直很有效,直到它停止工作。。。设置"muteHttpExceptions":true,允许发送电子邮件,但附件为空/已损坏。

你知道有什么更好的方法可以通过电子邮件以pdf格式发送特定的表格吗?或者有什么方法可以解决这个问题?

代码:

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.";
var url = "https://docs.google.com/spreadsheets/d/" + ssID + "/export?" + "format=pdf" + "&gid=" + sheetgId + "&portrait=true" + "&exportFormat=pdf";
var token = ScriptApp.getOAuthToken();
var result = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
},
'muteHttpExceptions': false
});
var contents = result.getContent();
GmailApp.sendEmail(email, subject, body, { attachments: [{ fileName: sheetName + ".pdf", content: contents, mimeType: "application//pdf" }] });
}

错误消息:

5:58:33 AM  Error   
Exception: Request failed for https://docs.google.com returned code 401. Truncated server response: <HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
(use muteHttpExceptions option to examine full response)
SampleEmail @ code.gs:108

解决方案:(感谢@Amit_Singh的建议。(

尝试运行此功能将您的谷歌表单以pdf格式发送到您的谷歌驱动器。这为我清除了getOAuthToken((的缓存或其他内容,并允许原始脚本正确地进行身份验证和发送电子邮件附件。以下是功能:

function convertSheetToPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var ssID = ss.getId();
var sheetgId = ss.getActiveSheet().getSheetId();
var sheetId = sheetgId; // "2SqIXLiic6-gjI2KwQ6OIgb-erbl3xqzohRgE06bfj2c";
var spreadsheetName = "My Spreadsheet";
var destination = DriveApp.createFolder('new folder');
//var destination = DriveApp.getFolderById("1vFL98cgKdMHLNLSc542pUt4FMRTthUvL");
//var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + sheetId + "&exportFormat=xlsx";
var url = "https://docs.google.com/spreadsheets/d/" + ssID + "/export?" + "format=pdf" + "&gid=" + sheetgId + "&portrait=true" + "&exportFormat=pdf";
var params = {
method: "get",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: false
};
var blob = UrlFetchApp.fetch(url, params).getBlob();
blob.setName(spreadsheetName + ".xlsx");
destination.createFile(blob);
}

最新更新