Hasta ahora hemos visto como podemos
enviar un mail con un archivo adjunto con Excel en las versiones 2003/2007/2010
mediante el programa Outlook
Express de Microsoft. Esta
plataforma es muy conocida en el mundo,
viene con el paquete de Office. Además ha sido utilizado como cliente de correo
de muchas empresas.
Difícilmente utilicemos Outlook Express
para cuentas de correo Web, Gmail,
Hotmail (ahora Outlook), etc. La configuración es complicada o simplemente
gusta más la plataforma web, esto es debido a que los proveedores web se
esfuerzan cada vez más en hacer plataformas amigables, con más opciones y
servicios para los usuarios. Outlook es algo estático, serio y aburrido.
Para nuestras mini aplicaciones puede que
necesitemos enviar mails sin disponer de un cliente de correo. La forma de declaración del código es bastante
parecida a la vista sin embargo hay que configurar una conexión de datos con la
nube ya que utilizaremos una cuenta de correo web.
Foto2
Para ver el video Click Aquí o en la imagen.
Antes
de Empezar
Para comenzar necesitamos una cuenta
anfitriona, es decir la cuenta de correo web que utilizaremos para enviar el
mail, o cuenta host. Por ejemplo remeras-simpsons@gmail.com. Para dicha cuenta
hay que detectar el proveedor de correo al que pertenece, en este caso “Gmail”
y sus datos de configuración. El servidor llamado SMTP que es el servidor de salida
de nuestro proveedor y el puerto. El
primero es una dirección que tiene esta forma “smtp.gmail.com”, para GMAIL por
ejemplo y el puerto tiene la forma de un número de dos o tres cifras, para
GMAIL puede ser 457 o 565”. Además de
esto, también necesitaremos autenticar la cuenta de correo desde la cual
enviaremos el mail por lo que el código requiere de la contraseña de usuario.
Puede ser natural desconfiar cuando
introducimos nuestra contraseña y nombre de usuario en algún código pero no se
preocupen ya que como verán se utiliza la autenticación a través de un servidor
de MICROSOFT, este actúa de soporte para la conexión. Así que es muy seguro.
Tengan en cuenta que si en algún otro código que puedan encontrar les muestra
otra dirección que no sea la que utilizamos, NO LO UTILICEN. Si quieren más
información pueden consultar en esta página de MICROSOFT.
Hay otra cosa a tener en cuenta, antes de
utilizar el código es necesario cargar el objeto de VBA que nos permite
efectuar esta serie de acciones. Ese objeto es llamado CDO, este objeto se
encuentra en la biblioteca de herramientas de VBA y es necesario activarlo
“cargarlo”. Difícilmente lo tengan cargado por defecto así que deben ir a
“Herramientas >> Referencias >> Microsoft CDO…”
No se olviden de algo importantísimo,
aunque parece obvio, “deben estar conectados a internet para que funcione”.
Proceso
Para este
ejemplo queremos enviar un mail a nuestros clientes. El mail además de texto
puede contener una imagen, ya sea adjunta o incrustada.
El cuerpo del
mensaje cuando se utiliza la biblioteca CDO tiene forma de HTML. Es por eso que
puede ser necesario utilizar etiquetas
HTML.
Para ejecutar el
códigos se crea una macro llamada “enviar_mail” y se vincula a un objeto, una
imagen en forma de sobre.
El código es el
siguiente:
----------------------------------------------------------------------------------------------
Sub enviar_mail()
' PabloFSix
' Excelminiapps.blogspot.com
'Defino las variables
como objetos
Dim email As Object
Dim mailconfig
As Object
Dim mfield As
Object
'Asigno referencias
de objeto a variable
Set email =
CreateObject("CDO.Message")
Set mailconfig = CreateObject("CDO.Configuration")
Set mfield = mailconfig.Fields
'Configuramos el
objeto CDO mediante la dirección del servidor de conf y la declaración
siguiente
'También autenticamos
el SMTP server, en este caso el de gmail
MicConf = "http://schemas.microsoft.com/cdo/configuration/"
mfield.Item(MicConf
& "sendusing") = 2
'servidro smtp de gmail, pueden buscarlo en internet
mfield.Item(MicConf
& "smtpserver") =
Sheets("Mails").Range("J17").Text
'puerto del servidor smtp, pueden buscarlo en internet
mfield.Item(MicConf
& "smtpserverport") =
Sheets("Mails").Range("O17").Value
mfield.Item(MicConf
& "smtpauthenticate") = 1
'aquí va la cuenta host, una cuenta de correo web
mfield.Item(MicConf
& "sendusername") =
Sheets("Mails").Range("J15").Text
'aquí va la contraseña que usamos en nuestro correo web,
al usar un servidor de microsoft,
esta info es segura
mfield.Item(MicConf
& "sendpassword") =
Sheets("Mails").Range("N15").Value
mfield.Item(MicConf
& "smtpusessl") = 1
mfield.Update
'sin la configuración anterior no funcionará el código
'completo los campos necesarios del e-mail
With Omail
.To =
Sheets("Mails").Range("C15").Text
.From =
Sheets("Mails").Range("J15").Text
.Subject =
Sheets("Mails").Range("D19").Text
'si queremos
incrustar una imagen activamos el checkbox2
'con el objeto CDO pueden incluir código html en el
cuerpo del msj como se muestra
'en este caso utilizamos las etiqueta “img”: incrustar
imagen y “br” :salto de línea.
'todo código html comienza con las etiquedas “html” y el
cuerpo se define con “body”
If
Sheets("Mails").CheckBox2 = True
Then
.HTMLBody =
"<HTML><BODY><img src='" &
Sheets("Mails").Range("L22").Text & _
"'/><br>" &
Sheets("Mails").Range("D20").Text &
"<br/></BODY></HTML>"
Else
.HTMLBody =
"<HTML><BODY>" &
Sheets("Mails").Range("D20").Text & _
"</BODY></HTML>"
End If
.Sender = "RemerasSimpsons"
'cambia la forma en la que se declara un archivo adjunto
'para adjuntar un
archivo activamos el checkbox1
If Sheets("Mails").CheckBox1.Value
= True Then
.AddAttachment
Sheets("Mails").Range("L20").Text & "\" &
_ Sheets("mails").Range("B17").Text
End If
'.Organization = "RemerasSimpsons"
'.ReplyTo = ""
Set .Configuration = mailconfig
'con este metodo no podemos visualizar el
mail, si quisiéramos podríamos hacerlo mediante un formulario
.Send
End With
'desvinculo la
variable de los objetos
Set
email = Nothing
Set mailconfig = Nothing
Set mfield = Nothing
MsgBox "Mail enviado
a " & Sheets("Mails").Range("C15").Text
End Sub
----------------------------------------------------------------------------------------------
Como ven el
código prácticamente tiene la misma declaración que para el código que
utilizamos en las entradas anteriores.
Próximamente se
va a colgar el archivo de ejemplo en la zona de Descargas. Si
tienen alguna duda o consulta pueden hacerlo a través del formulario de contacto.
Les recomendamos
que sigan el blog por alguno de los medios, mail o por redes sociales, para
recibir las actualizaciones y novedades.
¡Éxitos!
Keys:
34 comentarios:
Buenas tardes me parece perfecto esta macro
Solo tengo un problema en caso de querer enviar una tabla en vez de una sola celda... como seria el codigo
Me seria de mucha utilidad
Espero contestacion
te dejo mail por si prefiers mail
ironcel69@gmail.com
Hola amigo, cómo estas! Gracias por el comentario y por tu interés!
Recuerda que el cuerpo del mensaje esta formado por código html así que si deseas enviar una tabla es algo complicado porque debes crear la estructura html, sobretodo si es una tabla grande. Si estas interesado, en internet hay tutos acerca de ello. Por otro lado, si nos quieres escribir directamente lo puedes hacer mediante el formulario de contacto. Saludos
Me aparece el sigiente error, que puedo hacer.
Se producjo el sigueinte error: No se pudo enviar el menaje al servidor SMTP. El codigo de errorde transporte fue 0x80040217. La respuesta del servidor fue not available.
Gracias por el aporte
Hola amigo, cómo estas! Gracias por comentar.
Habría que revisar que servidor de correo estas usando, puedes investigar por internet. En el ejemplo probamos con gmail.
Puedes escribirnos directamente con el formulario de contacto. Saludos
Hola amigo, cómo estas! Gracias por comentar!
En verdad es un poco avanzada esta aplicacion sino conoces o no estas familiarizado tanto con código, etc. Lo ideal es que hagas una pequeña investigación y te ilustres un poco. Nosotros tratamos de brindar toda la información posible y de la forma más simple en el artículo pero igual puede ser dificultoso entender. En cuanto a la plantilla, más bien es para que vean o estudien los elementos y el código, no esta pensado para edición porque puedes modificar algo sin querer y no andaría. Nos puedes escribir directamente para consultarnos de este tema mediante el formulario del blog. Saludos
Hola, me gustaria saber si se puede hacer lo siguiente.
Tengo una funsion SI
=SI(A16="";"";SI(J16="Cerrado facturado";"concretado";SI(J16="Cancelado";"cancelado";SI(HOY()E16;"Vencida";SI(HOY()=E16;"Ultimo Dia";))))))
y quiero que si se puede, faltando 5 dias para que se termine la cotizacion, mande un email de recordatorio automatico de que su cotizacion esta a punto de vencerse.
Se podra hacer eso? Saludos y quiero felicitarlos por el excelente blog, la verdad que el mundo de excel es infinito.
Hola amigo, cómo estas! Gracias por comentar.
En cuanto a tu consulta, claro que se puede. Lo único es que sino tienes tanto conocimiento de Macros debería encontrar la forma más simple posible. Por ejemplo, sino necesitas críticamente que sea automático se puede hacer manual. Al menos que tengas miles de cotizaciones. El envío de mail se puede hacer con un hipervínvulo y usando outlook si lo tienes. Nos puedes escribir mediante el formulario de contacto si tienes más consultas. Saludos
Hola amigo gracias por el archivo esta genial, pero tengo un problema cuando quiero adjuntar algo, marco la casilla pero, pero al ejecutar la macro salta un error en la linea ".AddAttachment Sheets("Mails").Range("L20").Text & "\" & Sheets("mails").Range("B17").Text"
Error en tiempo de ejecución. Sabes si se puede utilizar con Office 2013?
Gracias y felicidades.
Hola amigo, muchas gracias por comentar!
En cuanto a tu consulta, seguramente algo esta mal en la definición del código. Revisaste si esta bien la dirección del archivo?
En cuanto a tu otra pregunta, a veces hacen unos cambios pequeños en la definición del código pero probablemente funcione en 2013.
Saludos
Hola amigo, muchas gracias por comentar!
En cuanto a tu consulta, seguramente algo esta mal en la definición del código. Revisaste si esta bien la dirección del archivo?
En cuanto a tu otra pregunta, a veces hacen unos cambios pequeños en la definición del código pero probablemente funcione en 2013.
Saludos
Buenos días, me da error en tiempo de ejecución, Se requiere un Objeto y me va a la línea ".To = Sheets("Mails").Range("C1").Text", incluí en la solapa de Referencias según lo indicado en el apartado, por qué puede ser el error ? Muchas gracias y saludos.
Hola amigo, cómo estas! Gracias por escribirnos!
Esa línea supone que da el mail del receptor del mail, es decir en esa hoja, en ese rango esta el mail del receptor. Sino tienes la hoja "Mails" por ejemplo dará un error. Revísalo. Esparamos nuevamente tu contacto. Saludos
Hola amigo, cómo estas! La idea de la plantilla es que vean los elementos y el código. Nuestro deseo es que puedan construir con todo nuestro trabajo una mini aplicación propia de acuerdo a sus necesidades. Muchas gracias por tus comentarios.
Saludos
saludos, necesito enviar un correo personalizado a 450 empresas. Tengo una base de datos en excel en dos columnas, una con el nombre de cada empresa, y la otra con sus respectivos email. El cuerpo del mensaje sería el mismo, salvo el saludo que me gustaría que fuera "Estimados Sres. `NOMBRE DE LA EMPRESA´." Alguien tiene una idea de como automatizar esto para no tener que hacerlo "a mano"?
Hola amigo, cómo estas! Gracias por comentar!
En este artículo tienes una forma de hacerlo, puede haber otras. En tu caso se puede hacer algo más sencillo aún, usando solo formulas. Puedes buscar en internet. Esperamos tus comentarios.
Saludos
Hice todo y perfecto. Lo que quiero es que la celda X que sería parte del cuerpo vaya con Letra diferente o repintada, etc., es decir darle formato. ¿Cómo se hace? Gracias.
Hola amigo, cómo estas! Gracias por comentar!
No habría problemas con cambiar el formato, eso es simple, como ya lo sabes.
Saludos
Cordial saludo.
Dònde puedo conseguir el archivo XLSM donde està eel còdigo
Gracias,
Mi nombre es: Hildebrando
email: hildebrandosv@gmail.com
Hola amiga, cómo estas! Gracias por tu comentario!
En cuanto a tu consulta, no hay necesidad de tener el archivo con lo que damos aquí en el video lo puedes crear tu misma. Sin embargo, puedes descargarlo de la tienda.
Esperamos tus comentarios.
Saludos
Hola he estado intentando utilizar el código tal cual como esta en el archivo descargado modificando las cuentas de correos y la contraseña y con los dos puerto de gmail pero siempre me sale el mensaje "se ha producido el error '-2147220379 (80040213)' en tiempo de ejecución: Error de transporte en la conexión al servidor."
Ya probé con varias cuentas gmail, y los puertos 465 y 587.
¿Que debería hacer? mi experiencia con VBA no es mucha y el código que usted me suministra es la base para la aplicación que quiero pero si esta no me funciona no puedo avanzar.
de ante mano gracias.
Hola amigo, cómo estas! Gracias por comentar
En cuanto a tu consulta o comentario. Con Gmail a veces es un tanto complicado porque cambian las políticas muy seguido. Seguramente además de los puertos tendrás que revisar las opciones de tu correo (en gmail) para ver que estén habilitades las opciones de seguridad.
En nuestra experiencia, y para no renegar, te recomendamos que si no es por algo personal el tema de los mail directamente, crees un correo en otra plataforma más flexible como puede ser outlook.
Esperamos tus comentarios.
Saludos
Hola, gracias por la info, tengo un caso, ¿como puedo hacer? en mi trabajo tengo una cuenta corporativa proporcionada por google, el dominio es correo@hocplc.com, e inicio sesión como podría enviar correos desde excel?, por favor tu apoyo, gracias.
por aca entro a mi correo: https://mail.google.com/
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, en teoría debería funcionar con lo que se vio en este artículo. Hay que averiguar que datos necesitas y además ver que restricciones de seguridad tiene la cuenta.
Esperamos tus comentarios.
Saludos
buen día
Excelente archivo, espero me puedas ayudar, estoy intentado mandar un correo de una cuenta de outlook pero me marca error no me a dejado esta es la configuración de mi servidor les estoy poniendo los datos correctos pero no me deja estos son los datos de mi servidor.
Configuracion SMTP
Nombre de servidor: smtp.office365.com
Puerto: 587
Método de cifrado: TLS
me sale este error en tiempo de ejecución
espero que me puedas ayudar
gracias
Hola amigo, cómo estas! Gracias por escribirnos!
Habría que probar, de seguro hay algún error en estos datos. O puede ser que se haya agregado algo de seguridad para el acceso, deberías buscar si hay algún artículo dónde se mencione la utilización de estos servidores que mencionas.
Esperamos tus comentarios.
Saludos
Gracias por tu tiempo.
Ando buscando un artículo relacionado a este error, espero encontrar la solución a esto
En cuanto encuentre la solución a esto se los are saber
Saludos
Error en el código .send
Hola amigo, cómo estas! Gracias por comentar
Seguramente algo mal en el código.
Saludos
Hola a todos!! me parece genial la macro, donde puedo descargar el fichero xlxm?? no encuentro el enlace, por favor enviadme el enlace, muchas gracias.
Hola amigo, cómo estas! Gracias por escribirnos!
Revisa la zona de descargas.
Saludos
Publicar un comentario