miércoles, 6 de noviembre de 2013

Cómo enviar correos desde Excel

Introducción

En repetidas ocasiones al terminar nuestro trabajo en planillas de cálculo de Excel necesitamos guardar los archivos, abrir el navegador, escribir la dirección de correo electrónico, luego adjuntar el archivo que acabamos de trabajar, para finalmente enviarlo. A simple vista no parece algo engorroso, pero cuando necesitamos realizarlo de forma repetitiva,  se infunda la duda de encontrar un método alternativo que nos permita realizar esta operación de manera automática.
Efectivamente gracias Visual Basic, podemos incluir a nuestro libro un módulo que nos permita realizar la acción descrita anteriormente. Lo que se traduce en disminución del tiempo empleado y mayor oportunidad para focalizar nuestro trabajo, sin tener la necesidad de salir del programa.

Utilidad

Para el envío directo de emails desde nuestro libro de Excel, contamos con un formulario que incluye un módulo de autentificación del usuario que va a enviar la información, donde se va a necesitar el usuario de su webmail y contraseña, junto con las características propias del servidor, como el servidor smtp y número del puerto, que en el caso de gmail  son smtp.gmail.com y 425, respectivamente. Luego, contamos con la estructura básica del email que se va a enviar. Aquí se debe explicitar la dirección del correo del remitente, el asunto del mensaje, el cuerpo del mensaje y si se desea (que es donde radica la gran utilidad de esta herramienta) adjuntar archivos. Todo el envío se realiza presionando el botón “Enviar”.
El soporte de cada uno de los módulos descritos está sobre la base de Visual Basic, por lo que se puede sofisticar, ya sea el diseño y la utilidad que se requiere dependiendo de las necesidades del negocio.

Características

Algunas de las características específicas de utilización se pueden definir en los siguientes constructos:
Contactos: Es posible  enviar los correos a cualquier contacto del cual se conozca su correo, cualquiera sea su servidor (gmail, yahoo, msn, entre otros). Además, al estar incluida la autentificación del usuario, proveemos un grado de seguridad al archivo, ya que se asegura una procedencia real. También, existen las condiciones para crear un repositorio de contactos, y mandar correos a todos ellos o algunos, ya sea creando una lista desplegable que permita elegir los contactos o bien, tomándolos directamente de una base de datos.
Trabajo simultáneo: Al contar con esta herramienta inserta en el libro podremos realizar de forma simultánea las tareas relacionadas y enviar con facilidad, ya sea, partes de archivos o libros completos.
Adjuntar archivos: Permite el envío de los archivos que estén guardados y cerrados, y también adjuntar archivos adicionales de forma automática, no tenemos la necesidad de cerrar el programa, abrir la casilla de correo, adjuntar el archivo y enviar. En este caso es posible adjuntar tres archivos de forma máxima, sin embargo esa capacidad se puede ampliar a los requerimientos del usuario.

Tips

Activar CDO: Es imperante que al momento de crear el código de la macro, debemos activar el módulo “Microsoft CDO for Windows 2000 Library”.
Vulnerabilidad: Para aumentar la seguridad de nuestros archivos, al momento en que se está trabajando en el libro que posee esta macro, se recomienda que esté encriptada y así se limita el uso al personal competente.

Ejemplo Aplicado

En primer lugar, vamos a crear en una hoja de Excel, un formulario que simule el momento cuando enviamos un correo electrónico, en cualquier proveedor de este servicio. Algo como se muestra a continuación.
Luego, necesitamos abrir Visual Basic para Aplicaciones, esto lo hacemos presionando al mismo tiempo alt+F11. Una vez abierto, como se nombró anteriormente, tenemos que módulo de CDO para Windows. Para esto, en Visual Basic nos vamos a Herramientas, Referencias y se desplegará una ventana emergente. Ahí seleccionamos Microsoft CDO for Windows 2000 Library.   

Una vez habilitada la herramienta a utilizar, en Visual Basic, nos vamos a la hoja1 e ingresamos el siguiente código

Function EnviarMails_CDO() As Boolean
' Creamos la variable para el CDO
Dim Email As CDO.MessageDim Autentificacion As Boolean'  Ahora creamos el objeto
Set Email = New CDO.Message
'indicamos los datos del servidor:
Email.Configuration.Fields(cdoSMTPServer) = Sheets("EnviarCorreos").Range("F6").TextEmail.Configuration.Fields(cdoSendUsingMethod) = 2
'indicamos el número del puerto a utilizar
Email.Configuration.Fields.Item _    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(Sheets("EnviarCorreos").Range("F7").Value)' indicamos si el servidor requiere o nó autentificación.
'1=requiere, 0=no requiere. Para gmail, entonces, 1
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & _
            "configuration/smtpauthenticate") = Abs(1)
