2017-03-10 107 views
1

我正在編寫一個代碼,旨在通過電子郵件通知我網站上的值是否更改。爲了做到這一點,我使用4個功能:Google Apps腳本:觸發器不適用於發送電子郵件

  • 功能的一個執行的功能2-4
  • 功能2是刮板
  • 功能3在一個新的線在電子表格中的數據寫入
  • 功能4比較新寫入的行,並在新行與以前不同時發送電子郵件。

功能一每5分鐘自動觸發一次。電子表格顯示觸發器對於函數二和三(對數據進行刮擦並將數據保存到電子表格)正常工作,電子表格每五分鐘更新一次。但是,如果發生變化,我不會收到電子郵件。

當我手動執行功能1時,它可以工作,包括數據發生變化時發送的電子郵件。我試圖添加額外的觸發器來執行比較數據併發送電子郵件的功能。但是,這也沒有導致電子郵件被髮送給我。

如果很重要:數據每小時更換一次。然而,我想盡快得到通知,因此經常檢查

你有什麼想法,爲什麼發送電子郵件的觸發器不起作用,你有什麼解決方案嗎?

在此先感謝!

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("[email protected]", invest + "blablabla", "blablabla"); 
    // Logger.log('not equal'); 
    } 
    } 
+0

我找到了解決方案:getUi()函數顯然導致了問題。由於我不需要它(它是從一箇舊功能中遺留下來的),我將它刪除了,現在腳本自動運行。 還是謝謝! – JSS

回答

0

嘗試在SendEmail()函數的最後一行改變MailAppGmailApp

+0

嘗試在sendData和SendEmail()之間放置flush()。 – Cooper

+0

OP使用錯誤的類。其實際上是GmailApp而不是MailApp。 –

+1

如果是這樣的話,我想這個函數也不應該手動工作。 – JSS

0

我發現解決方案:getUi() - 函數顯然導致了問題。一些研究表明,getUi()函數僅適用於打開相關表單的情況。

因爲我不需要函數(它是從舊函數中遺留下來的),所以我刪除了它,現在腳本自動運行。謝謝!

相關問題