2016-04-21 20 views
2

我正在嘗試測試我正在處理的腳本。腳本沒問題,手動觸發時它會成功執行。當我添加每分鐘間隔的時間驅動腳本時,腳本開始在幾個小時後拋出異常。時間驅動的郵件轉發觸發器

例外:服務調用次數過多一天:Gmail的

我檢查電子郵件的每日配額,發現我仍然有郵件配額留下

var quota = MailApp.getRemainingDailyQuota(); 
Logger.log(quota); 

而且我能夠收到try catch電子郵件,但郵件未被轉發。

這是因爲與觸發器關聯的執行時間配額嗎?下面是代碼

function MailForward() { 

    try{ 
    var glabel = createLabel_("Mail-Forwarded"); 
    var rtm_email = '[email protected]'; 
    var from_email = Session.getActiveUser().getEmail(); 
    var threads = GmailApp.search('in:inbox is:unread newer_than:1d'); 
    var mForward = 0; 

    for (var i=0;i<threads.length;i++) { 

     var messages=threads[i].getMessages(); 
     for (var m = 0; m < messages.length; m++){ 
     if (messages[m].isUnread()){ 

     mForward = 0; 
     var mlabels = threads[i].getLabels(); 
     for (var j = 0; j < mlabels.length; j++) { 
      Logger.log(mlabels[j].getName()); 

      if (mlabels[j].getName() === "Mail-Forwarded") { 
      mForward = 1; 
      } 
     } 

     if (mForward===0) { 

     // Logger.log(messages.length) 
     // Logger.log(messages[m].getFrom()); 
     var from = messages[m].getFrom(); 

     //Logger.log(messages[m].getDate()); 
     var date = messages[m].getDate(); 

     // Logger.log(messages[m].getSubject()); 
     var subject = messages[m].getSubject(); 

     // Logger.log(messages[m].getTo()); 
     var to = messages[m].getTo(); 

     var body = messages[m].getBody(); 
     var attachment = messages[m].getAttachments(); 

     var emailoptions = ("---------- Forwarded message ----------" +'<br>'+'From: '+from+ "<'" + from.replace(/^.+<([^>]+)>$/, "$1") +"'>"+'<br>'+ 'Date: '+date+'<br>'+ 'Subject: ' +subject+'<br>'+ 
         'To: ' +to+ "<'" + to.replace(/^.+<([^>]+)>$/, "$1") +"'>"+'<br>'+'<br>'+'<br>'); 

     messages[m].forward(rtm_email,{htmlBody: emailoptions + body , Attachment: attachment}); 

     glabel.addToThread(threads[i]); 
     Logger.log(glabel.getName()); 
     messages[m].markRead(); 

     mForward = 1; 

      } 
     } 
     } 
    } 
    } catch(e) { 

    MailApp.sendEmail("[email protected]", "Exception found in Sript", e); 
     Logger.log(e); 

    } 
} 

回答

1
  1. 您使用MailApp.getRemainingDailyQuota();GmailApp檢查配額。這是兩種不同的服務。

  2. quota method僅返回「用戶可以在一天剩餘時間內發送的剩餘電子郵件數量」。但是您所觸及的限制是您調用該服務的次數,無論出於何種目的。

您使用GmailApp很多來訪問現有的消息,而不是很多,以發送新的。特別是,你正在檢查每個線程中的每一條消息,並且每分鐘都會執行。這是很多API調用:getMessages,isUnread

減少API調用數量的一種方法是進行更有針對性的搜索。所述after:搜索參數接受Unix時間戳,這使得它能夠執行以下操作:

function doSomethingWithNewEmail() { 
    var interval = 5; // if the script runs every 5 minutes; change to 1 if it runs every minute 
    var date = new Date(); 
    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++) { 
    // do something 
    } 
} 

我成功地使用用5分鐘的時間間隔以上的方法。它也可能用1分鐘,因爲大部分時間search將是腳本唯一的API調用。

+0

謝謝,它的工作,但很少電子郵件不轉發,我得到以下例外附件內容不被識別爲字符串或二進制。任何建議將不勝感激 – user3223016