Estoy tratando de crear un script para una función de respuesta automática. Actualmente estoy tratando de tomar cada uno de los correos electrónicos asignados a una etiqueta específica y obtener detalles específicos de cada correo electrónico, sin embargo, recibo un error que indica TypeError: threads.getMessages no es una función, aunque he verificado tres veces que esto es , de hecho, una función de las secuencias de comandos de GMAIL. ¿He hecho algo mal aquí en este código que puede estar causando este error?
var labelName = "auto-reply-incoming"; var receivedCount = 0; // extract emails from label in Gmail function extractEmails() { // get all email threads that match label var receivedSearchQuery = "label:"+labelName+" -is:sent"; var threads = GmailApp.search(receivedSearchQuery, 0, 500); for (var i=0; i<threads.length; i++) { //count received emails in label receivedCount = receivedCount + threads[i].getMessageCount(); //get body of each email var message = threads.getMessages()[i].getBody(); //get recipient of each email var recipient = threads.getMessages()[i].getTo(); } Logger.log(receivedCount); Logger.log(recipient); }El problema ocurre porque el código está usando el iterador de subprocesos que podría ser mayor que la cantidad de mensajes en ciertos subprocesos, más específicamente, el problema está en las siguientes líneas:
//get body of each email var message = threads.getMessages()[i].getBody(); //get recipient of each email var recipient = threads.getMessages()[i].getTo();Aquí hay una solución rápida (reemplace lo anterior, por lo siguiente)
var messages = threads[i].getMessages(); for( j = 0; j < messages.length; j++){ //get body of each email var message = messages[j].getBody(); //get recipient of each email var recipient = messages[j].getTo(); } Nota: Logger.log(recipient) registrará el destinatario del último mensaje del último hilo.
Prueba esto:
function extractEmails() { var labelName = "auto-reply-incoming"; var receivedCount = 0; var receivedSearchQuery = "label:" + labelName + " -is:sent"; var ts = GmailApp.search(receivedSearchQuery, 0, 500); var a = []; ts.forEach((t, i) => { let ms = t.getMessages(); ms.forEach((m, j) => { let msg = m.getBody(); let rec = m.getTo(); a.push({ threadindex: j, messageindex: i, message: msg, recipient: rec }) }); }); Logger.log(JSON.stringify(a)); }