Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MailApp.sendEmail Error Message - "do not have permission to call sendEmail" [duplicate]

When I change something in my spreadsheet, the onEdit() trigger runs, and I can see all the msgbox's that I put in my code.

My function stops at this line

MailApp.sendEmail(emailAddress, subject, message);

I never see the message 'Email sent!', and get an error in the EXECUTION TRANSCRIPT:

You do not have permission to call sendEmail

If I run the script directly in the script editor, everything works fine...

Here is my 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')
      }
    }
like image 440
Maxime Beaudoin Avatar asked Mar 13 '15 21:03

Maxime Beaudoin


1 Answers

The permissions are different when running a SIMPLE onEdit() trigger. By contrast, there is an INSTALLABLE trigger. Here is the documentation for simple trigger restrictions:

Google Documentation - Triggers - Restrictions

The documentation states:

They (a SIMPLE trigger) cannot access services that require authorization. For example, a simple trigger cannot send an email because the Gmail service requires authorization

You need to set up an installable trigger to be able to send the email.

In the EDIT menu, choose, CURRENT PROJECTS TRIGGERS.

Name your function something different than onEdit.

like image 99
Alan Wells Avatar answered Sep 20 '22 21:09

Alan Wells