Páginas

domingo, 6 de maio de 2012

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.

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 = "teste@gmail.com";
$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 = "teste@gmail.com";

#### 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.

10 comentários:

  1. não entende muito bem, fiz download do send, configurei o not pra aceitar script... mais e depois? você pulou algo ou esqueceu de colocar tbm.

    esse comando ou script, onde devo colocar Nome do Script: envia_email.ps1
    ######### Inicio do Script #########
    #### Configurando Servidor Smtp #################
    $servidor = "smtp.gmail.com";
    $porta_smtp="25";
    $porta_smtp_ssl="587";
    ?

    ResponderExcluir
  2. Graciano,
    Realmente omiti uma informação, criei esse post como resultado de uma pesquisa e implementação, nisso acabei omitindo algumas informações. Depois que você habilita o seu servidor/cliente para executar scripts powershell, será necessário criar um arquivo com a extensão ".ps1" que no caso utilizei o nome "envia_email.ps1" para que o powershell possa executar este script. também é necessário criar um arquivo batch para automatizar a execução do script conforme está na penúltima imagem do post. Lembrando que no script você terá que informar o diretório onde o scripts e o executável do smtpsend está localizado. No exemplo do post criei uma pasta chamada "sendmail" no drive "D:" ou "D:\sendmail" com o script batch para executar o powershell, mais o script powershell disponibilizado no post e o executável do smtpsend.

    Veja no site abaixo, uma introdução a powershell:
    http://howtoserver.com/aprender-powershell/

    Caso tenha mais alguma dúvida, favor comentar. Espero que tenha explicado o que deixei de tratar no post.

    ResponderExcluir
  3. Gaudêncio, posso utilizar essa dica para enviar e-mails quando o log de evento do Windows Server for disparado? fiquei na dúvida como eu "chamo/executo" o executável do SMTP cliente, o próprio bat chama o executável ? e no caso onde o servidor está atrás de um proxy?

    ResponderExcluir
  4. Bruno,
    essa rotina foi desenvolvida para interagir com aplicações de linha de comando, nisso para vc utilizar ele para enviar e-mails quando o log de evento do windows for disparado numa determina ação dependerá da configuração que efetuará no mesmo. A Execução do script powershell é efetuada por um script bacth que chama o powershell. O Servidor que precisei implementar isso não possuía a opção de utilizar relay de e-mail, nisso resolvi procurar uma alternativa simples que pudesse ser utilizada por linha de comando para utilizar nos scripts de backup dos servidores que administrava.

    ResponderExcluir
  5. Olá Emerson. Preciso enviar a mais de um destinatário, como faria isso exatamente no código .ps.
    Tentei como separador a vírgula mais não funcionou.

    ResponderExcluir
    Respostas
    1. Khristhiano,
      Você terá que adicionar mais um parametro "-t" na variavel envia_email e depois terá que criar mais variaveis destinátarios para enviar os e-mails.

      Fiz o teste manual conforme abaixo e funcionou normalmente.

      SMTPSend.exe -femerson.fender@gmail.com -temerson.fender@gmail.com -temerson.gaudencio@outlook.com -sTeste de E-mail -hsmtp.gmail.com -p587 -luemerson.fender@gmail.com -lpsuasenha

      Espero que ajude. Qualquer dúvida entre em contato.

      Vou te encaminhar uma revisão deste script.

      Excluir
  6. É possível passar parâmetro? por exemplo o assunto do email ser passado na hora da chamada do .bat ?

    ResponderExcluir
  7. ao executar aparece a seguinte mensagem no final:
    Error: Unable to establish a connection with mail host [14]
    como resolver isso? obrigado.

    ResponderExcluir