Una Macro para enviar email desde hoja excel usando gmail,com se puede o solo de outlook? Si me ayudan, gracias
Como hacer una macro que tome los datos de una hoja Excel, correo, asunto, cuerpo del texto, ¿archivo adjunto pero desde gmail o solo se puede de Outlook? Si alguien tiene la solución.
1 Respuesta
Este es el código
Sub SendMail_Gmail() 'Fuente: http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/337-enviar-correo-en-vb-con-microsoft-cdo.htm Dim Email As CDO.Message Set Email = New CDO.Message correo = "[email protected]" passwd = "tupassword" destino = "[email protected]" mensaje = "mensaje1" cuerpo = "cuerpo" Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" Email.Configuration.Fields(cdoSendUsingMethod) = 2 With Email.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1) .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True End With With Email .To = destino .From = correo .Subject = mensaje .TextBody = cuerpo .Configuration.Fields.Update On Error Resume Next .Send End With If Err.Number = 0 Then MsgBox "El mail se envió con éxito", vbInformation, "Informe" Else MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number End If End Sub
En esta parte del código pon tus datos:
correo = "[email protected]"
passwd = "tupassword"
destino = "[email protected]"
mensaje = "mensaje1"
cuerpo = "cuerpo"
Error dice "No se ha difinido el tipo definido por el usuario"
me marca esta linea Dim Email As CDO.Messag
otra consulta...
Se podrá tomar de una hoja de Excel por columna el correo, el asunto, cuerpo, archivo para adjuntar y establecer una ruta de donde tomarlo (escribirlo en una celda)
Si no se puede declarar esto, entonces no puedes enviarlo por gmail, tal vez es tu versión de excel.
Dim Email As CDO.Message
respecto al error, lo solucione activando Microsoft CDO for windows 2000 library en VBA herramientas, referencias...
Reitero esta consulta por favor
otra consulta...
Se podrá tomar de una hoja de Excel por columna el correo, el asunto, cuerpo, archivo para adjuntar y establecer una ruta de donde tomarlo (escribirlo en una celda)
Quedaría así:
Sub SendMail_Gmail() 'Fuente: http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/337-enviar-correo-en-vb-con-microsoft-cdo.htm Dim Email As CDO.Message Set Email = New CDO.Message correo = "[email protected]" passwd = "pwd" destino = "[email protected]" mensaje = Range("A1") cuerpo = Range("B1") archivo = Range("C1") Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" Email.Configuration.Fields(cdoSendUsingMethod) = 2 With Email.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1) .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True End With With Email .To = destino .From = correo .Subject = mensaje .TextBody = cuerpo .AddAttachment archivo .Configuration.Fields.Update On Error Resume Next .Send End With If Err.Number = 0 Then MsgBox "El mail se envió con éxito", vbInformation, "Informe" Else MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number End If End Sub
Tienes que cambiar estos datos:
correo = "[email protected]"
passwd = "pwd"
destino = "[email protected]"
mensaje = Range("A1")
cuerpo = Range("B1")
archivo = Range("C1")
En la celda A1 pon el mensaje
En la celda B1 pon el cuerpo del correo
En la celda C1 pon la ruta y el nombre del archivo, ejemplo:
C:\documentos\archivo.xlsx
Prueba la macro sin poner archivo. Te anexo la macro para probar sin archivo.
Revisa que los datos estén correctos. Tu correo de gmail, tu password de gmail, el correo del destinatario.
En la macro hay un 465 cámbialo por 25
Sub SendMail_Gmail() 'Fuente: http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/337-enviar-correo-en-vb-con-microsoft-cdo.htm Dim Email As CDO.Message Set Email = New CDO.Message correo = "[email protected]" passwd = "pwd" destino = "[email protected]" mensaje = Range("A1") cuerpo = Range("B1") 'archivo = Range("C1") Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" Email.Configuration.Fields(cdoSendUsingMethod) = 2 With Email.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1) .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True End With With Email .To = destino .From = correo .Subject = mensaje .TextBody = cuerpo '.AddAttachment archivo .Configuration.Fields.Update On Error Resume Next .Send End With If Err.Number = 0 Then MsgBox "El mail se envió con éxito", vbInformation, "Informe" Else MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number End If End Sub
Efectivamente, sin poner archivo funciona el código y envía el correo, buscando encontré un código de otro miembro que envía correos, utilizando outlook y tomas los datos de una hoja excel, se podrá modificar?? te copio
Sub proceso()
'fuente:por luismondelo
ruta = Range("d1").Value
Sheets("hoja1").Select
Set parte1 = CreateObject("outlook.application")
Range("a2").Select
Do While ActiveCell.Value <> ""
Set parte2 = parte1.createitem(olmailitem)
parte2.to = ActiveCell.Value
parte2.Subject = ActiveCell.Offset(0, 1).Value
parte2.attachments.Add ruta & ActiveCell.Offset(0, 2).Value
parte2.send
ActiveCell.Offset(1, 0).Select
Loop
End Sub
saludos
El codigo que te puse me funciona bien revisa que tengas bien escrito la ruta, el nombre y la extension del archivo
Estimado Dante, ahora el código me resulta adjuntando un archivo y pasaba porque el nombre del archivo debe estar con su extensión, ej: imagen.jpg. de igual forma escribí en el código la ruta del destinatario en un rango de celda y resulta bien, solo me queda una duda en este tema, si en la hoja de excel quiero listar varios correos cada uno con un asunto, cuerpo y archivo adjunto distinto que se debe hacer
Hay que hacer un ciclo para que vaya leyendo registro por registro y vaya enviando uno por uno.
Cambia la valoracion a esta pregunta porque responde a lo que pediste y crea una nueva pregunta dirigida a dante amor. En la nueva pregunta pones en que columna vas a poneer que dato.
¡Gracias!, haré la pregunta, pero la valoración la hice y es positiva, no sé que puedo cambiar, o algo no hago si me ayudas...
Primero es porque de alguna manera nos esforzamos por entregar respuestas que funcionen y segundo es por vanidad.
Cuando lees mi respuesta en la parte inferior te aparece esta pregunta:
¿Es una buena respuesta?
Y te aparecen 3 opciones:
Excelente Si No
Tu respuesta fue "Si", lo que puedes hacer es seleccionar el botón que dice "Cambiar" y después seleccionar "Excelente". Considero que la macro hace exactamente lo que pediste que era enviar un correo por gmail. Pero la decisión final es tuya.
- Compartir respuesta
Genial, me ha ayudado bastante. Yo recién comenzado a utilizar estas herramientas. Buen aporte. Pregunta. Para agregar más texto u otras celdas al mensaje del email, intente agregando más rango pero no lo reconoce al final. Gracias por compartir - Pablo Valderrama
Cambia a esto, por ejemplo: mensaje = Range("A1") & range("A2") & range("A3") - Dante Amor
Excelente comentarios y soporte Dante Amor Una consulta tienes idea ya tengo la macro activa y funcionando OK, pero precisaría si se puede enviar desde un Alias de Gmail.En el from para el Reply me lo toma Ok pero no consigo que el mail inicial salga desde el allias - Juan Manuel Cosceri
Hola, no tengo ese código para Gmail, en outlook se utiliza .SentOnBehalfOfName o .SendUsingAccount, pero en Gmail no sé cuál sea el parámetro. Tal vez con esos datos puedas encontrarlo en la red. - Dante Amor
todo esto es muy útil ... como se podría omitir la ruta del archivo a mandar, ósea que el archivo del macro se auto envié sin especificar la ruta de donde se almacena el archivo - Dany Sln
Parar enviar el mismo archivo, se tiene que hacer una copia del archivo y enviar esa copia. si necesitas ayuda para actualizar la macro, Crea una nueva pregunta haciendo referencia a esta pregunta, en el desarrollo escribe Para Dante Amor - Dante Amor
mensaje=Range(¨c1") error 1004 - Diego Jorquera Oyarzun
Hola Dante. Estoy haciendo esta macro pero me arroja este error 1004 ´en tiempo de ejecucionError en el Método ´Range´de objeto ´_Global´ - Diego Jorquera Oyarzun
Cambia a : mensaje=Range("c1").Value - Dante Amor
Dante... eres seco con las macros, - oscar orellana
Mi codigo, funciono bien. Solo que me gustaría que en vez de hacer un envío silencioso, me diera la opción de abrir la aplicación antes de enviar el archivo, para así poder adjuntar un archivo mas, que en mi caso es un comprobante de pago. - Edwin Verde