Pas autorisé à exécuter SendEmail () à partir de la fonction personnalisée, mais ok dans l'éditeur de script

StackOverflow https://stackoverflow.com/questions/19840894

Question

J'ai essayé de trouver un moyen d'envoyer une ligne unique de données à une adresse e-mail spécifique dans une feuille de calcul "Live / Running" que j'utilise dans mon domaine, pour garder une trace des chauffeurs de camion et de leurs numéros de ramassage. J'ai réussi à reconstituer ce petit code en utilisant l'éditeur de script Google Apps disponible en feuilles:

function sendEmail()
{
   var sheet = SpreadsheetApp.getActiveSheet();
   var activeRow = sheet.getActiveCell().getRow();
   var cellID = "H" + activeRow;    
   var dataRange = sheet.getRange(activeRow, 1, 1, 6);
   var EMAIL_SENT = "EMAIL_SENT";
   var data = dataRange.getValues();
   Logger.log(data[0][0]);

   var emailAddress = usercellnum@carrier.net;
   var message = data;
   var subject = "CG-PU#";
   var emailSent = sheet.getRange(cellID).getValue();

   if (emailSent != "EMAIL_SENT")
   {
     MailApp.sendEmail(emailAddress, subject, message);
     var cell = sheet.getRange(cellID);
     cell.setValue(EMAIL_SENT);
   }
  }
SpreadsheetApp.flush();  
}

De toute façon, je peux appeler la fonction à partir d'une cellule dans ma feuille de calcul comme =sendEmail() et il doit envoyer les informations uniquement à partir de la ligne active, puis signaler cette ligne comme EMAIL_SENT Donc je ne recommence pas accidentellement.

Le script s'exécute parfait si je l'exécute à partir de l'éditeur de script intérieur et que le code dur de l'adresse e-mail, mais si j'essaie de l'exécuter à partir de la feuille de diffusion elle-même, je reçois le message:

Erreur: vous n'avez pas l'autorisation d'appeler SendEmail (ligne 19, fichier "cps_sendemail.gs").

Toute aide à cela est grandement appréciée! Il serait utile d'empêcher mon utilisateur de revenir à MS Excel et Outlook. Lorsque j'obtiens cette partie qui fonctionne, je l'aimerais vraiment si je pouvais avoir la fonction afficher une liste des adresses parmi lesquelles l'utilisateur peut sélectionner, ou une autre façon de garder l'utilisateur à se souvenir et à saisir l'adresse des pilotes et Carrier, mais j'aimerais que cela fonctionne autant comme prévu.

Le script ne serait / ne devrait être autorisé à s'exécuter dans mon domaine Google avec mes utilisateurs, et la première fois que je l'ai exécuté - j'étais sûr d'avoir suivi le processus d'autorisation, mais je ne comprends pas vraiment cette partie des choses.

Ils utilisent actuellement MS Excel / Outlook et ils copient et collent la ligne dans un e-mail auquel ils peuvent utiliser leurs contacts pour lesquels sélectionner. Si je ne peux pas faire en sorte que la fonction utilise des contacts Googles, j'envisageais de créer une feuille de pilotes avec une fonction de recherche ou quelque chose - une sorte de douleur à garder une liste lorsque les contacts sont là - mais tu fais ce que tu dois faire !

Pas de solution correcte

Autres conseils

Relire Autorisation et fonctions personnalisées. Étant donné que les fonctions personnalisées (scripts appelés à partir des fonctions de feuille de calcul) sont ouverts à tout utilisateur d'une feuille de calcul, ils ne sont pas autorisés à utiliser un service qui nécessite une authentification. C'est pourquoi vous ne pouvez pas envoyer de courrier de l'un.

Ceci est différent du processus d'autorisation d'un script pour accéder à vos services. Cela rend le message d'erreur déroutant, mais soyez assuré que c'était à peu près la façon dont vous invoquiez le script.

Pas de problème cependant, car une fonction personnalisée est une mauvaise façon d'effectuer ce type d'action de toute façon, car la fonction sera réévaluée à chaque fois qu'il y a un changement dans la feuille de calcul, envoyant beaucoup plus de courriels que vous ne le souhaitez.

Je vous recommande de créer un élément de menu pour cette opération à la place. (Voir l'exemple de code fourni dans l'éditeur si vous créez un nouveau script de feuille de calcul.) Le workflow serait de déplacer le curseur vers la ligne que vous souhaitez traiter, puis d'utiliser le menu pour "le faire", qui invoquera votre script.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top