次の 2 つのスクリプトを使用して、特定のラベルが適用されたときに電子メールに返信または転送しています。最初の列にラベル名を保持する 2 つのシート (replySheet と forwardSheet) があります。次に、replySheet は次のセルに電子メールの返信テキストを持ち、forwardSheet はメッセージの転送先の電子メール アドレスを持ちます。
2 つの質問:
- GmailApp.getUserLabelByName で「1 日にサービスが呼び出されすぎました」というエラー メッセージが表示されました。Google Apps for Education の制限が 1 日あたり 10,000 であることは承知していますが、このコードは 5 分ごとに実行するか、ラベルごとに毎日 288 回実行する必要があります。私は何を誤解していますか?これを回避するためにコードを書き直すための考えはありますか?
- .moveToArchive() は、replyLabel() で何もしないようです。コード内の別のポイント (返信の送信前と送信後) に移動しようとしましたが、スレッドはアーカイブされません。
いずれかの問題に対する提案をありがとう。私の質問をより明確にすることができるかどうか教えてください。
var thisSS = SpreadsheetApp.getActiveSpreadsheet();
var forwardSheet = thisSS.getSheetByName('Forwards');
var emailSheet = thisSS.getSheetByName('Email');
var alias = emailSheet.getRange(3, 2).getValue();
var replyTo = emailSheet.getRange(2, 2).getValue();
var fromName = emailSheet.getRange(1, 2).getValue();
var replySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Replies');
function forwardLabel() {
var data = forwardSheet.getRange(2, 1, forwardSheet.getLastRow(), 2).getValues();
for (i in data) {
var row = data[i];
var name = row[0].toString();
var email = row[1].toString();
if (name && (email != "")) {
var label = GmailApp.getUserLabelByName(name);
var threads = label.getThreads(0, 100);
for (i in threads) {
var messages = threads[i].getMessages();
for (j in messages) {
Logger.log(messages[j].getSubject());
messages[j].forward(email, {bcc:alias, from:alias, name:fromName}).markRead();
label.removeFromThread(threads[i]);
}
Utilities.sleep(1000);
}
}
}
}
function replyLabel() {
var data = replySheet.getRange(2, 1, replySheet.getLastRow(), 2).getValues();
var signature = emailSheet.getRange(4, 2).getValue().toString();
var alias = emailSheet.getRange(3, 2).getValue();
for (i in data) {
var labelName = data[i][0].toString();
var label = GmailApp.getUserLabelByName(labelName);
var replyText = data[i][1].toString();
replyText = replyText + signature;
if (label && (replyText !== "")) {
var labeledEmails = label.getThreads(0, 100);
for (j in labeledEmails) {
labeledEmails[j].moveToArchive();
label.removeFromThread(labeledEmails[j]);
var messages = labeledEmails[j].getMessages();
var message = messages[0];
message.reply(replyText,{htmlBody:replyText, bcc:alias, from:alias, name:fromName});
Utilities.sleep(2000);
}
}
}
}