2015-03-13 14 views
5

Kiedy zmieniam coś w moim arkuszu kalkulacyjnym, uruchamiany jest wyzwalacz onEdit() i widzę wszystkie msgbox, które umieszczam w moim kodzie.Komunikat o błędzie MailApp.sendEmail - "nie masz uprawnień do wywoływania sendEmail"

Moja funkcja zatrzymuje się na tej linii

MailApp.sendEmail(emailAddress, subject, message); 

Nigdy wyświetlony komunikat „E-mail wysłany!”, I pojawia się błąd w transkrypcji wykonanie:

Nie masz uprawnień, aby zadzwonić SendEmail

Jeśli uruchomić skrypt bezpośrednio w edytorze skryptów, wszystko działa bez zarzutu ...

Oto mój kod:

function onEdit() { 
     var sheet = SpreadsheetApp.getActiveSheet(); 
     var sheetname = sheet.getName() 
     var AcCellRange = sheet.getActiveCell() 
     var AcCol = AcCellRange.getColumn() 
     var AcRow = AcCellRange.getRow() 

     if (sheetname=="Questions/Réponses") { 
     //Browser.msgBox(AcCol+'/'+AcRow) 
     //liste d'instructions 
     //Boucle si les colonne sont comprise dans le range 
     if ((AcCol==3) || ((AcCol==7))){ 
      //Browser.msgBox(AcCol) 
      if (AcRow > 7){ 
      //Browser.msgBox(AcRow) 
      sendEmails() 
      } 
     } 
     } 
     else 
     {} 
    }  
function sendEmails() { 
     Browser.msgBox('SendEmails') 
     var spreadsheet = SpreadsheetApp.getActive(); 
     var sheet = spreadsheet.getSheetByName('ListCourriel'); 
     Browser.msgBox('SendEmails2') 
     var sheetDonnee = spreadsheet.getSheetByName('Questions/Réponses'); 
     var RangeProjet = sheetDonnee.getRange(1, 3) 
     var NoProjet = RangeProjet.getValue() 
     var RangeProjet = sheetDonnee.getRange(4, 3) 
     var ProjName = RangeProjet.getValue() 
     Browser.msgBox('SendEmails3') 
     var startRow = 2; // First row of data to process 
     var LastRows = sheet.getRange(1,4) 
     var numRows = LastRows.getValue(); // Number of rows to process 
     // Fetch the range of cells A2:B3 
     var dataRange = sheet.getRange(startRow, 1, numRows, 2) 
     // Fetch values for each row in the Range. 
     var data = dataRange.getValues(); 
     Browser.msgBox('SendEmails4') 
     //Permet d'aller cherche les info de la ligne active 
     var ActiveCellRange = sheetDonnee.getActiveCell() 
     var ActiveRows = ActiveCellRange.getRow() 
     var NoLigne = sheetDonnee.getRange(ActiveRows,1) 
     var sDep = sheetDonnee.getRange(ActiveRows,2) 
     var sDate = sheetDonnee.getRange(ActiveRows,4) 
     var sInitiale = sheetDonnee.getRange(ActiveRows,5) 
     var sQuestion = sheetDonnee.getRange(ActiveRows,3) 
     Browser.msgBox('SendEmails5') 
     var rDate = sheetDonnee.getRange(ActiveRows,9) 
     var rInitiale = sheetDonnee.getRange(ActiveRows,10) 
     var rReponse = sheetDonnee.getRange(ActiveRows,7) 

     Browser.msgBox('SendEmails6') 
     var subject = 'Modif. Question/Réponse - Projet: ('+NoProjet+') '+ProjName; 
     var message = "No Ligne : "+NoLigne.getValue()+String.fromCharCode(10)+String.fromCharCode(10)+"Reponsable : "+sInitiale.getValue()+String.fromCharCode(10)+"Date : "+sDate.getValue()+String.fromCharCode(10)+"Question : "+String.fromCharCode(10)+sQuestion.getValue()+String.fromCharCode(10)+String.fromCharCode(10)+"************************************"+String.fromCharCode(10)+String.fromCharCode(10)+"Reponsable : "+rInitiale.getValue()+String.fromCharCode(10)+"Date : "+rDate.getValue()+String.fromCharCode(10)+"Réponse : "+String.fromCharCode(10)+rReponse.getValue() 
     //Browser.msgbox(subject) 

     Browser.msgBox('SendEmails7') 
     for (i in data) { 
     Browser.msgBox('SendEmails8') 
     var row = data[i]; 
     var emailAddress = row[0]; // First column 
     Browser.msgBox('SendEmails9') 
     MailApp.sendEmail(emailAddress, subject, message); 
     Browser.msgBox('Email sent') 
     } 
    } 
+0

Jeśli używasz 'Browser.msgBox()' do celów debugowania, istnieje inna opcja. Możesz użyć 'Logger.log() ', uruchomić kod, następnie ZOBACZ LOGS. –

+0

Czy widziałeś TRANSKRET WYKONANIA? Co określa na końcu? –

+0

Użyj debuggera i ustaw punkt przełamania na linii 'MailApp.sendEmail()', a następnie uruchom debuger, a gdy kod się zatrzyma, wyświetl wartości dla 'emailAddress, subject, message'. Czym oni są? [Dokumentacja Google - Punkty przerw] (https://developers.google.com/apps-script/troubleshooting#using_the_debugger_and_breakpoints) –

Odpowiedz

6

Uprawnienia różnią się podczas uruchamiania SIMPLEonEdit() spust. Natomiast występuje wyzwalacz INSTALOWANY. Oto dokumentacja dla prostych ograniczeń spustowych:

Google Documentation - Triggers - Restrictions

Państwa dokumentacja:

Oni (prosty spust) nie może korzystać z usług, które wymagają zezwolenia. Na przykład, prosty spust nie może wysłać e-mail, ponieważ usługa Gmail wymaga autoryzacji

Trzeba założyć instalowalnego spust, aby móc wysłać wiadomość.

W EDIT menu, wybrać, bieżących projektów TRIGGERS.

Nazwij swoją funkcję inną niż onEdit.

+0

Mam inny probllem, mam nazwę pliku "MASTER", umieszczam swój kod w tym pliku i za każdym razem, gdy rozpoczynamy nowy projekt, ktoś bierze plik "MASTER", zmienia nazwę i używa nowego pliku. Mój problem polega na tym, że za każdym razem, gdy kopiujemy plik "MASTER", muszę przerobić całe przetwarzanie, aby dodać mój wyzwalacz do projektu? Czy istnieje sposób, że muszę to zrobić tylko w pliku MASTER? Dziękuję Ci! –