如何解决我无法为我的Gmail运行Google Apps脚本 答案:更多信息:参考文献:
我遵循了Any way to send Gmail auto-response at certain times every week?中发布的脚本。但是,根据我当前的测试,我的Gmail帐户在工作时间未回复任何邮件。
我做错什么了吗?
我所做的:
- 通过复制和粘贴在https://script.google.com/上创建了一个脚本。
- 保存脚本并进行了测试。工作正常。 enter image description here
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();
}
}
}
}
}
- 通过菜单“高级Google服务”启用了Gmail API enter image description here
- 每5分钟为脚本设置一个触发器。 enter image description here
- 从另一个Gmail帐户发送了几封测试电子邮件,以查看是否会有任何自动回复。
- 没有从其他帐户手动修改任何收到的电子邮件。
任何提示将不胜感激!
更新:我不知道为什么以下脚本本身会导致“找不到脚本函数: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 {}是必不可少的?
解决方法
答案:
您需要删除autoReply()
之外的myFunction()
功能,并在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,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.");
}
}
}
}
调用autoReply()
时不会调用 myFunction()
,而只是声明。
您需要编辑代码,然后重新设置触发器以在autoReply()
上运行。
来自w3schools:
声明的功能不会立即执行。它们被“保存以备后用”,并在调用(调用)时稍后执行。
我希望这对您有帮助!
参考文献:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。