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

Respuesta
18

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

SAle Error Dice:

Se ha detectado nombre ambiguo: SendMail_Gmail

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

Valora esta respuesta y crea una nueva para enviar correos por outlook y te mando un archivo.

Gracias por la ayuda

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

Agregar Gracias por tu paciencia...

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.

OK, ahora entendí... 

La pregunta no admite más respuestas

Más respuestas relacionadas