我用gmail学习Javascript。我知道可能有其他的方法,但我想找出这一个,主要是为了了解我的思维过程是错误的。我的目标是学习JavaScript和Google。
我在gmail中用一个特定的标签标记电子邮件,最后我想把所有这些电子邮件转发给一个特定的人。人的变化取决于谁在做工作。我所希望的是:
标记。
下面是我所拥有的,再次,我知道我可以清理其中的一些(例如,改变columnB成为收件人),但我还不能让核心工作。当我尝试运行下面的代码时,它将遍历标签中大约一半的消息,然后返回"TypeError:无法读取未定义的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
}
}
发布于 2021-08-17 02:32:00
您试图使用相同的索引i来获取线程和其中的消息,但是线程可能有不同数量的消息。例如,第10个线程可能只有5条消息,所以如果您尝试访问该线程的第10条消息,您将得到undefined。
如果您试图获取线程的第一条消息(例如,如果它只有一条消息),那么您可以使用getMessages()[0]。
如果要转发所有消息,则需要遍历getMessages()检索的消息。
for (let i = 0; i < length; i++) {
let subject = columnA + ' - ' + threads[i].getFirstMessageSubject();
let messages = threads[i].getMessages();
for (let j = 0; j < messages.length; j++) {
messages[j].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
}
}根据具体情况,还可以包含一个IF语句,以仅转发满足特定条件的消息。
发布于 2021-08-17 02:37:59
function myFunction1() {
const ss = SpreadsheetApp.openById("sheetID");
const sh = ss.getActiveSheet();
const vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
vs.forEach((r, i) => {
let recipient = r[1];
let labels = GmailApp.getUserLabelByName(r[2]);
let archive = GmailApp.getUserLabelByName(r[3]);
let threads = labels.getThreads();
threads.forEach(t => {
let subject = `${r[0]} - ${t.getFirstMessageSubject()}`;
t.getMessages().forEach(m => {
m.forward(r[1], { subject: subject });
archive.addToThread(t);
labels.removeFromThread(t);
});
});
});
}https://stackoverflow.com/questions/68810040
复制相似问题