Enviar mails desde Outlook usando PowerShell

Siempre que trabajamos con scripts nos aparecen preguntas o diferentes situaciones que queremos resolver mediante el uso de, en este caso, PowerShell. Así me surgió la pregunta: Cómo enviar mails desde Outlook usando PowerShell?

Podemos usar el siguiente bloque para tal fin:

$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "[email protected]"
$Mail.Subject = "Soy un asunto"
$Mail.Body ="Hola!"
$Mail.Send()

Muy fácil,no?

Ahora, para los que quieren entender un poco más sobre como funciona tenemos el siguiente enlace: Application Object (Oulook)

También podemos armar una función que simplifique lo anterior:

Function Send-Email {
[cmdletbinding()]
Param (
    [Parameter(Mandatory=$False)][String]$Address,
    [Parameter(Mandatory=$False)][String]$Subject,
    [Parameter(Mandatory=$False)][String]$Body
)

Begin {
    Clear-Host
} Process {
    $Outlook = New-Object -ComObject Outlook.Application
    $Mail = $Outlook.CreateItem(0)
    $Mail.To = $Address
    $Mail.Subject = $Subject
    $Mail.Body = $Body
    $Mail.Send()
}
}

# Ejemplo de uso
Send-Email -Address [email protected] -Subject Hola -Body "Esto es un mail!"

Aclarar que para que esto funcione es necesario tener una cuenta de correo configurada en nuestro Outlook.

Multiples destinatarios

Puede pasar que necesitemos enviar ese mail a varios destinatarios diferentes (que no pertenecen a un grupo de distribución :)), para ello vamos a usar un recurso muy simple:

$Contacts = Get-Content "C:\PowerShell\contacts.txt"
Foreach ($Contact in $Contacts) {
    Send-Email -Address $Contact
    $i++
}

Saludos,

Comments