2015-03-13 5 views
5

Wenn ich etwas in meiner Tabelle ändern, wird der onEdit() Trigger ausgeführt, und ich kann alle msgbox sehen, die ich in meinen Code eingegeben habe.MailApp.sendEmail Fehlermeldung - "habe keine Berechtigung, sendEmail zu rufen"

Meine Funktion stoppt an dieser Linie

MailApp.sendEmail(emailAddress, subject, message); 

ich nie die Nachricht ‚gesendet E-Mail!‘ Sehen, und einen Fehler bei der Ausführung TRANSCRIPT erhalten:

Sie haben keine Berechtigung zu nennen sendemail

Wenn ich das Skript direkt im Script-Editor ausführen, funktioniert alles einwandfrei ...

Hier ist mein Code:

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

Wenn Sie 'Browser.msgBox()' zum Debuggen verwenden, gibt es eine andere Option. Sie können 'Logger.log() 'verwenden, den Code ausführen und dann die LOGS ANZEIGEN. –

+0

Haben Sie das Ausführungstranskript angezeigt? Was sagt es am Ende? –

+0

Verwenden Sie den Debugger, und legen Sie in der Zeile "MailApp.sendEmail()" einen Unterbrechungspunkt fest. Führen Sie anschließend den Debugger aus. Wenn der Code angehalten wird, zeigen Sie die Werte für "emailAddress, Betreff, Nachricht" an. Was sind Sie? [Google-Dokumentation - Unterbrechungspunkte] (https://developers.google.com/apps-script/troubleshooting#using_the_debugger_and_breakpoints) –

Antwort

6

Die Berechtigungen unterschiedlich sind, wenn ein SIMPLEonEdit() Trigger ausgeführt wird. Im Gegensatz dazu gibt es einen INSTALLABLE Trigger. Hier ist die Dokumentation für eine einfache Trigger Einschränkungen:

Google Documentation - Triggers - Restrictions

In der Dokumentation:

Sie (eine einfache Trigger) kann keine Dienste zugreifen, die genehmigungspflichtig. Zum Beispiel kann ein einfacher Trigger nicht eine E-Mail senden, da die Google Mail-Service Autorisierung erfordert

Sie benötigen ein installierbar Trigger einzurichten, um die Lage sein, die E-Mail zu senden.

In den EDIT Menü wählen, AKTUELLE PROJEKTE TRIGGERS.

Benennen Sie Ihre Funktion etwas anders als onEdit.

+0

Ich habe ein anderes Problem, ich habe einen Dateinamen MASTER, ich lege meinen Code in diese Datei, und jedes Mal, wenn wir ein neues Projekt starten, nimmt jemand die Datei MASTER, benennt sie um und benutzt die neue Datei. Mein Problem ist, dass es scheint, dass jedes Mal, wenn wir die Datei 'MASTER' kopieren, ich alle Prozesse wiederholen muss, um meinen Auslöser zum Projekt hinzuzufügen? Gibt es einen Weg, dass ich es nur in der MASTER-Datei machen muss ?? Vielen Dank! –

Verwandte Themen