Enviando e-mail com PowerShell no Windows

     images
Olá pessoal, venho através deste post utilizar uma opção para envio de e-mail utilizando o PowerShell do Windows com o utilitário chamado SMTPSend ferramenta que efetua o envio de e-mail através da linha de comando do Windows. O modelo do Script utilizado foi configurado para dar suporte a servidores smtp comuns ou com ssl habilitado.  Precisei efetuar essa configuração para obter informações de relatórios de execução de backup de bancos de dados MySQL que administro. Vamos colocar a mão na massa agora.

Pré-requisitos:
– Efetuar o download do SMTPSend para utilização no script.
– Powershell habilitado para execução de scripts.

Ambiente utilizado:
– Windows 2008 Server R2
– Windows 7 Ultimate
– PowerShell 2.0
– SMTPSend para enviar os e-mails.

Pagina para efetuar o download do SMTPSend.
http://www.dataenter.co.at/download.asp

Download do SMTPSend :
http://download.dataenter.co.at/ftp/demk/smtpsend.zip

Nome do Script: envia_email.ps1
######### Inicio do Script #########
#### Configurando Servidor Smtp #################
$servidor = “smtp.gmail.com”;
$porta_smtp=”25″;
$porta_smtp_ssl=”587″;

#### Configurando Conta Smtp ####################
$conta = “[email protected]”;
$senha = “suasenha”;

#### Configurando Assunto, corpo da mensagem e anexo ##########
$anexo = “D:\backup\teste.zip”;
$assunto = “Teste de E-mail”;
$corpo = “Teste de E-mail”;

#### Configurando E-mail do Destinatario das Mensagens ########
$destinatario = “[email protected]”;

#### Configurando Diretório para execução do envio de e-mail ######
$sendmail=”D:\sendmail\”;
Set-Location $sendmail;

#### Exportando o comando para execução em arquivo batch com suporte a smtp comum ##########
#$envia_email=”cmd.exe /C smtpsend.exe -f$conta -t$destinatario -s$assunto -mbt$corpo -a$anexo -h$servidor -p$porta_smtp -lu$conta -lp$senha”;
#echo $envia_email | Out-File -FilePath envia-email.bat -Encoding ASCII;
#### Executa envio de e-mail #####
#.\envia-email.bat;

#### Exportando o comando para execução em arquivo batch com suporte a smtp com ssl ##########
$envia_email_ssl=”cmd.exe /C smtpsend.exe -f$conta -t$destinatario -s$assunto -mbt$corpo -a$anexo -h$servidor -p$porta_smtp_ssl -lu$conta -lp$senha”;
echo $envia_email_ssl | Out-File -FilePath envia-email-ssl.bat -Encoding ASCII;
#### Executa envio de e-mail com suporte ssl #####
.\envia-email-ssl.bat;

#### Remove arquivo .bat depois da execução por segurança #########
#del -rec envia-email.bat;
del -rec envia-email-ssl.bat;

# OBS: Descomente a seção de Exportação do arquivo bat no qual irá utilizar para enviar o seu e-mail, se for utilizar smtp comum ou smtp com ssl.
######### Fim do Script #########

Explicando a utilização do script em linhas gerais, você irá configurar o servidor , usuário e senha de autenticação. O SMTPSend é somente compatível com o Prompt de comando do Windows , por isso quando se executa o script o mesmo irá criar um script “.bat” para executar o SMTPSend e depois de executado excluíra o script “.bat”.

Estrutura de Utilização para o Script de Envio de E-mail com PowerShell :

Capturar3

Screenshot da execução do Script de Envio de E-mail com PowerShell :

Capturar1

Recebimento do E-mail enviado pelo Script de Envio de E-mail com PowerShell:

Capturar2

Para a utilização do Script de Envio de E-mail com PowerShell é só configurar de acordo com o seu ambiente. Tendo dúvidas na utilização, favor comentar no post.

Fonte: http://emersongaudencio.blogspot.com.br/2012/05/enviando-e-mail-com-powershell-no.html

  • Julio Cesar Brito

    Seria válido em um servidor RODC este “SMTPSend” ?

    • Julio ,
      Acredito que sim. pois se o RODC gerar um relatório em .html ou .txt é possível utilizá-lo no corpo da mensagem ou como anexo com o SMTPSend. O SMTPSend é um cliente de e-mail, nisso ele só é utilizado para enviar o e-mail para aplicações que não possui cliente próprio, que no caso foi o relatório de rotina de backup do MySQL que utilizei. Caso tenha mais alguma dúvida é só postar.

  • Marco Túlio

    É possível passar parâmetro ao chamar esse script? Por exemplo, o corpo vai ser passado na hora da chamado do .bat

    • Sim, você pode adicionar uma adicionar uma variável informando o destino do arquivo que será o corpo da mensagem.
      Vou adicionar no Post um Exemplo demonstrando como enviar e-mail com corpo em html ou txt já pré-definidos.

  • Excelente dica Emerson !! 🙂

  • gustavo

    Olá, como eu faço pra enviar um arquivo em anexo dessa mesma forma?