Como fazer o crontab me enviar um email com a saída?

41

Como posso fazer crontab me enviar e-mail com a saída de seus trabalhos? Eu tenho MAILTO=redacted@yahoo.com.au acima dos trabalhos, mas não funciona.

Eu sei que preciso usar algo como Postfix ou Sendmail, mas para a vida de mim não consigo descobrir como conseguir isso. Eu pesquisei e procurei por um guia simples sobre como configurar o Postfix, mas eles são incrivelmente complicados e espero que você esteja configurando um servidor inteiro para enviar e receber e-mails e conhecer todos os termos (como, o que é um nome de domínio para e-mails enviados?).

Tudo o que quero fazer é crontab me enviar um e-mail. Por que isso é tão difícil ??

Informações adicionais:

Meu arquivo crontab tem esta aparência:

MAILTO=redacted@yahoo.com.au
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

Mais informações adicionais:

A saída de ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

Eu sei que o cron está funcionando, mas estou testando o comando mail com echo Test | mail -s Test redacted@yahoo.com.au de qualquer maneira.

    
por Clonkex 14.10.2014 / 02:03

4 respostas

32

No final, usei sSMTP . É muito, muito mais simples do que Postfix ou sendmail e faz o trabalho lindamente.

Para referência futura, veja como usar o sSMTP com o Yahoo Mail (não se preocupe, é muito menos complexo do que parece):

  • Use o Synaptic para fazer o download do ssmtp. Como alternativa, você pode executar sudo apt-get install ssmtp .

  • Abra o arquivo de configuração em /etc/ssmtp/ssmtp.conf.

  • Faça a configuração ficar assim:

root=[yourRealEmail@yahoo.com.au]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[yourRealEmail@yahoo.com.au]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Crie o arquivo cert.pem com o OpenSSL. Eu usei o comando openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes (mais informações aqui ). Você pode colocar o arquivo em qualquer lugar, mas eu apenas o joguei em ~ /. Onde quer que você o coloque, certifique-se de apontar a linha TLS_CA_File= em ssmtp.conf para o local correto.

  • Abra o arquivo /etc/ssmtp/revaliases e adicione a linha [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587 . Se você está rodando como root, eu acho que você precisa adicionar outra linha substituindo seu nome por 'root'.

  • É isso mesmo, você é bom de ir! Para testar, a maneira mais fácil (IMO) é criar um arquivo com o seguinte:

To: [yourRealEmail@yahoo.com.au]
From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • Salve e feche o arquivo, para verificar se você não tem o sendmail real instalado, execute sendmail -V - ele deve dizer 'sSMTP'.
  • Finalmente, execute cat fileWithEmailInIt.txt | sendmail -i -t , aguarde alguns segundos (10-30) e verifique seu e-mail!

Obviamente, substitua [yourRealEmail@yahoo.com.au] pelo seu e-mail (sem os colchetes) e [yourRealYahooPassword] pela sua senha do Yahoo Mail (novamente, sem os colchetes).

Nota adicional: se tiver problemas com o Gmail, experimente a opção 1 de esta resposta (obrigado para Ben Creasy para essa informação).

    
por Clonkex 14.10.2014 / 14:23
14

Instale o Postfix. É mais complicado que a maioria dos outros pacotes, mas ainda não é complicado .

sudo apt-get install postfix

Selecione "Site da Internet" e aceite todos os padrões. Então, precisamos apenas interromper conexões externas, transformando isso em um " cliente nulo ". Execute: sudoedit /etc/postfix/main.cf e encontre a configuração inet_interfaces (perto do final) e altere para loopback-only , assim:

inet_interfaces = loopback-only

E, finalmente, reinicie o Postfix com sudo /etc/init.d/postfix restart (o recarregamento não será suficiente).

Agora você tem uma instalação do Postfix que não retransmite e-mail para máquinas externas, apenas aceitará conexões em 127.0.0.1 (e :: 1 para IPv6).

Em uma nota separada, suas linhas cron provavelmente não estão funcionando porque você está usando caminhos e caminhos não relativos com substituições Bash em. sh não entende ~ e pode não ter um% co_de adequado % definido. Então, substitua-os por (estou apenas adivinhando os caminhos reais):

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh
59 6 * * *  /home/clonkex/Desktop/tooptus.sh
0 3 * * *   /usr/bin/snapraid sync

E se seus scripts precisarem ser executados em um diretório específico, verifique se eles PATH estão no diretório correto. Não assuma que cd estará no lugar certo, como provavelmente não acontecerá.

    
por Oli 14.10.2014 / 10:16
3

Eu tive muita sorte com o exim4.

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(alpine é apenas o cliente de email que eu gosto de usar)

Depois disso, eu corri

sudo dpkg-reconfigure exim4-config

e seguido pelos prompts. Esta página: link foi muito útil também. Demorei cerca de 10 minutos para executá-lo.

    
por Oh Ar 11.09.2015 / 19:06
1

De manpage sSMTP: "Ele não faz aliasing, o que deve ser feito no user agent ou no mailhub. Nem homenageia .forwards, que tem que ser feito no host de recebimento. É especialmente não entrega para pipelines. "

Portanto, se você deseja receber todas as mensagens enviadas para root no seu email extenso, é uma má idéia usar o sSMTP, porque ele não suporta aliases.

Em vez disso, você poderia postfix do usuário. Ainda é muito simples. Veja como usá-lo com o Gmail como seu smtp para enviar mensagens:

sudo apt-get install postfix mailutils

Tipo geral de configuração de correio: Sistema de satélite

Nome do correio do sistema: o nome totalmente qualificado preferido do servidor de e-mail, por exemplo, mail.example.com

Host de retransmissão SMTP (em branco para nenhum): [smtp.gmail.com]: 587

Adicione a /etc/postfix/main.cf:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Crie / etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

Então:

sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*

Edite / etc / aliases e adicione:

root: email@example.com

Por fim, execute:

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

Agora, você pode testar se o redirecionamento está funcionando:

echo "Test to root." | mail -s "Test message to root" root

Espero que ajude.

    
por duli 02.06.2018 / 06:27