No se le permite ejecutar sendEmail () desde la función personalizada, pero está bien en el editor de scripts

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

Pregunta

He estado tratando de encontrar una manera de enviar una sola fila de datos a una dirección de correo electrónico específica en una hoja de cálculo de "en vivo/en ejecución" que estoy usando dentro de mi dominio, para realizar un seguimiento de los conductores de camiones y sus números de recogida. Logré reconstruir este poco de código utilizando el editor de scripts de Google Apps disponible en hojas:

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 cualquier manera puedo llamar a la función desde una celda en mi hoja de cálculo como =sendEmail() y debe enviar la información de solo la fila activa, y luego marcar esa fila como EMAIL_SENT Así que no lo hago accidentalmente de nuevo.

El script se ejecuta perfecto si lo ejecuto desde el editor de scripts Inside y codifico la dirección de correo electrónico, pero si intento ejecutarlo desde la hoja de cálculo en sí, recibo el mensaje:

Error: no tiene permiso para llamar a SendEmail (línea 19, archivo "CPS_SENDEMAIL.GS").

¡Cualquier ayuda con esto es muy apreciada! Ayuda a evitar que mi usuario se ejecute a MS Excel y Outlook. Cuando hago funcionar esta parte de ella, realmente me gustaría que pudiera hacer que la función muestre una lista de direcciones de las que el usuario puede seleccionar, o alguna otra forma de evitar que el usuario tenga que recordar y escribir la dirección de los controladores y Carrier, pero me encantaría hacer que esto funcione como se esperaba.

El script/solo debería poder ejecutarse en mi dominio de Google con mis usuarios, y la primera vez que lo ejecuté: estaba seguro de que pasé por el proceso de autorización, pero no entiendo realmente esa parte de las cosas.

Actualmente están utilizando MS Excel/Outlook y copian y pegan la fila en un correo electrónico que pueden usar sus contactos para seleccionar. Si no puedo hacer que la función use los contactos de Googles, estaba considerando crear una hoja de controladores con una función de mirada o algo así, un tipo de dolor para tener una lista cuando los contactos están ahí, pero ya haces lo que tienes que hacer !

No hay solución correcta

Otros consejos

Leer más Permisos y funciones personalizadas. Dado que las funciones personalizadas (scripts llamados desde funciones de hoja de cálculo) están abiertas a cualquier usuario de una hoja de cálculo, no se les permite usar ningún servicio que requiera autenticación. Por eso no puedes enviar correo de uno.

Esto es diferente al proceso de autorización de un script para acceder a sus servicios. Eso hace que el mensaje de error sea confuso, pero tenga la seguridad de que era casi la forma en que estaba invocando el guión.

Sin embargo, no hay problema, porque una función personalizada es una mala manera de realizar este tipo de acción de todos modos, porque la función se reevaluará cada vez que haya un cambio en la hoja de cálculo, enviando muchos más correos electrónicos de los que desea.

Le recomiendo que cree un elemento de menú para esta operación. (Consulte el código de muestra proporcionado en el editor si crea un nuevo script de hoja de cálculo). El flujo de trabajo sería mover el cursor a la fila que desea procesar, luego use el menú para "hacerlo", lo que invocaría su script.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top