Google Apps脚本:触发功能不适用于发送电子邮件

时间:2017-03-10 18:13:43

标签: email google-apps-script triggers

我正在编写一个代码,旨在通过电子邮件通知我网站上的价值是否发生变化。为此,我使用了4个函数:

  • 功能一执行功能2-4
  • 功能2是刮刀
  • 功能3将数据写入电子表格中的新行
  • 功能4比较新写入的行,如果新行与之前的行不同,则发送一封电子邮件。

每5分钟自动触发一次功能。电子表格显示触发器可以正常运行第二和第三功能(将数据抓取并保存到电子表格中),电子表格每五分钟更新一次。但是,当事情发生变化时,我不会收到电子邮件。

当我手动执行第一个功能时,它可以工作,包括在数据发生变化时发送电子邮件。我试图添加一个额外的触发器来执行比较数据和发送电子邮件的功能。但是,这也没有导致发送给我的电子邮件。

如果重要:数据每小时改变一次。但是,我希望尽快获得通知,因此经常检查

你有什么想法,为什么发送电子邮件的触发器不起作用,你有什么解决方案吗?

提前致谢!

  function scrape_save_send(){
  getData();
  saveData();
  SendEmail();
}

function getData() { // works just fine, code cut to make it not too long
[...]
}

function saveData() {         // works fine both automatically and manually
 var sheet = SpreadsheetApp.getActiveSheet(); 
 sheet.appendRow([new Date(), getData()]);
 var lrow = sheet.getLastRow();
 sheet.getRange(lrow,3).setFormula('=SPLIT(B'+lrow+'; "abcdefghijklmnopqrstuvwxyz=<>- /")')       // workaround to extract a number from the scraped content
}

function SendEmail() {                         // works just fine if executed manually
  Utilities.sleep(2000)                        // delays the check
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow(); 
  var ui = SpreadsheetApp.getUi();
  if (sheet.getRange(sheet.getLastRow()-1,2).getValue() === sheet.getRange(sheet.getLastRow(),2).getValue()) {
    Logger.log('equal');
  } else {
   var invest = sheet.getRange(sheet.getLastRow(),8).getValue();
    MailApp.sendEmail("ab@gmail.com", invest + "blablabla", "blablabla");
   // Logger.log('not equal');
  }
  }

2 个答案:

答案 0 :(得分:0)

尝试在MailApp函数的最后一行中将GmailApp更改为SendEmail()

答案 1 :(得分:0)

我找到了解决方案:getUi() - 函数显然导致了问题。一些研究表明,getUi() - 函数仅在打开相关表时才起作用。

由于我不需要该功能(它是从旧功能中遗留下来的)我将其删除,脚本现在可以自动运行。谢谢!