我通过这些更改修改了您的代码,以便它可以按预期工作:
1) 您遇到错误,因为必须先声明 csvData 变量,然后才能使用它。另外,parseCsv() 函数来自 Utilities 类,您可以直接使用此类(您像这样调用它:tab.Utilities.parseCsv)[1]。另一个问题是您无法使用消息 ID 搜索消息 [2],因此您应该发出 get 请求 [3]。
2) 我添加了一个 If 来验证邮件是否有附件。
3)我更改了 If 中的条件以验证它是否是文件名中带有文件扩展名的 csv 文件,因为 gmail API 采用“application/octet-stream”作为 mime 类型的 csv 文件(我猜这是因为您可以将其作为 Gmail 中的 Google 表格打开)。
4)我修改了获取消息的方式以获取最后一个线程的最后一条消息,以前它是获取每个线程的第一条消息而不是最后一条消息。
5) 在INFO表中设置日期,如果您想要特定的格式,可以检查formatDate函数[1]。
function importCSVFromGmail() {
var threads = GmailApp.search("label:rpt-its-all-data");
var message = threads[0].getMessages().pop();
var attachment = message.getAttachments()[0];
if (attachment != null) {
var attachName = attachment.getName();
// Is the attachment a CSV file
if (attachName.substring(attachName.length-4) === ".csv") {
var id = "1bvENjFYC48LSYDMPtI4FIOKIChiuIrg5O4WRziFeAhU";
var name = "ALLDATA";
var sheet = SpreadsheetApp.openById(id);
var tab = sheet.getSheetByName(name);
var tabInfo = sheet.getSheetByName("INFO");
tabInfo.getRange("B1").setValue(new Date());
// Clear the content of the sheet
tab.clearContents().clearFormats();
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
tab.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
}
}
[1] https://developers.google.com/apps-script/reference/utilities/utilities#formatDate(日期,字符串,字符串) https://developers.google.com/apps-script/reference/utilities/utilities#formatDate(Date,String,String)
[2] https://support.google.com/mail/answer/7190 https://support.google.com/mail/answer/7190
[3] https://developers.google.com/gmail/api/v1/reference/users/messages/get https://developers.google.com/gmail/api/v1/reference/users/messages/get