gpt4 book ai didi

google-apps-script - 将 Google 文档脚本更新到 Google 云端硬盘(将带有标签的电子邮件存档到云端硬盘)

转载 作者:行者123 更新时间:2023-12-03 05:19:41 26 4
gpt4 key购买 nike

我的脚本将带有特定标签的电子邮件的 pdf 版本保存到 Google 云端硬盘。我有针对三个不同标签的三个几乎相同的脚本版本,并且定期运行它们。

最近,由于 DocsList 的贬值,他们停止了工作。我将 DocsList 的所有实例更改为 DriveApp,但现在收到错误“TypeError:无法在对象 FolderIterator 中找到函数 createFolder。”

问题出在最后几行,脚本应该创建一个文件夹来保存电子邮件的 pdf 文件。

有人可以帮我修复 createFolder 函数并使脚本恢复并运行吗?

/**
* Main function run at spreadsheet opening
*/
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [
{name: "Initialize", functionName: "init"},
{name: "Archive Gmail Messages", functionName: "ScanGmail"}
];
ss.addMenu("Gmail Archiver", menuEntries);
}

/**
* Initialize the system
*/
function init() {
// Create the needed Gmail label
GmailApp.createLabel("Archive to Drive");

// Create Google Drive folder if doesn't exists
try {
var folder = DriveApp.getFolder("Email Archive");
} catch(e) {
// Folder doesn't exists
DriveApp.createFolder("Email Archive");
}

Browser.msgBox("Created Gmail label: Archive to Drive and Google Drive folder: Email Archive");
}

/**
* Scan Gmail account for message archive requests
*/
function ScanGmail() {
// Default Drive folder where to archive messages
var baseFolder = "Sparkfly Receipts 2015";

// Get the label
var label = GmailApp.getUserLabelByName("Sparkfly receipt");
var threadsArr = getThreadsForLabel(label);
for(var j=0; j<threadsArr.length; j++) {
var messagesArr = getMessagesforThread(threadsArr[j]);
for(var k=0; k<messagesArr.length; k++) {
var messageId = messagesArr[k].getId();
var messageDate = Utilities.formatDate(messagesArr[k].getDate(), Session.getTimeZone(), "MM.dd.yyyy");
var messageFrom = messagesArr[k].getFrom();
var messageSubject = messagesArr[k].getSubject();
var messageBody = messagesArr[k].getBody();
var messageAttachments = messagesArr[k].getAttachments();

// Create the new folder to contain the message
var newFolderName = messageDate + " - " + messageSubject;
var newFolder = createDriveFolder(baseFolder, newFolderName);

// Create the message PDF inside the new folder
var htmlBodyFile = newFolder.createFile('body.html', messageBody, "text/html");
var pdfBlob = htmlBodyFile.getAs('application/pdf');
pdfBlob.setName(newFolderName + ".pdf");
newFolder.createFile(pdfBlob);
htmlBodyFile.setTrashed(true);


// Save attachments
for(var i = 0; i < messageAttachments.length; i++) {
var attachmentName = messageAttachments[i].getName();
var attachmentContentType = messageAttachments[i].getContentType();
var attachmentBlob = messageAttachments[i].copyBlob();
newFolder.createFile(attachmentBlob);
}

}
// Remove Gmail label from archived thread
label.removeFromThread(threadsArr[j]);
}
Browser.msgBox("Gmail messages successfully archived to Google Drive");
}


/**
* Find all user's Gmail labels that represent mail message
* movement requests es: moveto->xx@yyyy.com
*
* @return {GmailLabel[]} Array of GmailLabel objects
*/
function scanLabels() {
// logs all of the names of your labels
var labels = GmailApp.getUserLabels();
var results = new Array();
for (var i = 0; i < labels.length; i++) {
if(labels[i].getName() == "Sparkfly receipt") {
results.push(labels[i]);
}
}
return results;
}

/**
* Get all Gmail threads for the specified label
*
* @param {GmailLabel} label GmailLabel object to get threads for
* @return {GmailThread[]} an array of threads marked with this label
*/
function getThreadsForLabel(label) {
var threads = label.getThreads();
return threads;
}

/**
* Get all Gmail messages for the specified Gmail thread
*
* @param {GmailThread} thread object to get messages for
* @return {GmailMessage[]} an array of messages contained in the specified thread
*/
function getMessagesforThread(thread) {
var messages = thread.getMessages();
return messages;
}


/**
* Get methods of an object
* @param {Object} object to scan
* @return {Array} object's methods
*/
function getMethods(obj) {
var result = [];
for (var id in obj) {
try {
if (typeof(obj[id]) == "function") {
result.push(id + ": " + obj[id].toString());
}
} catch (err) {
result.push(id + ": inaccessible");
}
}
return result;
}

/**
* Create a Google Drive Folder
*
* @param {String} baseFolder name of the base folder
* @param {String} folderName name of the folder
* @return {Folder} the folder object created representing the new folder
*/
function createDriveFolder(baseFolder, folderName) {
var baseFolderObject = DriveApp.getFoldersByName(baseFolder);
return baseFolderObject.createFolder(folderName);
}

最佳答案

方法 getFoldersByName() 返回 FolderIterator (文件夹对象的集合),并且该集合不包含“createFolder”方法。

因此,如果集合至少有一个文件夹对象,您应该将该对象从集合中取出,然后调用“createFolder”。

在这里您可以找到文档:https://developers.google.com/apps-script/reference/drive/folder#getFoldersByName(String)

关于google-apps-script - 将 Google 文档脚本更新到 Google 云端硬盘(将带有标签的电子邮件存档到云端硬盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com