Actualizado: agosto de 2021; Aplicable a Microsoft Outlook 365 / 2019 / 2016
Aquí hay una nota que recibimos de un lector.
Gracias por su muy útil ayuda de codificación de Outlook. Me pregunto si puede compartir algún código para ayudar a automatizar el envío de un correo electrónico en Outlook. Sé que hay varias formas de enviar mensajes recurrentes, pero estoy específicamente interesado en usar VBA para esta tarea.
Gracias por la pregunta. El envío automático de correos electrónicos parece estar entre las tareas más útiles y populares que puede automatizar con VBA. Siga leyendo para obtener más detalles y un script simple para comenzar aquí.
Escribir VBA para enviar correos electrónicos de Outlook
En el ejemplo bastante simple a continuación, cubriremos los siguientes pasos:
- En primer lugar, usaremos el modelo de objetos de Outlook de VBA para crear un nuevo elemento de correo electrónico.
- Luego continuaremos y estableceremos la importancia del mensaje, los destinatarios (separados por punto y coma) y el estilo y contenido del texto del cuerpo.
- Luego mostraremos el mensaje en su aplicación de Microsoft Outlook.
- Por último, seguiremos adelante y lo enviaremos a los destinatarios.
Aquí está el código VBA simple para crear y enviar correos electrónicos simples automáticamente. Tenga en cuenta que debe mejorar fácilmente este script para incluir archivos adjuntos, tareas, etc., pero comencemos con un script muy básico.
Sub SendMail()
Dim MyEmail As MailItem
Set MyEmail = Application.CreateItem(olMailItem)
With MyEmail
.To = ""
.Importance = olImportanceHigh
.Subject = ""
.Body = ""
.BodyFormat = olFormatHTML
.Display
End With
'I purposely commented the next line, uncomment it by removing the "'" sign to send your email.
' MyEmail.Send
End Sub
Atajo de macro de Outlook VBA
Es posible que desee asociar el código VBA que acaba de escribir con un botón de comando en Outlook. Esto le permitirá iniciarlo fácilmente desde un acceso directo ubicado en la cinta de opciones de Outlook.
Así es como se hace:
- Primero, continúe y abra Microsoft Outlook.
- Presiona Archivo y luego selecciona Opciones
- Ahora continúe y seleccione Personalizar cinta.
- En la sección Personalizar cinta de opciones, verá el cuadro de lista Elegir comandos de.
- Seleccionar macros
- Luego, seleccione su código VBA recién creado, en nuestro caso, el nombre debe ser SendMail.
- Luego presione Agregar y luego Aceptar. Opcionalmente, es posible que desee asignar un icono a su Macro.
- Su macro estará disponible en la barra de herramientas de acceso rápido en la parte superior izquierda de su aplicación de Outlook.
Posibles problemas con la configuración de macros de VBA
Es posible que deba ajustar la configuración de macros de Outlook para poder ejecutar macros. Si es así, así es como se hace.
Bonificación: envíe un correo electrónico desde Outlook usando PowerShell
En PowerShell, puede utilizar el cmdlet Send-MailMessage para enviar correos electrónicos. Sin embargo, requiere que se autentique en el servidor de correo y no admite métodos de autenticación modernos, como OAuth y Autenticación moderna de Microsoft. Por lo tanto, es mucho más fácil enviar un correo electrónico si tiene un perfil de Outlook configurado en su computadora.
A continuación se muestra un ejemplo de un script de PowerShell que lee datos de un archivo Excel y utiliza un perfil de Outlook para enviar un correo electrónico a cada usuario:
# abrir el archivo Excel
$ExcelObj = Nuevo-Objeto -comobject Excel.Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\user_list.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("Hoja1")
# Obtener el número de filas completadas en un archivo xlsx
$rowcount=$ExcelWorkSheet.UsedRange.Rows.Count
# Recorra todas las filas de la columna 1, comenzando desde la segunda fila (estas celdas contienen los nombres de usuario y los correos electrónicos).
para($i=2;$i -le $rowcount;$i++){
$useremail = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$FullUsername = $ExcelWorkSheet.Columns.Item(2).Rows.Item($i).Text
$Estado = $ExcelWorkSheet.Columns.Item(4).Rows.Item($i).Text
$pwdchange = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
# Generar texto del cuerpo del mensaje
$cadenaSubj = " El estado de su cuenta en el dominio woshub.com "
$strBody = "Estimado " + $Nombre de usuario completo
$strCuerpo = $strCuerpo + " `r`n Su cuenta en el dominio woshub.com está en " + $Estado
$strBody = $strBody + "`r`n La fecha y hora del último cambio de contraseña es: " + $pwdchange
$strfile="C:\ps\" + $useremail + ".txt"
# Suponemos que Outlook se está ejecutando, si no es así, deberá iniciarlo con el comando $outlook = new-object -comobject outlook.application
$outlook = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")
$correo electrónico = $outlook.CreateItem(0)
$email.To = $useremail
$email.Subject = $strSubj
$email.Body = $strBody
# Adjunte un archivo (si es necesario)
$correo electrónico.Attachments.add($strfile)
#enviar el mensaje de correo electrónico
$correo electrónico.Enviar()
}
$ExcelWorkBook.close($true)

Este script de PowerShell supone que Outlook se está ejecutando en su computadora. El script genera el asunto y el cuerpo del correo electrónico para cada dirección SMTP del destinatario en el archivo XLSX y adjunta el archivo. Luego envía el correo electrónico.