2015-03-13 15 views
5

Quando cambio qualcosa nel mio foglio di calcolo, viene eseguito il trigger onEdit() e sono in grado di vedere tutti i msgbox che ho inserito nel mio codice.Messaggio di errore MailApp.sendEmail - "non ho il permesso di chiamare sendEmail"

La mia funzione si ferma a questa linea

MailApp.sendEmail(emailAddress, subject, message); 

non vedo mai il 'Email inviata!' Messaggio, e si ottiene un errore nella trascrizione ESECUZIONE:

Non hai il permesso di chiamare sendEmail

Se faccio funzionare lo scritto direttamente nel editor di script, tutto funziona bene ...

Ecco il mio codice:

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

Se si utilizza 'Browser.msgBox()' per scopi di debug, esiste un'altra opzione. Puoi usare 'Logger.log() ', eseguire il codice, quindi VISUALIZZA i LOG. –

+0

Avete VISUALIZZATO il TRANSCRIPT DI ESECUZIONE? Cosa dice alla fine? –

+0

Utilizzare il debugger e impostare un punto di interruzione sulla riga 'MailApp.sendEmail()', quindi eseguire il debugger e, quando il codice si interrompe, visualizzare i valori per 'emailAddress, subject, message'. Quali sono? [Documentazione di Google - Punti di rottura] (https://developers.google.com/apps-script/troubleshooting#using_the_debugger_and_breakpoints) –

risposta

6

I permessi sono diversi quando si esegue un SEMPLICEonEdit() grilletto . Al contrario, c'è un trigger INSTALLABILE. Ecco la documentazione per semplici restrizioni di trigger:

Google Documentation - Triggers - Restrictions

Gli stati di documentazione:

Loro (un trigger SEMPLICE) non possono accedere ai servizi che richiedono l'autorizzazione. Ad esempio, un semplice grilletto non può inviare una e-mail perché il servizio Gmail richiede autorizzazione

È necessario impostare un installabile grilletto per essere in grado di inviare l'email.

Negli EDIT menù, scegliere, PROGETTI IN CORSO TRIGGERS.

Nome della funzione diversa da onEdit.

+0

Ho un altro problema, ho un nome di file 'MASTER', ho messo il mio codice in questo file, e ogni volta che iniziamo un nuovo progetto, qualcuno prende il file 'MASTER', lo rinomina e usa il nuovo file. Il mio problema è che sembra che ogni volta che copiamo il file 'MASTER' ho bisogno di rifare tutto il processe per aggiungere il mio trigger al progetto ?? C'è un modo che devo solo farlo nel file MASTER ?? Grazie! –