使用 Google 脚本从 Gmail 获取附件
using Google Script to get attachment from Gmail
所以我构建了一个传播sheet,它从 2 个不同的来源获取 2 份报告,然后将它们导入 sheet。其中一份报告是一个 CSV 文件,每小时发送到我的电子邮箱。
我的脚本有效....大部分。它将检查我的电子邮件中的线程,提取消息,然后将附件导入 sheet。问题是当下一个小时收到下一封电子邮件并且脚本再次运行时,它不会提取最新的附件,它只会提取第一个附件。我什至尝试在每次运行时将消息移至垃圾箱,但它仍然会从垃圾箱中取出。这是我的代码。
function importReport() {
var threads = GmailApp.search('in:inbox from:"system@Report.com"');
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];
attachment.setContentType('text/csv');
// Is the attachment a CSV file
if (attachment.getContentType() === "text/csv") {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RawReport");
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
// Remember to clear the content of the sheet before importing new data
sheet.clearContents().clearFormats();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
GmailApp.moveMessageToTrash(message);
}
}
目标是拉全线,然后导入最新的附件,有什么建议吗?
您应该尝试从 Gmail 线程中提取最后一封邮件而不是第一封邮件。
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
感谢用户@AmitAgarwal,修复如下。
//download the thread with all the attachments (they will build up over time)
var message = threads[0].getMessages();
//Get the most recent attachment
var attachment = message[message.length - 1].getAttachments()[0];
这将下载整个线程,并获取最新的附件。
我想到的另一种解决方案是在拉动阵列后反转阵列。
var message = threads[0].getMessages();
message.reverse();
var attachment = message[0].getAttachments()[0];
所以我构建了一个传播sheet,它从 2 个不同的来源获取 2 份报告,然后将它们导入 sheet。其中一份报告是一个 CSV 文件,每小时发送到我的电子邮箱。
我的脚本有效....大部分。它将检查我的电子邮件中的线程,提取消息,然后将附件导入 sheet。问题是当下一个小时收到下一封电子邮件并且脚本再次运行时,它不会提取最新的附件,它只会提取第一个附件。我什至尝试在每次运行时将消息移至垃圾箱,但它仍然会从垃圾箱中取出。这是我的代码。
function importReport() {
var threads = GmailApp.search('in:inbox from:"system@Report.com"');
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];
attachment.setContentType('text/csv');
// Is the attachment a CSV file
if (attachment.getContentType() === "text/csv") {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RawReport");
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
// Remember to clear the content of the sheet before importing new data
sheet.clearContents().clearFormats();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
GmailApp.moveMessageToTrash(message);
}
}
目标是拉全线,然后导入最新的附件,有什么建议吗?
您应该尝试从 Gmail 线程中提取最后一封邮件而不是第一封邮件。
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
感谢用户@AmitAgarwal,修复如下。
//download the thread with all the attachments (they will build up over time)
var message = threads[0].getMessages();
//Get the most recent attachment
var attachment = message[message.length - 1].getAttachments()[0];
这将下载整个线程,并获取最新的附件。
我想到的另一种解决方案是在拉动阵列后反转阵列。
var message = threads[0].getMessages();
message.reverse();
var attachment = message[0].getAttachments()[0];