Hola, Excelente video, y especialmente tienes un don para explicar, vas paso a paso totalmente claro , me ha ayudado muchísimo, seguí tus videos anteriores y este pero no supe como hacer para que me cambie el asunto por cada correcto.
Hola, excelente video. La verdad yo no sabía nada de Sheets hasta que llegue a tu canal, muchas gracias. Solo dos consultas. ¿Como puedo omitir la instrucción cuando en mi listado no tengo algún correo y no me lance error al ejecutar? y ¿Cómo puedo insertar una firma digital al final de cada correo enviado? esto último debido a que tengo la firma configurada pero no aparece una vez enviada. Espero me puedas instruir en esas dos consultas. ¡De antemano muchas gracias!
hola juan gracias por compartir tus conocimientos, solo para ver si pudieras decirme que cuando se realiza un formulario los resultados de este mismo, se vayan a una hoja de calculo y estos también a un correo.
Hola! Que se vayan a una hoja de cálculo se puede hacer automáticamente simplemente enlazando el formulario con sheets Para el envió del mail, puedes usar este mismo código pero atarlo a un activador que se ejecute con el envío del formulario. Te dejo un video de activadores th-cam.com/video/lrQQrOA_uKw/w-d-xo.html Saludos!
Muchas gracias por compartir su conocimiento!!! funciona perfectamente ..si el correo esta mal digitado ..sale error y deja de enviar ....es posible que si no esta correcto el correo continúe enviando a las siguientes celdas
Nuevamente Muchas gracias Ing. Guzman por sus aportaciones Con esto vamos más allá de sheets, y combinamos con gmail, para automatizar funciones. Felicidades por el canal, la página, y todos cursos
Hola Me has ayudado un montón Mil gracias Casi no tengo conocimiento de programación y lo logré excelente explicación En mi trabajo debo enviar este mismo formato varios correos así como este cómo si fuera combinación de correspondencia, pero debe irse a uno o dos destinatarios y copia a mi jefe y/o jefes de los destinatarios He buscado y encontré correo con copia pero envío sencillo no con Plantilla.... Ayudaaa cómo se llama el video?.. Puedo copiar los códigos y pasarlos?🤯🤯 Gracias gracias gracias
Hola! Gracias por tus palabras! con plantilla no cambia nada, usa las opciones GmailApp.sendMail(destinatario,asunto,mensaje.{ cc:"jj@gmail.com", bcc:"jj@gmail.com", } Saludos!
Hola! Juan ! Buen dia, como logro evitar que al oprimir enviar correo masivo me vuelva a enviar a los que ya fueron enviados ? y como logro colocar el OK de enviado automáticamente tambien en los envios masivos ? Muchas gracias !
EXCELENTE JUAN!!! Consulta: Necesito enviar por email turnos personalzidos (los cargados en la sheet) pero a su vez necesito el destinatario del correo me envie confirmacion de asistencia. Como puedo implementarlo? Desde Ya MILLON DE GRACIAS POR COMPARTIR TUS CONOCIMIENTOS
Hola Juan Por fa Tambien me pueee decir si en la plantilla puedo marcar texto en negrita? Por ejemplo el nombre del destinatario y a donde queda el registro de envio de correos no salen en mi Gmail 😢
Hola Juan ! Me ha ayudado mucho tus videos, una consulta , si quiero que en el mensaje del correo salga una fecha en formato fecha y hora , como lo podría modificar ? saludos cordiales . Buen inicio de año !
Hola Tiago Claro que si, esto se hace con los activadores por tiempo Usas la misma función que hicimos aquí pero le creas un activador por tiempo Aquí te dejo un video th-cam.com/video/lrQQrOA_uKw/w-d-xo.html Saludos!
Juan Antes que todo lo felicito por su labor, referente a estos temas este es el mejor canal que existe. Gracias por compartir su sabiduría. Tengo una 2 preguntas, ojalá me pueda ayudar al enviar el correo de forma automática como puedo cambiar el formato de la fecha que aparece por default Wed Dec 22 2021 11:00:00 GMT-0500 (hora estándar oriental Cambiarlo por alguno distinto por ejemplo: 22/12/2021 11:00 La segunda cuestión es que me aparece diferente la zona horaria que tengo capturada en mi hoja a la que se manda en el correo en automático, como hago para ambos tengan la misma zona horaria ?? De antemano muchas gracias y nuevamente felicidades por todo su trabajo.
Hola Juan he estado siguiendo tus videos y me han ayudado muchisimo para los envios de mail. La unica duda que me queda sobre el Mail Merge es: ¿puedo generar una huella que diga cuando se hizo el envio de todos los correos? Asi como en el video de enviar correo por fila que se dejaba la huella por cada fila. espero puedas ayudarme. Saludos.
Hola, gracias he aprendido bastante con tus videos. En el caso que quiera enviar un correo masivo sin que cambie el texto a muchos contactos, ¿cómo puedo hacer para que se envíe un solo email?, para que no me consuma correos de mi cuota diaria. Ejemplo enviar un email para enviar un informe, necesito que se envíen a 20 contactos (de un listado vertical A2:A20), pero usando solo 1 correo de mi cuota diaria.
Hola Juan muy buena explicación, me gustaría que nos ayudaras para enviar un correo con imagenes y botones css para darle un poco mas de interactividad. muchas gracias
Juan, gracias por el vídeo. Estoy intentando aplicar el programa de “Mail Enviado” para que me ponga el OK cada vez que envía el correo pero me quedo estancado. Comentaste que harías un vídeo pero no lo he visto, me lo podrías explicar? Mil gracias, es que estoy teniendo problemas para establecer el número de fila dinámico para que vaya cambiando según qué fila este tocando. Gracias
excelente se podria poner check para indicar cual se va a enviar dado que puedo tener como indica google maximo 100 y deseo enviar hoy dia un ejemplo 100 mañana los otros 100 que me falta pero tengo mas de 400 correos por enviar como poner una marca en que me he quedado por enviar
Hola Juan! Como estás? En el caso que quiera incluir en un mismo mail, información de varias filas que contengan check box en TRUE (para poder delimitar que filas quiero enviar) cómo debería indicarle eso mismo al código? Gracias!
Buenos días Juan, muchas gracias por tu vídeo, quería hacerte una consulta con respecto al vídeo, sería posible enviar más correos del limite de 100 por día, por ejemplo compartiendo el google Sheets y desde las otras cuentas compartidas enviar más correos?, excelentes vídeos.
Hola Josue Mil gracias por tus palabras! Pues la forma más fácil es avanzando a un plan pago Yo creo que siempre envía del correo del propietario, por lo que lo único que se me ocurre es tener varias bases y que de alguna manera se alimenten y se comuniquen con IMPORTRANGE o con un código cuando ya se hayan enviado otros correos Un gran saludo!
4 ปีที่แล้ว
Hola Juan, muy bueno, como siempre. Tengo Plantillas diferentes en las que cambio un poco el texto según algunas particularidades del contacto. Con el envío individual, pongo la plantilla en una columna al lado de cada contacto y la puedo invocar con el recurso de que tome esa columna de la fila activa. Pero en este caso de envío masivo, no logro saber como hacer lo mismo. ¿Cómo puedo hacer para que tome la plantilla ubicada en cada fila en vez de que la levante de una celda puntual? No sé si logro explicarme. Saludos.
Mil disculpas Matias por la demora Estas preguntas más difíciles las dejo en un repositorio especial para responderlas más adelante. Primero cuéntame si pudiste solucionar.
Hola gracias, me gustaría que la plantilla fuera un documento de Google doc, para poder usar encabezado con el logo de la institución y texto de diferente tipo y que lo mande como PDF al correo de cada alumno, lo quiero para informar las calificaciones a cada alumno de mi materia
Hola Juan!! Muy buenos tus videos. Pregunta: todas las semanas le envío un mail a cada vendedor (son 25), con un listado de clientes deudores y sus saldos respectivos. Esta información está en una planilla (podría ser 1 hoja por cada vendedor), con varias filas y columnas las cuales van cambiando de tamaño. Con este video, podría hacer estos envíos? Me pierdo en la parte de la planilla. Espero me puedas ayudar, muchas gracias!
@@JuanSGuzman Genial, lo voy a aguardar entonces! Gracias! Entre nosotros, me interesa mucho aprender sobre estos temas (soy fanático del Excel, lo uso para trabajar y me gusta el entorno GSheet). Dónde te parece que pueda hacer algún curso?
@@leonardolb85 Hola Leonardo Mil gracias! Te cuento que acabo de lanzar una academia online por suscripciòn de solo Sheets y Apps Script Hay 6 cursos actualmente Sheets Basico Forms Basico Inventarios Apps Scripts Basico Apps Script para Sheets Validaciones de Datos Cada 15 días llega un nuevo curso. Los próximos son: Listas Desplegables Query Envío de mails También ahí encuentras todas las plantillas de los videos de TH-cam Y los estudiantes sugieren los proximos cursos o lecciones adicionales de los cursos existentes. Tambien, respondo mucho más rápido que por TH-cam Aquí te dejo un curso gratis de muestra juansguzman.teachable.com/p/descubriendo-el-poder-de-google-sheets-de-0-a-100-en-2-horas/ Y la academia juansguzman.teachable.com/ Un gran saludo! PS. Tambien tengo unos cursos en Udemy, pero la verdad me parece mejor opción esta academia
Hola Juan muchas gracias como siempre por tan grande aportación, te felicito. Disculpa, tengo un formato de cotización y tomé algunas de las variables dentro del formato para la plantilla, esto es, el correo, el nombre cliente y la razón social. Cuando el correo se envía con el archivo adjunto, el PDF aparte de la hoja de la cotización imprime todas las demás las hojas del libro, esto es, la de la plantilla y la de los clientes y productos, pero me gustaría especificar en el código que sólo imprima la primera pestaña (en este caso, se llama Cotizador) este es el código, agradezco cualquier observación. Saludos. function enviarCorreo() { const nombreBase = 'Cotizador' const archivo = SpreadsheetApp.getActiveSpreadsheet() const hojaCotizador = archivo.getSheetByName('Cotizador'); var plantilla = archivo.getSheetByName('PlantillaCorreo').getRange(3,1).getValue(); var cuota = MailApp.getRemainingDailyQuota(); Logger.log(cuota); if(hojaCotizador.getName()==nombreBase){ var correo = hojaCotizador.getRange("D8").getValue(); var razonSocial = hojaCotizador.getRange("D5").getValue(); var nombreContacto = hojaCotizador.getRange("D9").getValue(); var mensajeAlerta = "El correo no pudo ser enviado"; var asunto = "Cotización de la Empresa X"; var mensaje = plantilla.replace("{{correo}}",correo) .replace("{{razonSocial}}",razonSocial) .replace("{{nombreContacto}}",nombreContacto) if(correo==""){ SpreadsheetApp.getUi().alert(mensajeAlerta) }else{ const archivo=DriveApp.getFileById("abcdefghijklmnopqrstuvwxyz123"); const blob=archivo.getAs(MimeType.PDF) GmailApp.sendEmail(correo,asunto,mensaje, { attachments: [blob] }); }
Hola que tal Espero me puedan apoyar mi Duda al llenar la pantilla los datos me salen como muchos digitos despues del punto decimal , ya que es el resultado de un porcentaje. hay alguna forma donde esto pasarlo a un entero ? gracias
Hola Richard La verdad no estoy seguro Tengo que revisar la API de whatsapp Espero hacer un video de eso mas adelante si se puede (Se debe poder) Saludos
Hola! Mil disculpas. Esta es parte de una serie más larga (La verdad debí hacerlo mas independiente) Aquí te dejo las partes anteriores Enviar desde plantilla - th-cam.com/video/rNfHOp8OHeU/w-d-xo.html Enviar con un boton - th-cam.com/video/28EMj-Gs9C8/w-d-xo.html Enviar con un boton 2 - th-cam.com/video/hp2W51iK2Tk/w-d-xo.html Saludos!
Este video no me quedo claro, me confundió un poco lo que ya tenias hecho y sobre todo que como voy viendo en secuencia sobre el envio de correos desde googlesheets, los 2 dos primero no tuve problema y los corrí y funcionaron bien, pero este ultimo me esta dando problemas porque me sale mensaje de error "fila is not defined"..... si es posible hacer otro video y si vienes de una secuencia, usar los mismos nombre de libros, hojas, variantes, campos, etc. Si das cursos sobre esto por favor indicame como los puedo tomar. Gracias.
Hola Roberto Tienes toda la razón La verdad es que los videos a veces parecen estar un poco desconectados, y uno se puede llegar a perder Te recomiendo pasarte por la academia donde tengo dos cursos del tema. Envío de correos - juansguzman.teachable.com/p/envio-de-correos/ Envío de correos masivos - juansguzman.teachable.com/p/envio-masivo-de-correos-con-google-sheets-google-apps-script-y-gmail/ Ahí trato de ser mucho más secuencial e ir paso a paso, además que me puedes ir preguntando cualquier cosa de las lecciones Un gran saludo!
Cómo puedo programar un botón por hoja del libro de Google sheets?, o bien configurar con un botón para que envíe correos personalizados para todos los contactos separados en distintas hojas?
hola Juan S Gusman me esta dando un error en esta linea y no logro entender el porque del error "contactos.forEach(funtion(fila){" agradeceria tu respuesta. Muchas graias
Hola de nuevo juan. Muy bueno el vídeo como siempre, pero, me aparece este mensaje: TypeError: contactos.forEach is not a function (línea 107, archivo "Código"). Con respecto a la cuota diaria es posible que aparte de recibir un mensaje de notificación se pueda reactivar el envío al resto de email cuando haya cuota disponible y también si es posible hacer una función con un botón para detener el envío de correos, incluso con un enlace en la notificación por correo electrónico. Gracias
Hola! Déjame ver todo el código para que encontremos el error. En cuanto a lo otro, yo creo que podemos hacer un check para saber cuáles envió hoy y de pronto poner un activador todos los días en la mañana por ejemplo, para que revise cuáles no se han enviado y los envíe automáticamente Lo de detener no estoy tan seguro. De pronto podemos es poner un mensaje de confirmación antes de enviarlos Saludos!
@@JuanSGuzman hola juan , me sale el mismo error que el compañero contactos.forEach is not a function te ddejo el codigo completo , desde ya muchas gracias ! } function enviarMailActual(){ //variables de configuracion const nombrebase = "BD" const filaencabezado = 1 const colcorreo = 1; const colnombre = 2; const coltelefono = 3; const colproducto = 4; const colfecha = 5; const colconfirmacion = 6; const colfechaenvio = 7; const mensajealerta = "No existe correo valido"; const mensajeexito = "Correo enviado Exitosamente"; const archivo = SpreadsheetApp.getActiveSpreadsheet(); var hoja = archivo.getActiveSheet(); var plantilla = archivo.getSheetByName("plantilla").getRange('A1').getValue(); var config = archivo.getSheetByName("configuracion"); var asunto = config.getRange('B2').getValue(); var nombrecorreo = config.getRange('B1').getValue();
if(hoja.getName()==nombrebase){ var activa = hoja.getActiveCell(); var filaActiva = activa.getRow(); if(filaActiva>filaencabezado){ var correo = hoja.getRange(filaActiva,colcorreo).getValue(); var nombre = hoja.getRange(filaActiva,colnombre).getValue(); var telefono = hoja.getRange(filaActiva,coltelefono).getValue(); var producto = hoja.getRange(filaActiva,colproducto).getValue(); var fecha = hoja.getRange(filaActiva,colfecha).getValue(); var mensaje = plantilla .replace("{nombre}",nombre) .replace("{producto}" ,producto) .replace("{fecha}" ,fecha) .replace("{telefono}" ,telefono)
if(correo==""){ SpreadsheetApp.getUi().alert(mensajealerta) }else{ GmailApp.sendEmail(correo, asunto ,mensaje, {name:nombrecorreo}); hoja.getRange(filaActiva,colconfirmacion).setValue('OK'); hoja.getRange(filaActiva,colfechaenvio).setValue(new Date()); SpreadsheetApp.getUi().alert(mensajeexito); } }else{ SpreadsheetApp.getUi().alert("debe estar situado en uno de los contactos")
//cierre if filaencabezado }}else{ SpreadsheetApp.getUi().alert("debe estar en la pestaña "+ nombrebase +" para enviar mail") } }// cierre if pestaña activa //funcion para multi correos function mailmerge(){ const nombredatos = "BD" const nombreconfig = "configuracion"
var archivo = SpreadsheetApp.getActiveSpreadsheet(); var hoja = archivo.getSheetByName(nombredatos); var config = archivo.getSheetByName(nombreconfig); var contactos = hoja.getRange(2, 1, 5, 7).getValue(); var asunto = config.getRange('B2').getValue();
contactos.forEach(function(fila){ Logger.log(fila[0]); var mensaje = crearmensaje(fila); GmailApp.sendEmail(fila[0], asunto, mensaje);
}) } function crearmensaje(datos){ var plantilla = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("plantilla").getRange('A1').getValue(); var mensaje = plantilla .replace("{nombre}",datos[1]) .replace("{producto}",datos[2]) .replace("{fecha}",datos[3]) .replace("{telefono}",datos[4]) return mensaje
@@robertomaldonado7438 Hola Roberto Pone una "s" al final de esta linea (antes del parentesis y punto y coma) var contactos = hoja.getRange(2, 1, 5, 7).getValue(); Saludos!
@@JuanSGuzman te pasaste , eres el mejor! . la ultima duda , al momento de enviar el asunto el cual lo tengo con la fecha me sale de esta menera la entrega no se pudo realizar el dia Tue Jul 06 2021 00:00:00 GMT-0400 (Chile Standard Time) es posible solo dejarlo con jul 06 2021?
Muchas gracias por tu aporte para los que deseamos aprender este tema. Me sale error al correr el onOpen: ____________________________________________ Error ReferenceError: Spreadsheet is not defined ____________________________________________ Me pudieras apoyar diciéndome como corregir este error. De nueva cuenta, muchas gracias por el apoyo.
@@JuanSGuzman Hola, de antemano gracias por tu apoyo. Me marca el mismo error en tres partes del código, las cuales te hago llegar: config.getRange("B3").setValue(cuota); Logger.log(cuota); contactos.forEach(function(fila){ var mensaje = crearMensajeHtml(fila); enviarMail(fila[0],asunto,mensaje,nombreCorreo) }) } El error es: Registro de ejecución 11:30:34 Aviso Se ha iniciado la ejecución 11:30:01 Información 33.0 11:30:36 Error ReferenceError: crearMensajeHtml is not defined (anónimo) @ Correo Actual.gs:98 mailMerge @ Correo Actual.gs:97 El segundo error es: function onOpen() { crearMenu(); } function crearMenu(){ const miMenu = Spreadsheet.App.getUi().createMenu("Acciones"); miMenu .additem("Enviar Mail a contacto actual","enviarMailActual") .additem("Enviar correos masivos","mailMerge").addToUi() .addToUi() } onOpen: Registro de ejecución 11:33:35 Aviso Se ha iniciado la ejecución 11:33:35 Error ReferenceError: Spreadsheet is not defined crearMenu @ Correo Actual.gs:7 onOpen @ Correo Actual.gs:3 crearMenu: Registro de ejecución 11:33:56 Aviso Se ha iniciado la ejecución 11:33:56 Error ReferenceError: Spreadsheet is not defined crearMenu @ Correo Actual.gs:7
@@gerardopena788 Hola Mil gracias por compartir Error 1. No es Spreadsheet.App sino SpreadsheetApp Error 2. Copiaste la función crearMensajeHtml? Un gran saludo!
Hola! El limite es de 100 destinatarios para cuentas gratis. Te puedes pasar a una cuenta workspace y te aumenta a 1500. developers.google.com/apps-script/guides/services/quotas Saludos!
@@JuanSGuzman pues no, no me deja. mi codigo en mi GAS es algo talque así: var correos = [(aqui dentro tengo 57 correos] y cuando trato de enviar con "GmailApp.sendEmail(correos , asunto, mensaje, { name: plantillaNombre });" Dice que me excedo en la cantidad maxima de destinatarios. Si le quito unos 7, si me deja... es decir que el máximo es 50. No tengo idea que puede ser. Y como tengo todos los correos en una celda separados por coma, no se me ocurre como partirlo en 2
@@oxpey4473 Exacto. o te deja enviar mas de 50 en uno solo Más fácil hacerlo con un codigo masivo que lo mande uno por uno y ahi si puedes enviar los 100 en gratis y los 1500 en pago Saludos!
En la ultima actualización se ve todo muy diferente y no es tan practico, quiero decir que no hay tantas opciones de funciones o de comandos de apps scrip, me ha dado muchos problemas para ejecutar el codigo
Hola Juan!, me han sido de gran ayuda tus videos, hice algo similar a lo que tu muestras, pero tengo una duda. en tu ejemplo solo designas una columna para los correos, en mi caso tengo dos columnas designadas para los correos destinatarios. El problema es que solo se envía a un correo, cuando debería mandarse a ambos. Te paso el fragmento del código, me podrías ayudar a saber que estoy haciendo mal, por favor? :'v Aquí se manda el correo: var message = template.evaluate().getContent(); MailApp.sendEmail({ to: empleado.email, subject: empleado.celebraciones[cel].asunto, htmlBody: message, }); Y aquí "declaro" que celdas se van a leer: var empleado = { email: rec[0], correo: rec[1], Nombre: rec[2], insignia: rec[4], celebraciones: celebraciones }; correo, es la 2da columna del 2do correo. :c
Hola! Cuando vas a enviar a varios mails, te toca hacer una cadena separada por comas entonces seria to:empleado.email+","+empleado.correo Me cuentas si te funciona Saludos!
Hola Juan! Muchas gracias por tus videos, los estoy aplicando a la par que los vas subiendo. Tengo una duda, si quisiera enviar el mismo mensaje a dos correos, cómo podría adicional el segundo? Por ejemplo: En la fila dos que está ubicado el cliente Sebastián, quiero enviar ese mismo correo con la misma plantilla y los mismos datos de Sebastián pero no solo al correo Guzman.sheets@gmail.com sino a otro adicional. No necesito que sea una copia oculta, simplemente que el mismo cuerpo del correo tenga dos destinatarios, en ese caso cómo podría realizarlo? Muchas gracias :)
Hola Daniela Es muy fácil! Simplemente en la variable "destinatario" inserta dentro de las comillas los correos que quieras, separados por comas Si los tienes en distintas celdas puedes concatenarlo en una sola variable. Por ejemplo, si lo tuvieras asi: en la celda A2 el primer mail en la celda A3 el segundo mail en la celda A4 el tercer mail el comando seria GmailApp.sendEmail(fila[0]+","+fila[1]+","+fila[2],asunto, mensaje) Si por otro lado, el correo 2 y 3 van a ser los mismos, entonces se los agregas GmailApp.sendEmail(fila[0]+",pedro@hotmail.com,info@paraguas.com"],asunto, mensaje) Mas facil aun, insertalos en tu columna A separados por coma, y te los deberia enviar a todos Me cuentas si te funciona Saludos!
Hola! En este caso "datos es un argumento de la función crearMensaje por lo que no hay que declararla Simplemente cuando llames a esa función tienes que darle un objeto En nuestro caso la llamaamos en la linea 104 asi crearMEnsaje(fila[0]) Tienes razón ue el tema de llamar funciones es un poco mas avanzado y no debí meterlo en este video. Me queda de enseñanza Saludos
Hola Buena Tarde, quiero felicitarte y darte las gracias por el apoyo que nos brinda. tus videos son de gran ayuda Dios te bendiga.
Hola!
Que amables palabras! Mil gracias!
Saludos!
Hola excelente, gracias. ¿Se puede hacer lo mismo con un for y se pueden enviar adjuntos personalizados?
Hola!
Si y si, jaja
Te dejo la lista de envío de correos
th-cam.com/video/lPt5cAhnlFs/w-d-xo.html
Saludos!
Super bien explicado y claro!!! Mil gracias, mi trabajo se ha vuelto mucho más eficiente gracias a tus tutoriales. Grande Ing. Guzmán!
Mil gracias Bernardo!
Me estoy devorando todos tus videos. Excelentes, sigue así 💪
Hola, Excelente video, y especialmente tienes un don para explicar, vas paso a paso totalmente claro , me ha ayudado muchísimo, seguí tus videos anteriores y este pero no supe como hacer para que me cambie el asunto por cada correcto.
Hola!
Mil gracias!
Lo voy a explicar en la parte 2 de este, espero estrenarlo muy pronto
Un gran saludo!
Hola, excelente video. La verdad yo no sabía nada de Sheets hasta que llegue a tu canal, muchas gracias. Solo dos consultas. ¿Como puedo omitir la instrucción cuando en mi listado no tengo algún correo y no me lance error al ejecutar? y ¿Cómo puedo insertar una firma digital al final de cada correo enviado? esto último debido a que tengo la firma configurada pero no aparece una vez enviada.
Espero me puedas instruir en esas dos consultas. ¡De antemano muchas gracias!
Intenta cambiar el forEach así
contactos.forEach(function(fila){
if(fila[0]){
var mensaje = crearMensaje(fila);
GmailApp.sendEmail(fila[0], asunto, mensaje);
}
})
Saludos!
hola juan gracias por compartir tus conocimientos, solo para ver si pudieras decirme que cuando se realiza un formulario los resultados de este mismo, se vayan a una hoja de calculo y estos también a un correo.
Hola!
Que se vayan a una hoja de cálculo se puede hacer automáticamente simplemente enlazando el formulario con sheets
Para el envió del mail, puedes usar este mismo código pero atarlo a un activador que se ejecute con el envío del formulario.
Te dejo un video de activadores
th-cam.com/video/lrQQrOA_uKw/w-d-xo.html
Saludos!
Impresionante la utilidad de tus vídeos y lo bien explicado.muchisimas gracias desde Argentina
Hola Alejandro
Mil gracias por tus palabras!
Un gran saludo!
Muchas gracias por compartir su conocimiento!!! funciona perfectamente ..si el correo esta mal digitado ..sale error y deja de enviar ....es posible que si no esta correcto el correo continúe enviando a las siguientes celdas
Nuevamente Muchas gracias Ing. Guzman por sus aportaciones
Con esto vamos más allá de sheets, y combinamos con gmail, para automatizar funciones.
Felicidades por el canal, la página, y todos cursos
Mil gracias por tus palabras Felipe!
Hola
Me has ayudado un montón
Mil gracias
Casi no tengo conocimiento de programación y lo logré excelente explicación
En mi trabajo debo enviar este mismo formato varios correos así como este cómo si fuera combinación de correspondencia, pero debe irse a uno o dos destinatarios y copia a mi jefe y/o jefes de los destinatarios
He buscado y encontré correo con copia pero envío sencillo no con Plantilla....
Ayudaaa cómo se llama el video?..
Puedo copiar los códigos y pasarlos?🤯🤯
Gracias gracias gracias
Hola!
Gracias por tus palabras!
con plantilla no cambia nada, usa las opciones
GmailApp.sendMail(destinatario,asunto,mensaje.{
cc:"jj@gmail.com",
bcc:"jj@gmail.com",
}
Saludos!
Hola! Juan ! Buen dia, como logro evitar que al oprimir enviar correo masivo me vuelva a enviar a los que ya fueron enviados ? y como logro colocar el OK de enviado automáticamente tambien en los envios masivos ? Muchas gracias !
Hola Fernando,
Aquí te dejo una serie de combinar correspondencia que te dara luces
th-cam.com/video/8g2C15DkVbM/w-d-xo.html
Saludos!
EXCELENTE JUAN!!! Consulta: Necesito enviar por email turnos personalzidos (los cargados en la sheet) pero a su vez necesito el destinatario del correo me envie confirmacion de asistencia. Como puedo implementarlo? Desde Ya MILLON DE GRACIAS POR COMPARTIR TUS CONOCIMIENTOS
Hola buen video
Ese icono es de telgram.
entonces hubo o habrá un video sobre envio de mensajes de sheets a telegram?
Hola Juan
Por fa Tambien me pueee decir si en la plantilla puedo marcar texto en negrita? Por ejemplo el nombre del destinatario y a donde queda el registro de envio de correos no salen en mi Gmail 😢
Para esto tienes que usar plantillas html
Te dejo un video
th-cam.com/video/bDA7vZSaKNA/w-d-xo.html
Saludos!
Gracias por el video, ha servido de mucha ayuda. Pregunta: De que forma puedo enviar una selección a una variable ??
Excelente JuanS. Sugiero complementar envío de correo adjuntando una archivo conformado por una copia de una de las hojas de mi archivo
Hola Juan Carlos
Muy buena idea
La otra semana viene un video de adjuntos...después veremos la generación de PDFS
un gran saludo!
Hola Juan !
Me ha ayudado mucho tus videos, una consulta , si quiero que en el mensaje del correo salga una fecha en formato fecha y hora , como lo podría modificar ?
saludos cordiales . Buen inicio de año !
Muchas gracias Juan. Me gustaria saber se hay alguna opción para agendar el envio masivo
Hola Tiago
Claro que si, esto se hace con los activadores por tiempo
Usas la misma función que hicimos aquí pero le creas un activador por tiempo
Aquí te dejo un video
th-cam.com/video/lrQQrOA_uKw/w-d-xo.html
Saludos!
@@JuanSGuzman muchas gracias por compartir sus conocimientos con nosotros.
@@tiiiagosoares Gracias a ti por tus amables comentarios!
Juan Antes que todo lo felicito por su labor, referente a estos temas este es el mejor canal que existe. Gracias por compartir su sabiduría.
Tengo una 2 preguntas, ojalá me pueda ayudar
al enviar el correo de forma automática como puedo cambiar el formato de la fecha que aparece por default
Wed Dec 22 2021 11:00:00 GMT-0500 (hora estándar oriental
Cambiarlo por alguno distinto por ejemplo: 22/12/2021 11:00
La segunda cuestión es que me aparece diferente la zona horaria que tengo capturada en mi hoja a la que se manda en el correo en automático, como hago para ambos tengan la misma zona horaria ??
De antemano muchas gracias y nuevamente felicidades por todo su trabajo.
Hola Juan he estado siguiendo tus videos y me han ayudado muchisimo para los envios de mail.
La unica duda que me queda sobre el Mail Merge es: ¿puedo generar una huella que diga cuando se hizo el envio de todos los correos? Asi como en el video de enviar correo por fila que se dejaba la huella por cada fila. espero puedas ayudarme. Saludos.
Hola Joe
Mil gracias
Claro que se puede.
YA estoy trabajando en el segundo video de Mail Merge para explicar esto. Alguna otra sugerencia?
Saludos!
Hola, gracias he aprendido bastante con tus videos. En el caso que quiera enviar un correo masivo sin que cambie el texto a muchos contactos, ¿cómo puedo hacer para que se envíe un solo email?, para que no me consuma correos de mi cuota diaria. Ejemplo enviar un email para enviar un informe, necesito que se envíen a 20 contactos (de un listado vertical A2:A20), pero usando solo 1 correo de mi cuota diaria.
Hola Felipe
Mil gracias!
Ya viste este video?
th-cam.com/video/EZNieWrG_Dk/w-d-xo.html
Ojalá te sirva
Saludos!
Hola Juan muy buena explicación, me gustaría que nos ayudaras para enviar un correo con imagenes y botones css para darle un poco mas de interactividad. muchas gracias
Hola Elkin
Acabo de publicar este video que creo que te ayudará
th-cam.com/video/QccQGWxNCWA/w-d-xo.html
Me cuentas si te sirvió
Saludos!
Juan, gracias por el vídeo. Estoy intentando aplicar el programa de “Mail Enviado” para que me ponga el OK cada vez que envía el correo pero me quedo estancado. Comentaste que harías un vídeo pero no lo he visto, me lo podrías explicar? Mil gracias, es que estoy teniendo problemas para establecer el número de fila dinámico para que vaya cambiando según qué fila este tocando. Gracias
Hola!
No se si ya viste este video
th-cam.com/video/D9ak2IYcEf8/w-d-xo.html
Un gran saludo!
Hola esto sirve cuando el Sheets es resultado de un formulario que va alimentando es deir en el Sheets los registros van incrementando?
Claro que si
Debería funcionarte
Saludos!
Una consulta, si tengo una cuenta empresarial pero es de outlook, hay alguna alternativa
Hola Manuel
Obligatoriamente debes tener gmail, pero puedes hacer algunos trucos como en este video
th-cam.com/video/9ebNJcR9k9c/w-d-xo.html
Saludos!
muy bueno el contenido, podria hacer las letras de mayortamaño.gracias
Hola!
Muchas gracias por la sugerencia! Voy a ponerla en práctica
Saludos!
excelente se podria poner check para indicar cual se va a enviar dado que puedo tener como indica google maximo 100 y deseo enviar hoy dia un ejemplo 100 mañana los otros 100 que me falta pero tengo mas de 400 correos por enviar como poner una marca en que me he quedado por enviar
Hola en unos pocos días sale la segunda parte , y creo que te va a servir mucho.
Saludos!
Inge, se puede adjuntar archivos para enviarlos de manera individual a cada correo ?
Hola
Claro que si
Aquí te dejo el video
th-cam.com/video/w6UOy1PPXV4/w-d-xo.html
Un gran saludo!
@@JuanSGuzman Gracias profe, sería bueno que hiciera un vídeo de cómo envíar mensajes y archivos personalizados por Whatsapp desde sheets 💪
@@algoritmolegal Hola! Al fin lo lancé hace algunos meses. No es el mejor, pero ha servido a algunos. Gracias por esa sugerencia. Saludos!
Hola Juan! Como estás? En el caso que quiera incluir en un mismo mail, información de varias filas que contengan check box en TRUE (para poder delimitar que filas quiero enviar) cómo debería indicarle eso mismo al código? Gracias!
Hola Fiorella
Muy interesante el reto
Lo dejo para un video
Un gran saludo!
Buenos días Juan, muchas gracias por tu vídeo, quería hacerte una consulta con respecto al vídeo, sería posible enviar más correos del limite de 100 por día, por ejemplo compartiendo el google Sheets y desde las otras cuentas compartidas enviar más correos?, excelentes vídeos.
Hola Josue
Mil gracias por tus palabras!
Pues la forma más fácil es avanzando a un plan pago
Yo creo que siempre envía del correo del propietario, por lo que lo único que se me ocurre es tener varias bases y que de alguna manera se alimenten y se comuniquen con IMPORTRANGE o con un código cuando ya se hayan enviado otros correos
Un gran saludo!
Hola Juan, muy bueno, como siempre.
Tengo Plantillas diferentes en las que cambio un poco el texto según algunas particularidades del contacto. Con el envío individual, pongo la plantilla en una columna al lado de cada contacto y la puedo invocar con el recurso de que tome esa columna de la fila activa.
Pero en este caso de envío masivo, no logro saber como hacer lo mismo. ¿Cómo puedo hacer para que tome la plantilla ubicada en cada fila en vez de que la levante de una celda puntual?
No sé si logro explicarme.
Saludos.
Mil disculpas Matias por la demora
Estas preguntas más difíciles las dejo en un repositorio especial para responderlas más adelante.
Primero cuéntame si pudiste solucionar.
Hola gracias, me gustaría que la plantilla fuera un documento de Google doc, para poder usar encabezado con el logo de la institución y texto de diferente tipo y que lo mande como PDF al correo de cada alumno, lo quiero para informar las calificaciones a cada alumno de mi materia
Hola Juan!! Muy buenos tus videos.
Pregunta: todas las semanas le envío un mail a cada vendedor (son 25), con un listado de clientes deudores y sus saldos respectivos. Esta información está en una planilla (podría ser 1 hoja por cada vendedor), con varias filas y columnas las cuales van cambiando de tamaño. Con este video, podría hacer estos envíos? Me pierdo en la parte de la planilla. Espero me puedas ayudar, muchas gracias!
Hola Leonardo!
En dos semanas sale un vídeo que creo que te podría ayudar a solucionar
Un gran saludo!
@@JuanSGuzman Genial, lo voy a aguardar entonces! Gracias! Entre nosotros, me interesa mucho aprender sobre estos temas (soy fanático del Excel, lo uso para trabajar y me gusta el entorno GSheet). Dónde te parece que pueda hacer algún curso?
@@leonardolb85 Hola Leonardo
Mil gracias!
Te cuento que acabo de lanzar una academia online por suscripciòn de solo Sheets y Apps Script
Hay 6 cursos actualmente
Sheets Basico
Forms Basico
Inventarios
Apps Scripts Basico
Apps Script para Sheets
Validaciones de Datos
Cada 15 días llega un nuevo curso. Los próximos son:
Listas Desplegables
Query
Envío de mails
También ahí encuentras todas las plantillas de los videos de TH-cam
Y los estudiantes sugieren los proximos cursos o lecciones adicionales de los cursos existentes.
Tambien, respondo mucho más rápido que por TH-cam
Aquí te dejo un curso gratis de muestra
juansguzman.teachable.com/p/descubriendo-el-poder-de-google-sheets-de-0-a-100-en-2-horas/
Y la academia
juansguzman.teachable.com/
Un gran saludo!
PS. Tambien tengo unos cursos en Udemy, pero la verdad me parece mejor opción esta academia
@@JuanSGuzman Cuando subas este video del que hablás, pls avisame ! Gracias !
@@leonardolb85 Hola!
Es este
th-cam.com/video/t64C5GfkA70/w-d-xo.html
Me cuentas
Eres el puto amo de sheets
Hola Juan muchas gracias como siempre por tan grande aportación, te felicito. Disculpa, tengo un formato de cotización y tomé algunas de las variables dentro del formato para la plantilla, esto es, el correo, el nombre cliente y la razón social. Cuando el correo se envía con el archivo adjunto, el PDF aparte de la hoja de la cotización imprime todas las demás las hojas del libro, esto es, la de la plantilla y la de los clientes y productos, pero me gustaría especificar en el código que sólo imprima la primera pestaña (en este caso, se llama Cotizador) este es el código, agradezco cualquier observación. Saludos.
function enviarCorreo()
{
const nombreBase = 'Cotizador'
const archivo = SpreadsheetApp.getActiveSpreadsheet()
const hojaCotizador = archivo.getSheetByName('Cotizador');
var plantilla = archivo.getSheetByName('PlantillaCorreo').getRange(3,1).getValue();
var cuota = MailApp.getRemainingDailyQuota();
Logger.log(cuota);
if(hojaCotizador.getName()==nombreBase){
var correo = hojaCotizador.getRange("D8").getValue();
var razonSocial = hojaCotizador.getRange("D5").getValue();
var nombreContacto = hojaCotizador.getRange("D9").getValue();
var mensajeAlerta = "El correo no pudo ser enviado";
var asunto = "Cotización de la Empresa X";
var mensaje = plantilla.replace("{{correo}}",correo)
.replace("{{razonSocial}}",razonSocial)
.replace("{{nombreContacto}}",nombreContacto)
if(correo==""){
SpreadsheetApp.getUi().alert(mensajeAlerta)
}else{
const archivo=DriveApp.getFileById("abcdefghijklmnopqrstuvwxyz123");
const blob=archivo.getAs(MimeType.PDF)
GmailApp.sendEmail(correo,asunto,mensaje, {
attachments: [blob]
});
}
Hola que tal Espero me puedan apoyar mi Duda al llenar la pantilla los datos me salen como muchos digitos despues del punto decimal , ya que es el resultado de un porcentaje. hay alguna forma donde esto pasarlo a un entero ? gracias
Haz el formato en tu Sheet y en vez de getValue usa getDisplayValue
Saludos!
¿Algo similar de podría hacer con WhatsApp, en vez de un e-mail?
Hola Richard
La verdad no estoy seguro
Tengo que revisar la API de whatsapp
Espero hacer un video de eso mas adelante si se puede (Se debe poder)
Saludos
Mago!
Mil gracias ♥
Hola!
Que amables palabras! Mil gracias!
Saludos!
Hola Juan!, donde esta la funcion crear mensaje me perdí, de donde sale al variable datos?
Hola!
Mil disculpas.
Esta es parte de una serie más larga (La verdad debí hacerlo mas independiente)
Aquí te dejo las partes anteriores
Enviar desde plantilla - th-cam.com/video/rNfHOp8OHeU/w-d-xo.html
Enviar con un boton - th-cam.com/video/28EMj-Gs9C8/w-d-xo.html
Enviar con un boton 2 - th-cam.com/video/hp2W51iK2Tk/w-d-xo.html
Saludos!
Este video no me quedo claro, me confundió un poco lo que ya tenias hecho y sobre todo que como voy viendo en secuencia sobre el envio de correos desde googlesheets, los 2 dos primero no tuve problema y los corrí y funcionaron bien, pero este ultimo me esta dando problemas porque me sale mensaje de error "fila is not defined"..... si es posible hacer otro video y si vienes de una secuencia, usar los mismos nombre de libros, hojas, variantes, campos, etc. Si das cursos sobre esto por favor indicame como los puedo tomar. Gracias.
Hola Roberto
Tienes toda la razón
La verdad es que los videos a veces parecen estar un poco desconectados, y uno se puede llegar a perder
Te recomiendo pasarte por la academia donde tengo dos cursos del tema.
Envío de correos - juansguzman.teachable.com/p/envio-de-correos/
Envío de correos masivos - juansguzman.teachable.com/p/envio-masivo-de-correos-con-google-sheets-google-apps-script-y-gmail/
Ahí trato de ser mucho más secuencial e ir paso a paso, además que me puedes ir preguntando cualquier cosa de las lecciones
Un gran saludo!
@@JuanSGuzman ya me inscribí. Súper !!!
@@RobertoJurado Excelente!
Ojalá te sirva y quedo pendiente de todas tus dudas!
Saludos y mil gracias!
Buenísimo! Gran material 👍
Mil gracias!
Cómo puedo programar un botón por hoja del libro de Google sheets?, o bien configurar con un botón para que envíe correos personalizados para todos los contactos separados en distintas hojas?
hola Juan S Gusman me esta dando un error en esta linea y no logro entender el porque del error "contactos.forEach(funtion(fila){" agradeceria tu respuesta. Muchas graias
Hola!
Cambia funtion por function
Saludos!
Hola de nuevo juan. Muy bueno el vídeo como siempre, pero, me aparece este mensaje:
TypeError: contactos.forEach is not a function (línea 107, archivo "Código").
Con respecto a la cuota diaria es posible que aparte de recibir un mensaje de notificación se pueda reactivar el envío al resto de email cuando haya cuota disponible y también si es posible hacer una función con un botón para detener el envío de correos, incluso con un enlace en la notificación por correo electrónico.
Gracias
Hola!
Déjame ver todo el código para que encontremos el error.
En cuanto a lo otro, yo creo que podemos hacer un check para saber cuáles envió hoy y de pronto poner un activador todos los días en la mañana por ejemplo, para que revise cuáles no se han enviado y los envíe automáticamente
Lo de detener no estoy tan seguro. De pronto podemos es poner un mensaje de confirmación antes de enviarlos
Saludos!
@@JuanSGuzman hola juan , me sale el mismo error que el compañero contactos.forEach is not a function
te ddejo el codigo completo , desde ya muchas gracias !
}
function enviarMailActual(){
//variables de configuracion
const nombrebase = "BD"
const filaencabezado = 1
const colcorreo = 1;
const colnombre = 2;
const coltelefono = 3;
const colproducto = 4;
const colfecha = 5;
const colconfirmacion = 6;
const colfechaenvio = 7;
const mensajealerta = "No existe correo valido";
const mensajeexito = "Correo enviado Exitosamente";
const archivo = SpreadsheetApp.getActiveSpreadsheet();
var hoja = archivo.getActiveSheet();
var plantilla = archivo.getSheetByName("plantilla").getRange('A1').getValue();
var config = archivo.getSheetByName("configuracion");
var asunto = config.getRange('B2').getValue();
var nombrecorreo = config.getRange('B1').getValue();
if(hoja.getName()==nombrebase){
var activa = hoja.getActiveCell();
var filaActiva = activa.getRow();
if(filaActiva>filaencabezado){
var correo = hoja.getRange(filaActiva,colcorreo).getValue();
var nombre = hoja.getRange(filaActiva,colnombre).getValue();
var telefono = hoja.getRange(filaActiva,coltelefono).getValue();
var producto = hoja.getRange(filaActiva,colproducto).getValue();
var fecha = hoja.getRange(filaActiva,colfecha).getValue();
var mensaje = plantilla
.replace("{nombre}",nombre)
.replace("{producto}" ,producto)
.replace("{fecha}" ,fecha)
.replace("{telefono}" ,telefono)
if(correo==""){
SpreadsheetApp.getUi().alert(mensajealerta)
}else{
GmailApp.sendEmail(correo, asunto ,mensaje, {name:nombrecorreo});
hoja.getRange(filaActiva,colconfirmacion).setValue('OK');
hoja.getRange(filaActiva,colfechaenvio).setValue(new Date());
SpreadsheetApp.getUi().alert(mensajeexito);
}
}else{
SpreadsheetApp.getUi().alert("debe estar situado en uno de los contactos")
//cierre if filaencabezado
}}else{
SpreadsheetApp.getUi().alert("debe estar en la pestaña "+ nombrebase +" para enviar mail")
}
}// cierre if pestaña activa
//funcion para multi correos
function mailmerge(){
const nombredatos = "BD"
const nombreconfig = "configuracion"
var archivo = SpreadsheetApp.getActiveSpreadsheet();
var hoja = archivo.getSheetByName(nombredatos);
var config = archivo.getSheetByName(nombreconfig);
var contactos = hoja.getRange(2, 1, 5, 7).getValue();
var asunto = config.getRange('B2').getValue();
contactos.forEach(function(fila){
Logger.log(fila[0]);
var mensaje = crearmensaje(fila);
GmailApp.sendEmail(fila[0], asunto, mensaje);
})
}
function crearmensaje(datos){
var plantilla = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("plantilla").getRange('A1').getValue();
var mensaje = plantilla
.replace("{nombre}",datos[1])
.replace("{producto}",datos[2])
.replace("{fecha}",datos[3])
.replace("{telefono}",datos[4])
return mensaje
}
@@robertomaldonado7438 Hola Roberto
Pone una "s" al final de esta linea (antes del parentesis y punto y coma)
var contactos = hoja.getRange(2, 1, 5, 7).getValue();
Saludos!
@@JuanSGuzman te pasaste , eres el mejor! .
la ultima duda , al momento de enviar el asunto el cual lo tengo con la fecha
me sale de esta menera la entrega no se pudo realizar el dia Tue Jul 06 2021 00:00:00 GMT-0400 (Chile Standard Time)
es posible solo dejarlo con jul 06 2021?
@@robertomaldonado7438 Hola Roberto
Intenta cortar la fecha con el método .toLocaleDateString()
Me cuentas
Saludos!
Muchas gracias por tu aporte para los que deseamos aprender este tema.
Me sale error al correr el onOpen:
____________________________________________
Error
ReferenceError: Spreadsheet is not defined
____________________________________________
Me pudieras apoyar diciéndome como corregir este error.
De nueva cuenta, muchas gracias por el apoyo.
Hola Gerardo
Déjame ver como tienes el código
Saludos!
@@JuanSGuzman Hola, de antemano gracias por tu apoyo.
Me marca el mismo error en tres partes del código, las cuales te hago llegar:
config.getRange("B3").setValue(cuota);
Logger.log(cuota);
contactos.forEach(function(fila){
var mensaje = crearMensajeHtml(fila);
enviarMail(fila[0],asunto,mensaje,nombreCorreo)
})
}
El error es:
Registro de ejecución
11:30:34 Aviso Se ha iniciado la ejecución
11:30:01 Información 33.0
11:30:36 Error
ReferenceError: crearMensajeHtml is not defined
(anónimo) @ Correo Actual.gs:98
mailMerge @ Correo Actual.gs:97
El segundo error es:
function onOpen() {
crearMenu();
}
function crearMenu(){
const miMenu = Spreadsheet.App.getUi().createMenu("Acciones");
miMenu
.additem("Enviar Mail a contacto actual","enviarMailActual")
.additem("Enviar correos masivos","mailMerge").addToUi()
.addToUi()
}
onOpen:
Registro de ejecución
11:33:35 Aviso Se ha iniciado la ejecución
11:33:35 Error
ReferenceError: Spreadsheet is not defined
crearMenu @ Correo Actual.gs:7
onOpen @ Correo Actual.gs:3
crearMenu:
Registro de ejecución
11:33:56 Aviso Se ha iniciado la ejecución
11:33:56 Error
ReferenceError: Spreadsheet is not defined
crearMenu @ Correo Actual.gs:7
@@gerardopena788 Hola
Mil gracias por compartir
Error 1. No es Spreadsheet.App sino SpreadsheetApp
Error 2. Copiaste la función crearMensajeHtml?
Un gran saludo!
Hola juan cuando intento enviar un mail. Dice que alcancé el maximo de destinatarios (al parecer 50) se puede aumentar este limite?
Es decir necesito enviar un solo y mismo correo a 150 destinatarios en un solo correo
Hola!
El limite es de 100 destinatarios para cuentas gratis. Te puedes pasar a una cuenta workspace y te aumenta a 1500.
developers.google.com/apps-script/guides/services/quotas
Saludos!
@@JuanSGuzman pues no, no me deja. mi codigo en mi GAS es algo talque así:
var correos = [(aqui dentro tengo 57 correos]
y cuando trato de enviar con "GmailApp.sendEmail(correos , asunto, mensaje, { name: plantillaNombre });"
Dice que me excedo en la cantidad maxima de destinatarios.
Si le quito unos 7, si me deja... es decir que el máximo es 50.
No tengo idea que puede ser. Y como tengo todos los correos en una celda separados por coma, no se me ocurre como partirlo en 2
será por esto que dice el link que me pasaste?
Apps Script projects 50 / day
Email recipients per message 50 / msg
@@oxpey4473 Exacto. o te deja enviar mas de 50 en uno solo Más fácil hacerlo con un codigo masivo que lo mande uno por uno y ahi si puedes enviar los 100 en gratis y los 1500 en pago
Saludos!
Wow, esto está increíble
¿Dónde puedo ver el código completo? No lo encuentro en la juansguzman.com/
Hola Marco
No lo he subido aun al blog
Aquí te lo dejo
docs.google.com/spreadsheets/d/1TiZYn4vGPIWm2vPDjq4gwcRs8G_I1QTFsWyg6LnA8lk/copy
Saludos!
Agregar flechas para enviar los
Correos
Hola!
A que te refieres exactamente
Saludos!
En la ultima actualización se ve todo muy diferente y no es tan practico, quiero decir que no hay tantas opciones de funciones o de comandos de apps scrip, me ha dado muchos problemas para ejecutar el codigo
Podrias hacer un tutorial mas acualizado?
Claro que sí, ya lo anoto
Por ahora, puedes ver este video donde lo hago rapidamente en Sheets 2024
th-cam.com/video/ya7T9Q_3f9w/w-d-xo.html
Saludos!
Hola Juan!, me han sido de gran ayuda tus videos, hice algo similar a lo que tu muestras, pero tengo una duda. en tu ejemplo solo designas una columna para los correos, en mi caso tengo dos columnas designadas para los correos destinatarios.
El problema es que solo se envía a un correo, cuando debería mandarse a ambos. Te paso el fragmento del código, me podrías ayudar a saber que estoy haciendo mal, por favor? :'v
Aquí se manda el correo:
var message = template.evaluate().getContent();
MailApp.sendEmail({
to: empleado.email,
subject: empleado.celebraciones[cel].asunto,
htmlBody: message,
});
Y aquí "declaro" que celdas se van a leer:
var empleado =
{
email: rec[0],
correo: rec[1],
Nombre: rec[2],
insignia: rec[4],
celebraciones: celebraciones
};
correo, es la 2da columna del 2do correo. :c
Hola!
Cuando vas a enviar a varios mails, te toca hacer una cadena separada por comas
entonces seria
to:empleado.email+","+empleado.correo
Me cuentas si te funciona
Saludos!
hola Juan una consulta no me funciona en el var de mensaje las opciones .replace me da error que puede ser?
Hola!
Normalmente es que la variable a la que le estas haciendo replace no es un texto
Saludos!
@@JuanSGuzman es una formula de donde lo toma ahi forma que remplace por ese dato o no
@@rodrigozabala6149 Siempre lo puedes convertir a texto con toString()
Un gran saludo!
Hola Juan! Muchas gracias por tus videos, los estoy aplicando a la par que los vas subiendo.
Tengo una duda, si quisiera enviar el mismo mensaje a dos correos, cómo podría adicional el segundo?
Por ejemplo: En la fila dos que está ubicado el cliente Sebastián, quiero enviar ese mismo correo con la misma plantilla y los mismos datos de Sebastián pero no solo al correo Guzman.sheets@gmail.com sino a otro adicional. No necesito que sea una copia oculta, simplemente que el mismo cuerpo del correo tenga dos destinatarios, en ese caso cómo podría realizarlo?
Muchas gracias :)
Hola Daniela
Es muy fácil!
Simplemente en la variable "destinatario" inserta dentro de las comillas los correos que quieras, separados por comas
Si los tienes en distintas celdas puedes concatenarlo en una sola variable.
Por ejemplo, si lo tuvieras asi:
en la celda A2 el primer mail
en la celda A3 el segundo mail
en la celda A4 el tercer mail
el comando seria GmailApp.sendEmail(fila[0]+","+fila[1]+","+fila[2],asunto, mensaje)
Si por otro lado, el correo 2 y 3 van a ser los mismos, entonces se los agregas
GmailApp.sendEmail(fila[0]+",pedro@hotmail.com,info@paraguas.com"],asunto, mensaje)
Mas facil aun, insertalos en tu columna A separados por coma, y te los deberia enviar a todos
Me cuentas si te funciona
Saludos!
Juan S Guzman Sí me funcionó con las comas, Juan. Muchísimas gracias!
@@danielasandoval9 Excelente! Me alegro!
No he podido, :( me aparece un error con el getRange
Hola Andrea
Que error te sale
Un gran saludo!
No logro entender en qué momento se dio declaró "datos" 🥲
Hola!
En este caso "datos es un argumento de la función crearMensaje por lo que no hay que declararla
Simplemente cuando llames a esa función tienes que darle un objeto
En nuestro caso la llamaamos en la linea 104 asi crearMEnsaje(fila[0])
Tienes razón ue el tema de llamar funciones es un poco mas avanzado y no debí meterlo en este video. Me queda de enseñanza
Saludos