【发布时间】:2021-08-16 23:07:21
【问题描述】:
我使用 gmail,并且正在尝试学习 Javascript。我知道可能还有其他方法,但我想弄清楚这一点,主要是为了了解我的思维过程哪里出了问题。我的目标是学习 JavaScript 和 Google App Script。
我在 gmail 中使用特定标签标记电子邮件,并且我最终希望将所有这些电子邮件转发给特定的人。这个人的变化取决于谁在做这项工作。我的期望:
- 脚本转到 Google 工作表以查找列、A 客户名称、B 要转发到的电子邮件、C 当前标签和 D 标签以将其存档。 (示例,A:Fire Club,B:example@fireclub.co,C:inbox/FireClub,D:Archive/FireClub
- 转发电子邮件、附件,将主题更改为“客户名称 - 旧主题”(即从“Burn it”更改为“Fire Club - Burn it”
- 然后将消息从初始标签(C 列)中删除,并用其新标签(D 列)进行标记
下面是我所拥有的,我知道我可以清理其中的一些(例如将 columnB 更改为收件人),但我还不能让核心工作。当我尝试运行以下内容时,它将遍历标签中大约一半的消息,然后返回“TypeError: Cannot read property 'forward' of undefined myFunction @ Code.js:21”这是实际发送的行消息。
threads[i].getMessages()[i].forward(recipient, {subject: subject}); // Sends e-mail
感谢您的帮助。我已经包含了下面的整个代码,以防它不仅仅是上面的行。谢谢!
function myFunction() {
var sheetID = 'ID'; //Edit this to your sheet ID.
let sheet = SpreadsheetApp.openById(sheetID);
let rowNum = 6; //Need to make this match to labels, but good enough for a POC
var values = sheet.getActiveSheet().getDataRange().getValues();
let columnA = values[rowNum][0]; // get column A - Client Name
let columnB = values[rowNum][1]; // get column B - email
let columnC = values[rowNum][2]; // get column C - label
let columnD = values[rowNum][3]; // get column D - archive
// Grab E-Mails to send
var labels = GmailApp.getUserLabelByName(columnC);
var archive = GmailApp.getUserLabelByName(columnD);
var threads = labels.getThreads();
var length = threads.length;
let recipient = columnB;
for (let i = 0; i < length; i++) {
let subject = columnA + ' - ' + threads[i].getFirstMessageSubject();
threads[i].getMessages()[i].forward(recipient, {subject: subject}); // Sends e-mail
Logger.log("Thread ID: " + threads[i].getId() + " Message Sent: " + columnA + " - " + threads[i].getFirstMessageSubject()) // Changes subject to add Client name in front
archive.addToThread(threads[i]); // Adds the label that is shown in dolumn D of the spreadsheet
labels.removeFromThread(threads[i]); // removes the inbox label
}
}
【问题讨论】:
标签: javascript google-apps-script gmail