Compartilhar via


Enviando e-mails pelo Powershell

Introdução

Com o Powershell podemos utilizar objetos nativos do Net.Framework, um desses objetos é o SMTPClient, que é utilizado para enviar e-mails, isso pode ser muito útil em nossos scripts, quando queremos saber se houve erro ou algo do gênero.

Utilizando o SMTPClient

Primeiro temos que criar em nossa sessão de Powershell um objeto do tipo SMTPClient.

$SMTPClient = New-Object System.Net.Mail.SMTPClient

Após temos que preencher as propriedades deste objeto, mas para isso antes temos que conhece-las, podemos utilizar o seguinte comando para nos listar as propriedades disponíveis do objeto.

$SMTPClient | FL *

Como vamos enviar um e-mail autenticando via SMTP precisamos criar um objeto para nossas credenciais, conforme a propriedade Credentials solicita.

$Credentials = new-object System.Net.networkCredential
$Credentials.domain = "contoso.com.br"
$Credentials.UserName = "matheus@contoso.com.br"
$Credentials.Password = ""

Começamos então a preencher as propriedades do nosso objeto SmtpClient.

$SmtpClient.Host = 'mailserver01.contoso.com.br'
$SmtpClient.Credentials = $Credentials

Agora todas propriedades de nosso objeto já estão preenchidas corretamente precisamos achar o metodo que faz ele enviar a mensagem, fazemos isso usando o Get-Member em nosso objeto.

$SmtpClient | Get-Member | FL (Adicionamos o FL no final somente para facilitar a visualização dos parâmetros que o método vai receber)

Achamos então o metodo Send que recebe os parâmetros, Send(string from, string recipients, string subject, string body), então vamos enviar nosso primeiro e-mail a partir do Powershell.

$SmtpClient.Send('from@contoso.com.br','to@contoso.com.br','Subject – Nada de mais','Oi só mais um spam...')

Se tudo estiver ok, com nosso servidor de e-mail receberemos nosso belo spam na caixa de entrada em breve, caso nosso servidor de e-mail aceite envios sem autenticação de nosso ip podemos fazer da mesma forma só deixamos o parâmetro Credentials vazio.

Podemos criar uma Função para tornar o processo mais agil.

Function EnviaMail($destino,$mensagem,$assunto)
{
$email = new-object System.Net.Mail.MailMessage("script@contoso.com.br",$destino)
$email.IsBodyHtml = $True
$email.Subject = $assunto
$email.Body = $mensagem
$smtp = new-object Net.Mail.SmtpClient("envio.contoso.com.br","25")
$smtp.Credentials = new-object System.Net.NetworkCredential("outgoing@outgoing.com", "Pa$$w0rd")
$smtp.Send($email)
}

Agora tudo que temos de fazer é chamar a nossa função.

EnviaMail -Destino “chefe@contoso.com.br” -Mensagem “oi chefinho” -Assunto “Me da um aumento ai...”

Pronto, nossos scripts agora já podem enviar e-mails!

Este artigo foi originalmente escrito por:
**Matheus Kamphorst | **blog: http://howtoserver.com/