【发布时间】:2018-07-15 04:05:58
【问题描述】:
Gmail API (script.google.com) 的以下脚本在我手动运行时没有任何问题,但当它由 Google 使用基于时间的触发器触发时,它会失败。
function noSend(e) {
var drafts = GmailApp.getDrafts();
var callback = function(draft) {
function isMyEx(draft) {
var recipient = draft.getMessage().getTo();
var isTheirEmail = /nameofmyex/.test(recipient);
return isTheirEmail; };
if(isMyEx(draft)) {
draft.update('', '', '');
draft.deleteDraft();
} else { } };
drafts.forEach(callback); return;
};
问题:如果手动运行脚本没有出现错误,我该如何调试?
即添加 Logger.log() 并没有帮助,因为我看到它的输出的唯一方法是手动运行脚本 - 但是当我手动运行脚本时脚本可以正常工作。
据我从谷歌的网站(我不明白布局)可以看出,有问题的错误是:
TypeError: Function getMessage in Object [object Object] was not found
这对我来说没有任何意义,因为唯一一次调用 getMessage 方法是由函数 draft 中的 isMyEx,它不应该将 Object 作为其原型,而是应该有 GmailDraft 作为它的原型,它肯定有一个 getMessage 方法。
到目前为止,我唯一的猜测是它与function hoisting 有关,我不太了解其规则。但是我已经尝试了几种排序函数的方法以及在哪里定义它们——当我手动运行脚本时,所有这些方法都有效。同样,仅当脚本由 Google 自动触发时才会发生此故障,这让我感到困惑不已。
相关问题:Gmail API message.list from trigger
Function works only when launched manually (not when triggered) in Google Apps Script Form
【问题讨论】:
标签: google-apps-script gmail gmail-api