Hace unos días me surgió la necesidad de enviar correos de una forma rápida desde una maquina de la red local cuando se enciende. Enviarlos de una manera sencilla, sin tener instalado nada de correo y que me comunicase su hora de conexión, nombre de maquina y la IP que tiene la maquina en ese momento. La solución es sencilla, un script de powershell lo permite.
Os dejo un ejemplo de esto, enviado usando una cuenta de gmail, que es lo que aconsejo, ya que gmail permite estos reenvíos directamente. EL problema es que gmail usa seguridad, por lo cual voy a dejar abajo el script completo, incluso enviando un adjunto que lo realiza.
Igualmente necesitamos poner la password de gmail, y esto no me gusta dejarlo en un script, por lo cual se debe dejar en un fichero encriptado. Para ello, y suponiendo que vamos a dejar los scripts en la carpeta c:\util\ps (cambiarlo si es necesario), lo primero que ejecutamos en un powrshell es:
Poner en 'tu password gmail' la password de vuestra cuenta de gmail. Esto dejará encriptada la password en el fichero c:\util\ps\pw-ccif.txt (podeis entrar a mirarlo, y ver lo que ha dejado). La encriptacion es "por maquina", es decir hay que ejecutarlo en las maquinas que queramos usar el script y no copiarlo desde otra maquina. Solo, evidentemente hay que hacerlo una vez.
El script para envío, es:
Guardarlo como C:\util\ps\correops.ps1
Y para ejecutarlo, podeis hacerlo con:
powershell -executionpolicy remotesigned -File C:\util\ps\correops.ps1
Si quereis que se ejecuta de forma automatica, ponerlo en el inicio de windows.
Evidentmente debeis cambiar en él;
$EmailPropio = "tucuentadegmail@gmail.com";
$EmailDestino = "cuentadestinocorreo@loquesea.com";
(puede ser el mismo).
NOTA: si cuando envieis, falla el script en la ultima linea(en el envio de mensaje) es porque no teneis configurada vuestra cuenta para permitir envios de clientes que gmail llama "no seguros"... es decir, desconocidos para él. Recibireis admeas una alerta de gamil diciendo que alguien lo quiere usar. Para solventar este problema reconfigurarlo en vuestra cuenta de gmail: https://support.google.com/accounts/.../6010255?hl=es
Os dejo un ejemplo de esto, enviado usando una cuenta de gmail, que es lo que aconsejo, ya que gmail permite estos reenvíos directamente. EL problema es que gmail usa seguridad, por lo cual voy a dejar abajo el script completo, incluso enviando un adjunto que lo realiza.
Igualmente necesitamos poner la password de gmail, y esto no me gusta dejarlo en un script, por lo cual se debe dejar en un fichero encriptado. Para ello, y suponiendo que vamos a dejar los scripts en la carpeta c:\util\ps (cambiarlo si es necesario), lo primero que ejecutamos en un powrshell es:
Código:
"tu password gmail" | Convertto-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-file "c:\util\ps\pw-ccif1.txt"
El script para envío, es:
Código:
<# Previamente: (hacerlo por fuera una sola vez por maquina) "tu password" | Convertto-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-file "c:\util\ps\pw-ccif1.txt" Ejecutar como: powershell -executionpolicy remotesigned -File C:\util\ps\correops.ps1 #> $scriptpath = $MyInvocation.MyCommand.Path $dir = Split-Path $scriptpath # $EmailPropio = "tucuentadegmail@gmail.com"; $EmailDestino = "cuentadestinocorreo@loquesea.com"; # $Asunto = "Conexion: $env:computername $((Get-Date).ToString())" $Texto = "Conectado desde $env:computername a las $((Get-Date).ToString())" # $ServidorSMTP = "smtp.gmail.com" $Archivo = "$dir\ipps.txt" Get-NetIPAddress -AddressFamily ipv4 | ft IPAddress, InterfaceAlias | out-file -filepath $Archivo $Adjunto = New-Object Net.Mail.Attachment($Archivo) $password = Get-Content "$dir\pw-ccif1.txt" | Convertto-SecureString ## ## $Mensaje = New-Object System.Net.Mail.MailMessage $Mensaje.From = $EmailPropio $Mensaje.To.Add($EmailDestino) $Mensaje.IsBodyHtml = $True $Mensaje.Subject = $Asunto $Mensaje.Body = $Texto $Mensaje.Attachments.Add($Adjunto) $ClienteSMTP = New-Object Net.Mail.SmtpClient($ServidorSMTP, 587) $ClienteSMTP.EnableSsl = $true $ClienteSMTP.Credentials = New-Object System.Net.NetworkCredential($EmailPropio, $password); $ClienteSMTP.Send($Mensaje)
Y para ejecutarlo, podeis hacerlo con:
powershell -executionpolicy remotesigned -File C:\util\ps\correops.ps1
Si quereis que se ejecuta de forma automatica, ponerlo en el inicio de windows.
Evidentmente debeis cambiar en él;
$EmailPropio = "tucuentadegmail@gmail.com";
$EmailDestino = "cuentadestinocorreo@loquesea.com";
(puede ser el mismo).
NOTA: si cuando envieis, falla el script en la ultima linea(en el envio de mensaje) es porque no teneis configurada vuestra cuenta para permitir envios de clientes que gmail llama "no seguros"... es decir, desconocidos para él. Recibireis admeas una alerta de gamil diciendo que alguien lo quiere usar. Para solventar este problema reconfigurarlo en vuestra cuenta de gmail: https://support.google.com/accounts/.../6010255?hl=es
Comentario