Email por script no Windows

blat

Posted by     "rbits" on Sunday, October 17, 2021

TOC

Histórico

Hoje em dia, a tarefa de enviar email pela linha de comando pode parecer obsoleta mas existe situações como no caso de scripts que continuam de uma solução para envio de email em tarefas automatizadas como por exemplo: programação de mala direta, envio de relatórios e logs de processos em servidores, etc.

Por muitos anos, usei o programa blat.exe (https://www.blat.net/) em batch ou Kixtart, outra linguagem script semelhante aos comandos de prompt do Windows (www.kitart.org). Na ocasião, foi utilizado o serviço SMTP do Sendmail que foi configurado para permitir o envio de email interno para um determinado usuário de serviço.

Mas o tempo mudou e o serviço SMTP na porta 25 sem nenhuma criptografia evoluiu. Agora é necessário uma porta segura para o envio por meio de uma conexão SSL na porta 465 ou 587. Mas o utilitário Blat.exe não oferece a opção de envio por uma conexão segura.

A solução é usar o programa Stunnel (https://www.stunnel.org/) que também é gratuito que permite o Blat a encaminhar o email de forma segura utilizando SSL na porta smtp do Gmail.

O Stunnel tem o arquivo de configuração stunnel.conf que deve ser configurado como segue:


client = yes
output = stunnel-log.txt
debug = 0
taskbar = no

[SMTP Gmail] accept = 127.0.0.1:1099
connect = smtp.gmail.com:465

Ver mais detalhes na dia do Gustavo do site GusSOS. O objetivo é enviar email de notificação pela minha conta do próprio Gmail.

Exemplo de um arquivo Batch para mover pastas origem para destino definidas em variveis. Faz o registro em arquivo log e envia um email.

Rem - Não colocar \ no final do path ORIGEM e DESTINO
set ORIGEM="C:\TEMP\BACKUP\ATUAL"
set DESTINO="C:\TEMP\BACKUP\ANTERIOR"
set LOGS="C:\TEMP\SCRIPTS\LOGS"
Setlocal
title %LOGS%

Rem ================================================
Rem Verifica os outros diretórios, senão existir cria.
IF NOT EXIST  %LOGS%         mkdir        %LOGS%        | ECHO  Criado %LOGS%
IF NOT EXIST  %ORIGEM%       mkdir        %ORIGEM%      | ECHO  Criado %ORIGEM%
IF NOT EXIST  %DESTINO%      mkdir        %DESTINO%     | ECHO  Criado %DESTINO%

Rem ================================================
Rem - Verifica se o diretório %ORIGEM% está vazio
For /F %%A in ('dir /b /a %ORIGEM%') Do (
    Echo A pasta %ORIGEM% nao esta vazia
    goto :ok
)
Echo A pasta %ORIGEM% esta vazia
Goto Fim
pause

:ok

pause
Rem ================================================
Rem Definir o nome baseado em TimeStamp
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"

Rem ================================================
Rem Copia Arquivos para o conteudo da variavel %ORIGEM% para o %DESTINO%
For /F %%A in ("dir /b /a %ORIGEM%") Do (
    Echo A pasta %ORIGEM% nao esta vazia 
	robocopy.exe %ORIGEM% "%DESTINO%\%fullstamp%"  /MOVE /sec /tee /E  /ETA /w:1 /R:1 /LOG+:"%LOGS%\%fullstamp%.log"
	GOTO sub_%ERRORLEVEL%)
   
:sub_0 
   Echo As mesmas pastas existem no destino. Nada alterado.
    mkdir %ORIGEM%
   GOTO Limpeza

:sub_1
   Echo Pastas movidas com sucesso.
   mkdir %ORIGEM%
   GOTO Limpeza

:sub_2
   Echo Pasta origem vazia ou origem e destino divergente.
   mkdir %ORIGEM%
   GOTO Limpeza

Rem ================================================
Rem Efetua a limpeza dos logs e versionamento do backup
:Limpeza
REM Aqui apaga as pastas.
forfiles -p "%DESTINO%" -d -1 -c "cmd /c IF @isdir == TRUE   rd /S /Q @path"

REM Aqui apaga os arquivos.
forfiles -p    "%LOGS%" -d -1 -c "cmd /c IF @isdir == FALSE  DEL /Q @path"
		
:Fim
Echo Finalizado.
Rem Enviar Email para a conta do Google.
:SendMail
REM ASSUNTO
set Subject= Enviar Email pelo Blat.exe
REM ENDEREÇO ORIGEM
set Sender=user1@gmail.com
REM ENDEREÇO DESTINO
set Receiver=user2@gmail.com
REM = SERVIÇO SMTP DA SUA REDE
set Server=127.0.0.1:1099 
REM Nome do arquivo a ser enviado, por exemplo, backup.log
REM ENVIO DO EMAIL
blat.exe "%file%" -to %receiver% -subject "%subject%" -f %sender% -server %server%

:sair

Documentos

GusSOS Enviar Email pela linha de comando.
STUNNEL Baixar o STUNNEL.
GOOGLE SUPPORT Mais detalhes sobre o serviço GMAIL.

Perguntas Mais Frequentes