VBA Enviar Emails desde Excel A Través de Gmail

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on diciembre 10, 2022

Este tutorial le mostrará cómo enviar correos electrónicos desde Excel a través de Gmail utilizando VBA.

Adición de la Referencia CDO de Microsoft

Para permitir que Excel envíe correos electrónicos a través de Gmail, primero debe agregar la biblioteca de referencia CDO a su proyecto de Excel. En el Editor VBA, haz clic en Herramientas, Referencias.

Referencias VBA

 

Busque la Referencia Microsoft CDO y haga clic en Aceptar.

Ref Microsoft CDO

 

Enviando un Email A Través de GMail

Para enviar un correo electrónico desde Excel a través de Gmail, primero debe declarar un objeto CDO(Dim gMail as CDO.Message).

En segundo lugar, tendrá que configurar la autenticación SSL para su mensaje en el código. Esto significa que necesita configurar el servidor SMTP y los detalles del puerto para que su correo electrónico se envíe correctamente, así como configurar su nombre de usuario y contraseña.

En el siguiente fragmento de código, esto es lo que necesitaría al principio de su función de Excel. Necesita un Destinatario de Email (strTo), y un Asunto (strSubject) pero el CC y el Cuerpo del email pueden ser variables opcionales.

Function CreateEmail(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String)

'crear un objeto CDO
   Dim gMail As CDO.Message
   Set gMail = New CDO.Message

'Activar autenticación SSL
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

'Hacer autenticación SMTP Enabled=true (1)
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

'Establezca el servidor SMTP y el puerto Detalles
   gMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
   gMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
   gMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Establece tu nombre de usuario y contraseña para tu propia cuenta de gmail aquí
    gMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "johnsmith@gmail.com"
   gMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "*********"

'Actualizar los campos de configuración
   gMail.Configuration.Fields.Update

Una vez hecho esto, puede crear su correo electrónico y completar la función.

'establecer las propiedades del correo electrónico y el archivo a enviar
   With gMail
      .Subject = "Escriba aquí el asunto"
      .From = "stitchmel@gmail.com"
      .To = strTo
      .TextBody = strBody
   End With
'enviar el correo
   gMail.Send
End Function

A continuación, puede llamar a su función con el siguiente código

Sub SendEmail()
'crear el cuerpo del correo electrónico
Dim strText As String
   strText = "Good morning.  Hope you are well - this is a test email"
'rellenar los argumentos de la función - dejar CC en blanco por lo que poner una coma como marcador de posición
   Call CreateEmail("jimsmith@gmail.com", "Test Email", "", strText)
End Sub

Envío de un Libro de Trabajo A Través de GMail

Para enviar un libro de trabajo como un archivo adjunto a través de GMail, puede crear una función muy parecida a la anterior con algunas adiciones.

Es necesario añadir código para seleccionar el libro de trabajo y, a continuación, adjuntar el archivo seleccionado al correo electrónico.

Utilizaremos el comando Microsoft Office FileDialog para seleccionar el archivo a enviar, y luego utilizaremos la propiedad AddAttachment del correo electrónico para añadir el archivo como adjunto.

Function SendWorkbook(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean
On Error GoTo eh:

'crear un objeto CDO
   Dim gMail As CDO.Message
   Set gMail = New CDO.Message

'Activar autenticación SSL
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

'Hacer autenticación SMTP Enabled=true (1)
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

'Establezca el servidor SMTP y el puerto Detalles
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
    gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Establece tu nombre de usuario y contraseña para tu propia cuenta de gmail aquí
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "johnsmith@gmail.com"
   gMail.Configuration.Fields.Item _
   ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "*********"

'Actualizar los campos de configuración
   gMail.Configuration.Fields.Update

'seleccione el archivo que desea enviar con el cuadro de diálogo de archivos de microsoft
   Dim strFileToSend As String
   Dim dlgFile As FileDialog
   Dim strItem As Variant
   Dim nDlgResult As Long
   Set dlgFile = Application.FileDialog(msoFileDialogFilePicker)
'filtro sólo para archivos excel y csv
   dlgFile.Filters.Add "Excel Files", "*.csv; *.xls; *.xlsx; *.xlsm"
   nDlgResult = dlgFile.Show
   If nDlgResult = -1 Then
      If dlgFile.SelectedItems.Count > 0 Then
         For Each strItem In dlgFile.SelectedItems
             strFileToSend = strItem
         Next strItem
      End If
   End If
'establecer las propiedades del correo electrónico y el archivo a enviar
   With gMail
     .Subject = "Write subject here"
     .From = "stitchmel@gmail.com"
     .To = strTo
     .TextBody = strBody
'añadir el archivo seleccionado como adjunto
     .AddAttachment strFileToSend
   End With
'enviar el correo
   gMail.Send
   SendWorkbook = True
   Exit Function
eh:
   SendWorkbook = False
End Function

Si el puerto de configuración 25 no funciona puede que obtenga un error – «The transport failed to connect to the server» Cambie el puerto a 25 e inténtelo de nuevo. La función de arriba puede ser llamada usando el procedimiento de abajo.

Sub SendMail()
   Dim strTo As String
   Dim strSubject As String
   Dim strBody As String
'rellenar variables
   strTo = "jon.smith@gmail.com"
   strSubject = "Please find finance file attached"
   strBody = "some text goes here for the body of the email"
'llamar a la función para enviar el correo electrónico
   If SendWorkbook(strTo, strSubject, , strBody) = True Then
      MsgBox "Email creation Success"
   Else
      MsgBox "Email creation failed!"
   End If
End Sub

Se le pedirá que seleccione el archivo que desea enviar. Este código está restringido a ficheros Excel debido a que el filtro es «*.csv; *.xls; *.xlsx; *.xlsm» – sin embargo, también puede utilizar este código dentro de Word, y modificar su filtro en consecuencia.

Cuadro de Diálogo para Seleccionar

 

Seleccione el archivo y haga clic en Abrir. El código puede tardar un poco en ejecutarse – si el correo se envía correctamente, aparecerá el siguiente mensaje.

 

vba gmail success

 

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples