Cobriremos especificamente isso para o Ubuntu e o Windows 8.1, com o Gmail sendo usado como o servidor de email do qual o email é enviado. Se você tiver outra versão do Linux ou Windows ou preferir usar algum outro serviço de e-mail, as instruções aqui devem ser facilmente adaptáveis.
E-mails automatizados no Linux
Vamos usar dois pacotes diferentes para realizar isso, ssmtp e mailutils, então instale os dois com o seguinte comando:
$ sudo apt-get install ssmtp mailutils
Depois de instalados, precisamos fazer algumas alterações no arquivo de configuração do SSMTP:
$ sudo vi /etc/ssmtp/ssmtp.conf
Edite o arquivo com essas alterações (é seguro apenas apagar todo o texto do arquivo e copiar / colar essas configurações, se desejar):
# This address will receive the emails, so enter your own email here if you want to receive them.
# Specify the email server here (leave as is if you’re using Gmail).
mailhub=smtp.gmail.com:587
# The domain name that the mail will come from.
rewriteDomain=gmail.com
# The email address that these emails should be from.
# SSL/TLS settings, required for Gmail and most other mail servers.
UseTLS=Yes
UseSTARTTLS=Yes
# The username and password to your Gmail account.
AuthUser=username
AuthPass=password
# Allow the ability to specify a from address different than the one above.
FromLineOverride=yes
Quando você terminar de editar o arquivo, altere as permissões, pois a senha do Gmail é armazenada em texto sem formatação.
$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown username.username /etc/ssmtp/ssmtp.conf
É sempre mais seguro fazer o root do proprietário do arquivo, mas depois teríamos que usar o comando sudo em nosso script e isso nos levaria a uma senha, derrotando assim o propósito de automatizar todo esse processo.
Se você estiver usando um servidor compartilhado e estiver preocupado com a senha armazenada em texto sem formatação e legível pelo root, crie uma conta descartável do Gmail ou use um servidor de e-mail que não exige nenhum tipo de autenticação.
Para garantir que tudo esteja configurado corretamente, vamos tentar um email de teste:
$ echo 'Testing' | mail -s 'Testing mail setup' [email protected]
"Teste" estará no corpo do e-mail e o assunto será "Testando configuração de e-mail". Verifique seu e-mail para confirmar o recebimento.
Escrevendo um script para os e-mails
Agora que podemos enviar e-mails a partir da linha de comando, vamos escrever um script que nos envie algumas informações básicas sobre nosso sistema.
#!/bin/bash
# Check hard drive space
echo 'Hard drive space:' > /home/geek/email.txt
df -h >> /home/geek/email.txt
# List the users that are logged in
echo 'Users currently logged in:' >> /home/geek/email.txt
who >> /home/geek/email.txt
# List currently running processes
echo 'Running processes:' >> /home/geek/email.txt
ps -e >> /home/geek/email.txt
# Send the email
cat /home/geek/email.txt | mail -s 'Daily server information' [email protected]
# Delete the file we created
rm /home/geek/email.txt
Obviamente, você pode aprofundar muito o seu script e até tornar a formatação um pouco mais agradável, mas é assim que a saída aparece em nosso email:
$ crontab -e
Para e-mails de 2:00, adicione:
0 2 * * * /home/geek/script.sh
Escrevemos um artigo inteiro sobre arquivos crontab se você precisar de mais ajuda com essa parte.
E-mails automatizados no Windows
O envio de e-mails na linha de comando é possível por meio do PowerShell, mas descobrimos que implementar essa funcionalidade é muito mais fácil com aplicativos de terceiros, especialmente ao usar o Gmail. O SendEmail é um programa gratuito disponível para Windows que facilita a integração com o Agendador de Tarefas do Windows e com o Gmail. Clique no link acima para baixar a cópia mais recente e certifique-se de pegar a versão suportada pelo TLS.
Depois de fazer o download do SendEmail, extraia o arquivo zip e coloque o conteúdo em algum lugar no qual você possa armazená-lo enquanto você planeja enviar e-mails automatizados. Neste exemplo, vamos apenas armazenar o programa em C: SendEmail
Vamos testar o SendEmail para ter uma ideia rápida de como isso funciona. Abra um prompt de comando digitando cmd no menu Iniciar ou Executar (Ctrl + R).
cd C:SendEmail
Agora podemos tentar enviar um email de teste com o seguinte comando:
sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu username -xp password -u 'Test email subject' -m 'This is a test email.'
Obviamente, substitua “username” e “password” pelas credenciais da sua conta antes de executar o comando.
Veja o que o comando acima realmente faz:
sendEmail
executa o programa.
-f
- a partir do endereço
-t
- endereçar
-s
- servidor SMTP
-xu
- Nome de usuário da conta
-xp
- Senha da conta
-u
- assunto do email
-m
- texto do corpo do email
Verifique sua caixa de entrada para se certificar de que recebeu o e-mail de teste e, em seguida, podemos passar a escrever um script que nos enviará as informações do servidor.
Escrevendo um script para os e-mails
Para aproveitar ao máximo nosso script, vamos escrevê-lo para o PowerShell. Abra o Windows PowerShell ISE digitando powershell_ise.exe em um prompt Executar (Ctrl + R).
# Check hard drive space
echo 'C: Drive Usage:' > C:SendEmailinfo.txt
Get-WmiObject win32_LogicalDisk -Filter 'DeviceID='C:'' | Select-Object Size,FreeSpace >> C:SendEmailinfo.txt
# List currently running processes
echo 'Running processes:' >> C:SendEmailinfo.txt
get-process >> C:SendEmailinfo.txt
# List the files/folders currently being shared
echo 'SMB shares:' >> C:SendEmailinfo.txt
get-smbshare >> C:SendEmailinfo.txt
# Send the email
type C:SendEmailinfo.txt | C:SendEmailsendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu username -xp password -u 'Daily server info'
# Delete the file we made
rm C:SendEmailinfo.txt
Nesse script, várias informações são enviadas para C: SendEmail info.txt e, em seguida, o texto desse documento é enviado por e-mail para nós antes de ser excluído. Salve seu script com uma extensão de arquivo ps1 (arquivo PowerShell).
Com o script concluído, faça um teste rápido a partir de um aviso de execução para verificar se ele está funcionando corretamente.
Basta usar o
powershell
comando com um
-file
argumento e especifique o caminho para o seu script.
powershell -file 'c:SendEmaildaily-email.ps1'
Depois de resolver os problemas no seu script, você pode usar o Agendador de Tarefas do Windows para automatizá-lo. Abra o Agendador de Tarefas do Windows no menu Iniciar.
Agora você deve estar na parte "Ação" do assistente, selecione "Iniciar um programa" e insira o mesmo texto que inserimos no prompt Executar antes para testar nosso script.