Búsqueda de sitios web

Envíe correos electrónicos de Outlook utilizando Excel VBA Macro o PowerShell


Había una tarea para organizar los correos de acuerdo con la lista de correos electrónicos de los usuarios en una hoja de cálculo de Excel. Cada mensaje de correo electrónico debe contener algunos datos específicos de cada usuario y también se debe adjuntar un archivo personal. En este artículo, veremos cómo usar el perfil de Outlook para enviar automáticamente un correo electrónico a una lista de destinatarios desde un archivo de Excel usando una macro de VBA o un script de PowerShell.

Importante. Se debe configurar un perfil de correo de Outlook en su computadora para ambos métodos de envío del correo electrónico. Este buzón (y esta dirección de correo electrónico) se utilizará para enviar el mensaje

Supongamos que tiene un archivo de Excel con las siguientes columnas:

Email | Full Name | Last Password Change Date | Account status

Mi tarea es usar esta plantilla para enviar correos electrónicos a todos en la lista de Excel:

Asunto: Estado de su cuenta en el dominio a-d.site
Cuerpo: Estimado %FullUsername%,
Su cuenta en el dominio a-d.site está en estado %status%
La fecha y hora del último cambio de contraseña es %pwdchange%

Excel VBA Macro para enviar correo electrónico a través de Outlook

Aquí hay una pequeña macro de correo de VBA (Visual Basic para aplicaciones) que se puede crear directamente en un documento de Excel.

Cree una nueva macro: Ver -> Macros. Especifique el nombre de la macro (send_email) y haga clic en Crear:

Copie y pegue el siguiente código en el editor de VBA que aparece (le he agregado todos los comentarios necesarios). Para automatizar el envío de correos electrónicos, usaré el

CreateObject (“Outlook.Application”)

función, que permite crear y utilizar un objeto de Outlook dentro de los scripts de VBA.

Sub send_email()
Dim olApp As Object
Dim olMailItm As Object
Dim iCounter As Integer
Dim Dest As Variant
Dim SDest As String
' Subject
strSubj = "Your account status on a-d.site domain"
On Error GoTo dbg
' Create a new Outlook object
Set olApp = CreateObject("Outlook.Application")
For iCounter = 2 To WorksheetFunction.CountA(Columns(1))
' Create a new item (email) in Outlook
Set olMailItm = olApp.CreateItem(0)
strBody = ""
useremail = Cells(iCounter, 1).Value
FullUsername = Cells(iCounter, 2).Value
Status = Cells(iCounter, 4).Value
pwdchange = Cells(iCounter, 3).Value
'Make the body of an email
strBody = "Dear " & FullUsername & vbCrLf
strBody = strBody & " Your account in a-d.site domain is in" & Status & “ state” & vbCrLf
strBody = strBody & "The date and time of the last password change is" & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
' 1 - text format of an email, 2 -  HTML format
olMailItm.Body = strBody
'Add an attachment (filename format is username@a-d.site.txt). Comment out the following line if you do not need the attachments
olMailItm.Attachments.Add ("C:\ps\" & useremail & ".txt")
olMailItm.Send
Set olMailItm = Nothing
Next iCounter
Set olApp = Nothing
dbg:
'Display errors, if any
If Err.Description <> "" Then MsgBox Err.Description
End Sub

Guarde este archivo de Excel como .xlsm (un formato de libro de Excel que admite macros). Para enviar correos electrónicos, seleccione el procedimiento creado (la macro) que ha creado y haga clic en Ejecutar.

La macro de VBA recorre todas las filas de la hoja de cálculo de Excel, genera y envía un mensaje a cada destinatario de la lista. Los mensajes de correo electrónico enviados se almacenan en la carpeta Elementos enviados de Outlook.

Debe otorgar permisos SendAs/Sent en nombre si desea enviar un correo electrónico en nombre de otro usuario o buzón compartido (si está utilizando Exchange) y agregar el siguiente código a la secuencia de comandos (antes

olMailItm.Send

).

olMailItm.SentOnBehalfOfName = "yoursecondemail@a-d.site"

Enviar un correo electrónico desde Outlook usando PowerShell

En PowerShell, puede usar el cmdlet Send-MailMessage para enviar correo electrónico. Sin embargo, requiere que se autentique en el servidor de correo y no es compatible con los métodos de autenticación modernos, como OAuth y la 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.

Este es un ejemplo de un script de PowerShell que lee datos de un archivo de Excel y usa un perfil de Outlook para enviar un correo electrónico a cada usuario:

# open the Excel file
$ExcelObj = New-Object -comobject Excel.Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\user_list.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("Sheet1")
# Get the number of filled rows in an xlsx file
$rowcount=$ExcelWorkSheet.UsedRange.Rows.Count
# Loop through all the rows in column 1, starting from the second row (these cells contain the usernames and e-mails).
for($i=2;$i -le $rowcount;$i++){
$useremail = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$FullUsername =  $ExcelWorkSheet.Columns.Item(2).Rows.Item($i).Text
$Status =  $ExcelWorkSheet.Columns.Item(4).Rows.Item($i).Text
$pwdchange = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
# Generate message body text
$strSubj = " Your account status on a-d.site domain "
$strBody = "Dear " + $FullUsername
$strBody = $strBody + " `r`n Your account in a-d.site domain is in " + $Status
$strBody = $strBody + "`r`n The date and time of the last password change is : " +  $pwdchange
$strfile="C:\ps\" + $useremail + ".txt"
# We assume that Outlook is running, if it is not you will need to start it with the command $outlook = new-object -comobject outlook.application
$outlook = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")
$email = $outlook.CreateItem(0)
$email.To = $useremail
$email.Subject = $strSubj
$email.Body =  $strBody
# Attach a file (if necessary)
$email.Attachments.add($strfile)
#send the e-mailmessage
$email.Send()
}
$ExcelWorkBook.close($true)

Este script de PowerShell asume 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.

Artículos relacionados