PROGRAMAR EN VBA MACROS PARA EXCEL: Enviar Mail con Excel

Enviar Mail con Excel




Seguramente alguna vez te preguntaste como hacer que salga un cartel de AVISO o enviara mails con Excel o si es posible que se envíe un mail directamente desde Excel; este procedimiento de VBA  o Macro para envíar mails con Excel da respuesta a este interrogante, a mi entender, es sumamente útil, lo que hace básicamente es enviar mail desde excel, en el ejemplo que se agrega en este post se utiliza una cuenta de gmail, pero funciona con yahoo, hotmail, etc. se debe cambiar el puerto de salida en función del puerto smtp que use cada uno de los web mails. En este ejemplo se muestra con enviar mail a varios destinatarios.

Está programado para recorrer las filas de un rango y enviar una serie de mail de una lista, pero se puede modificar para enviar un soló mail si se quiere, es cuestión de adaptarlo a lo que se requiera. Haz click en el link del final para descargar el ejemplo.

Es preciso para que esta macro que envía mails funcione, que en la función que envía los mails cambies el nombre por tu cuenta de gmail para que funcione, si pones otro web mail debes cambiar unas líneas más abajo el puerto del servidor smtp, en Excel cambia las direcciones que se pusieron de muestra y agrega direcciones válidas.

Es preciso aclarar que en este ejemplo se envía mail con correos basados en la web como Gmail, Hotmail o  Yahoo, lo cual lo hace  diferente a otros ejemplos publicados sobre como enviar mails con Excel, el motivo del  post  radicó en la cantidad de usuarios que hacen usos de Gmail, Hotmail  y Yahoo.



Función se agrega en un módulo

Function SendMail_Gmail() As Boolean
'Dimensiono variables
Dim Email As CDO.Message
Dim Autentificion As Boolean
'Creo el objeto email
Set Email = New CDO.Message
'Ponemos datos del servidor a usar
Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'Indicamos el número de puerto smtp
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
'Decimos si requiere o no autentificación 1 requiere, 0 no requiere
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1)
'Segundos de espera
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'Definición de verdadero para la autentificación
Autentificacion = True
'Configuramos el ingreso al mail
If Autentificacion Then
    'nombre de usuario
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "micorreo1111xxx444xxxxx444xxx44x@gmail.com"
    'password
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "111111"
    'si el servidor utiliza SSL (secure socket layer). en gmail: True
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
' Una vez configurado nuestro servidor de correo tomados datos de excel para enviar el mail
    'Correo del destinatario
    Email.To = Trim(["a" & fila].Value)
    'Dirección del remitente
    Email.From = Trim(["b"& fila].Value)
   ' Asunto
    Email.Subject = Trim(["c"& fila].Value)
   ' Mensaje
    Email.TextBody = Trim(["d" & fila].Value)
   'Path del archivo attach
   If [a2].Value <> vbNullString Then
      Email.AddAttachment (Trim(["e"& fila].Value))
   End If
   'Actualizamos datos antes del envio
    Email.Configuration.Fields.Update
   'Controlo errores
   On Error Resume Next
   'enviamos propiamente el mail
    Email.Send
    'Si no hay errores la funcion es verdadero
    If Err.Number = 0 Then
       SendMail_Gmail = True
    Else
     'Sale msgbox con descripción del error
       MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
   End If
   'Borro los objetos
    If Not Email Is Nothing Then
       Set Email = Nothing
    End If
    'Controlo errores
    On Error GoTo 0
End Function



Código que se agrega en un módulo
Public fila
Sub SendMail()
Dim fila As String
Dim Exito As Boolean
'Evito movimientos de la pantalla
Application.ScreenUpdating = False
fila = 2
'Bucle en caso de haber listado de direcciones de correo
While Sheets("dire").Cells(fila, 1) <> Empty
    'Si queremos enviar un solo mail va esta parte solamente
    'Dim Exito As Boolean
    'llamo a la funcion:
    Exito = SendMail_Gmail()
    'Si es verdadero, es decir el mail se envio
        If Exito = True Then
        MsgBox "El mail se envió con éxito", vbInformation, "Informe"
        End If
fila = fila + 1
Wend
Application.ScreenUpdating = True
End Sub

Te recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.




Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends