Enviar correo electronico desde powershell

Les comparto un sencillo Script en Powershell para enviar correos con un archivo adjunto. En este caso el archivo a enviar se encuentra en “c:\” con el nombre “log_intall.log”

    $file ="c:\log_install.log" 
    $time = Get-Date -DisplayHint  Time
     $from = "linuxsysymas@dominio.com"
    $to = "destino@dominio.com"
    $subject = "linuxsysymas envio de correo con powershell"
    $smtpserver = "servermail.midominio.com"


    foreach ($recipient in $to)
    {
        write-host "Enviando mail a $to"
        Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject  -body "Saludos $time"   -Attachments $file
    }


Si no deseas enviar un archivo adjunto, solo elimina la ultima parte ” -Attachments $file”

Si ejecutamos el script desde la sesión de un usuario que cuenta con acceso al servidor smtp que le indicamos, el correo se enviará sin problemas,  en caso contrario tendremos error. Para ello podemos definir el usuario y contraseña con el cual se autenticará en el servidor SMTP.

    $file ="c:\log_install.log" 
    $time = Get-Date -DisplayHint  Time
     $from = "linuxsysymas@dominio.com"
    $to = "destino@dominio.com"
      $subject = "linuxsysymas envio de correo con powershell"
    $smtpserver = "servermail.midominio.com"


    $user="linuxsysymas@dominio.com"
    $passwd =  ConvertTo-SecureString "micontraseña" -AsPlainText -Force
    $credenciales= New-Object System.Management.Automation.PSCredential ($user,$passwd)


    foreach ($recipient in $to)
    {
        write-host "Enviando mail a $to"
        Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject  -body "Saludos $time" -Attachments $file  -credential $credenciales
    }
    

Si deseamos que el contenido del cuerpo del correo sea en HTML , modificamos -body por -bodyAsHtml

si deseamos incluir con copia y copia oculta : -cc “user@correo.com”  -Bcc “user@correo.com”

Recuerden guardar el script con la extension .ps1

Crear Batch para ejecutar script

Un batch sencillo para ejecutar nuestor script seria el siguiente:

@echo off
REM  abrimos la direccion de nuestor scrip
cd C:\correo\envia_correo.ps1
REM ejecutamos el script
powershell ./envia_correo.ps1


Con eso podemos automatizar el envío de correo, programando una tarea de windows que ejecute el bat. Esto es  ideal cuando se requiere estar haciendo pruebas periódicas del servicio.

correo

Saludos

Anuncios

4 respuestas a “Enviar correo electronico desde powershell

  1. Hola, me funciona bien con Gmail pero con mi host propio no. Al correr el scrpit me da el siguiente error: 550 R1 HELO should be a FQDN or address literal

    Si lo hago via Telnet manualmente hago: HELO usuario.dominio y toda la secuencia y el mail se envía correctamente. Lo que no entiendo es como modificar el HELO en PowerShell

    Gracias!

    Me gusta

Agradezco tu opinión

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s