' indicamos la cantidad de segundos máximos de espera, en este caso lo haremos con 30.
Email.Configuration.Fields.Item _    ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30'aqui definimos como True (verdadera) a la autentificación para el envío de mails.
Autentificacion = True
' configuramos las opciones de login
If Autentificacion Then
'nombre de usuario
Email.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusername") = Sheets("EnviarCorreos").Range("C4").Text'contraseña    Email.Configuration.Fields.Item _        ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Sheets("EnviarCorreos").Range("F4").Value'si el servidor utiliza SSL (secure socket layer). en gmail: True
Email.Configuration.Fields.Item _       ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = TrueEnd If' ahora referenciamos las celdas de la hoja1 de excel:
' Dirección del Destinatario
Email.To = Trim([c2].Value)
' Dirección del remitente
Email.From = Trim([c4].Value)
' Asunto del mensaje
Email.Subject = Trim([c6].Value)
' Cuerpo del mensaje
Email.TextBody = Trim([c8].Value)

'Ruta del archivo adjuntoIf [c11].Value <> vbNullString Then        Email.AddAttachment (Trim([c11].Value))
End IfIf [c12].Value <> vbNullString Then
        Email.AddAttachment (Trim([c12].Value))End IfIf [c13].Value <> vbNullString Then        Email.AddAttachment (Trim([c13].Value))End If
'antes de enviar actualizamos los datos:
Email.Configuration.Fields.Update
'ponemos un capturador de errores:
 On Error Resume Next
'enviamos el mail
Email.Send
'si el número de error es 0 hago que la función retorne Verdadero
If Err.Number = 0 Then    EnviarMails_CDO = True   Else
' en caso contrario, muestro un MsgBox con la descripcion y nro de error
  MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
End If
'destruyo el objeto, para liberar los recursos del sistema
If Not Email Is Nothing Then     Set Email = NothingEnd If'libero posibles errores On Error GoTo 0
End Function

Y al final se le debe añadir el siguiente código, que es el que se relacionará con la función del botón “Enviar”:
         Sub EnviarMail()
         Dim MailExitoso As Boolean
         'llamo a la funcion:
         MailExitoso = EnviarMails_CDO()
         'si devuelve un resultado Verdadero, todo salió bien:
         If MailExitoso = True Then
         MsgBox "El mail fue enviado satisfactoriamente", vbInformation, "Informe"
         End If
         End Sub

Ejemplo: Aplicado al mundo profesional

Muchas empresas utilizan bases de datos para enviar correos electrónicos masivos, por ejemplo cuando envían a clientes alguna oferta o bien a sus empleados anuncian alguna noticia importante dentro de la empresa. Es por ello que es importante contar con una herramienta en la que se pueda enviar un correo a través de otras plataformas, en este caso Excel, para poder optimizar y facilitar el trabajo.
Sin duda Excel es una herramienta en la que se pueden hacer un sinfín de cosas aplicadas para mejorar día a día nuestra labor como estudiantes, profesores o profesionales.

Autores

Más información relacionada con este tema

5 comentarios:

  1. Me parece un tema super importante cuando trabaja continuamente con envios de archivos, es especialmente util cuando se envian reportes diarios o con cierto grado de peridiocidad en el trabajo.
    Yo he podido comprobar in situ, el ahorro enorme de tiempo al tener configuarado el enviar correos desde excel.

    ResponderEliminar
  2. El formato del post está bien cuidado, sin embargo, creo que no utilizaron todos los medios que disponían para ejemplificar algunos temas adicionales o complementar el mismo articulo. Otra cosa, los links en vez de publicarlos completamente se puede agregar con un nombre como se indicaba en la guía.
    Con respecto al contenido, creo que es muy interesante esta herramienta dado que muchas personas no sabemos que excel nos permite enviar correos electronicos desde el mismo software.

    ResponderEliminar
  3. Es un tema totalmente novedoso para mí, no tenía idea de la existencia de esa herramienta. Me parece muy útil y práctica ya que en los momentos de tensión uno generalmente olvida adjuntar el archivo al mail (en mi caso) y esta es la solución perfecta.
    En cuanto a la presentación de la publicación posee una estructura bien definida mediante títulos claramente identificables además el tamaño y forma de la fuente son correctos y agradables a la vista.
    Otro punto a destacar en este artículo es el ejemplo, es bastante claro y simple, por ende complementa muy bien la información que entregaron anteriormente.

    ResponderEliminar
  4. Me parece que es super bueno saber este tipo de cosas, ya que no tenía idea que excel tenía esta herramienta. Creo que está bien explicado el método a seguir en cuanto a enviar el mail, pero no me quedó claro si se puede cambiar dicho código, o debe seguir siempre la misma estructura (en el ordenamiento de las funciones del código), por otra parte, esto es una macro? o es como una macro? (la verdad es que no lo leí si es que se especifica).
    ¿No existe manera de utilizar esto sin internet?, por medio de una red local, o carpeta compartida?
    De todas maneras, es un artículo muy interesante y muy útil, en cualquier entorno empresarial y/o social.

    ResponderEliminar
  5. Hay que reconocer que es un tema bastante importante para el mundo de los negocios, y creo que fue abordado como tal. fue bastante claro y conciso en su explicación. Sin embargo, respecto al tema del formato siento que pudo haber sido un poco mas agradable a la vista. Respecto a algunas imagenes, siento que eran muy pequeñas para verlas de manera normal. Sin embargo como mencione al principio es un tema bastante recurrente en el mundo de los negocios y creo que se logro entender de la mejor manera. saludos

    ResponderEliminar