[英]I can't get Google Apps Script run for my Gmail
我按照任何方式每周在特定时间发送 Gmail 自动回复中发布的脚本进行操作? . 但是,根据我当前的测试,我的 Gmail 帐户在非工作时间没有回复任何消息。
我做错了什么或不完整吗?
我做了什么:
function myFunction() {
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([4,5,6,0].indexOf(day) > -1 || (day == 1 && hour < 9) || (day == 3 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
if (threads[i].isUnread()){
threads[i].reply("xxxx");
threads[i].markRead();
threads[i].markImportant();
}
}
}
}
}
任何提示将不胜感激!
更新:我想知道为什么以下脚本本身会导致“找不到脚本函数:myFunction”错误?
function autoReply() {
// find calendar event
var today = new Date();
var events = CalendarApp.getDefaultCalendar().getEventsForDay(today, { search: 'OOF' });
var unavailableToday = false;
for (var i = 0; i < events.length; i++) {
if(events[i].isAllDayEvent() && events[i].isOwnedByMe()) {
unavailableToday = true;
break;
}
}
var myEmail = Session.getEffectiveUser().getEmail();
Logger.log('unavailableToday');
Logger.log(unavailableToday);
if(unavailableToday === true) {
// get html message
var files = DriveApp.getRootFolder().getFilesByName('autoreply.html');
var htmlbody;
while (files.hasNext()) {
var file = files.next();
htmlbody = file.getBlob().getDataAsString('utf8');
}
// get emails
var interval = 2;
var date = new Date();
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox !label:autoresponded after:' + timeFrom);
var label = GmailApp.getUserLabelByName("autoresponded");
for (var i = 0; i < threads.length; i++) {
var message = threads[i].getMessages()[0];
if (message.getFrom().indexOf(myEmail) < 0 && message.getFrom().indexOf("no-repl") < 0 && message.getFrom().indexOf("bounce") < 0 && message.getFrom().indexOf("spam") < 0) {
Logger.log("Replied now");
// reply
threads[i].reply("", {
htmlBody: htmlbody
});
// label
label.addToThread(threads[i]);
}
}
}
}
这让我觉得 MyFunction{} 是必不可少的?
您需要删除myFunction()
之外的autoReply()
函数并在autoReply()
上设置触发器。
代码应该看起来像您链接的答案中的那样:
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([5,6,0].indexOf(day) > -1 || (day == 1 && hour < 8) || (day == 4 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
threads[i].reply("I am out of office. Your email will not seen until Monday morning.");
}
}
}
不喜欢这样:
function myFunction() {
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([5,6,0].indexOf(day) > -1 || (day == 1 && hour < 8) || (day == 4 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
threads[i].reply("I am out of office. Your email will not seen until Monday morning.");
}
}
}
}
当您调用myFunction()
时不会调用autoReply()
,只是声明了。
您需要编辑代码,然后重新设置触发器以在autoReply()
上运行。
来自w3schools :
声明的函数不会立即执行。 它们被“保存以备后用”,并将在稍后被调用(调用)时执行。
我希望这对你有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.