Diariamente enviamos correos electrónicos a través de plataformas como Gmail, Outlook, Yahoo, etc. Pero existen otras formas de poder realizar esta tarea sin tener que entrar a la aplicación, y una de ellas es hacerlo a través de PowerShell, ya que este incluye el cmdlet «Send-MailMessage» el cual permite el envío de emails
En este post voy a explicar como poder mandar correos electrónicos leyendo todo la información que queramos mandar a través de un archivo «.csv» . Los pasos necesarios para realizar esta tarea son:
1. Abrir un documento Excel donde escribiremos la información a enviar: Necesitaremos crear 3 columnas como en la siguiente imagen
2. Guardar el archivo: a continuación lo guardaremos como un archivo «.csv» delimitado por comas. Abrimos dicho archivo con el bloc de notas, nos dirigimos a edición, reemplazar, y reemplazamos los «;» por «,».
3. Abrir PowerShell ISE y escribir lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 |
#Crear un objeto de tipo credential $password = Read-Host "Introduce la contraseña" -AsSecureString $mail = Read-Host "Introduce tu email" $mycredentials = New-Object System.Management.Automation.PSCredential ($mail, $password) #Importar datos desde Csv $csv = Import-Csv -Path E:\Send-Email.csv $csv | % { Send-MailMessage -From $mail -To $_.To -Body $_.Body -Subject $_Subject -Credential $mycredentials -SmtpServer "smtp.domain.com" -UseSsl -Priority High } |
Ya podemos enviar emails con información básica, pero… ¿y si queremos adjuntar algún tipo de archivo?. No hay que preocuparse, con este cmdlet también se puede, ya que cuenta con el parámetro «Attachments», donde pondremos la ruta del archivo que queremos adjuntar.
Para realizar esto debemos añadir una columna mas en el Excel del cual leemos la información. Sería algo así:
Una vez tengamos esto, haremos lo mismo que en el script anterior pero añadiendo el parámetro «Attachments».
Para que todo este mejor programado, he tratado las excepciones y creado una función que alerta cuando se realiza correctamente el envío o cuando algo ha fallado. Quedarí así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#Se añaden los ensambladores. Sin esto no funciona el mensaje de alerta [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") #Funciones Function Show-Alert { Param( [string] $Mensaje, [string] $Titulo, [System.Windows.Forms.MessageBoxButtons] $Botones, [System.Windows.Forms.MessageBoxIcon] $Icono ) return [System.Windows.Forms.MessageBox]::Show($Mensaje, $Titulo, $Botones, $Icono) } #Crear un objeto de tipo credential $mail = Read-Host "Introduce el email" $password = Read-Host "Introduce la contraseña" -AsSecureString $mycredentials = New-Object System.Management.Automation.PSCredential ($mail, $password) #Importar datos desde Csv $csv = Import-Csv -Path E:\Send-Email.csv try { $csv | % {Send-MailMessage -Attachments $_.Adjuntos -From $mail -To $_.To -Body $_.Body -Subject $_.Subject -Credential $mycredentials -SmtpServer "smtp.domain.com" -UseSsl -Priority High} Show-Alert -Mensaje "Email enviado corretamente" -Titulo "Informacion" -Botones OK -Icono Asterisk } catch { Show-Alert -Mensaje "No se ha podido enviar el email" -Titulo "Informacion" -Botones OK -Icono Error } |
*Nota: usar siempre el parametro «UseSsl». Si no se pone, sacará un error por consola como el siguiente:
0 comentarios