Sendmail não funciona como desejado no script bash

1

Este é o código que tenho em um script bash que é executado como um cronjob. O cronjob é executado como root.

   /usr/sbin/sendmail [email protected]<<EOF
   subject:Backup Error!
   from:backup@server01
   $error
        EOF

Existe código depois disso e o email que recebo é o seguinte:

Do usuário root na máquina.

e a mensagem inclui:

   subject:Backup Error!
   from:backup@server01
   $error
        EOF
   More code...
   that is in the script
   all the way to the end...

Eu tentei outras variações, esta é a mais próxima que eu tenho. Eu tentei isso em um script regular e funcionou corretamente. O que está acontecendo e como posso enviar este e-mail, especificando o assunto e o remetente do formulário?

    
por dan08 24.10.2013 / 15:29

3 respostas

2

As respostas anteriores já mencionaram:

  • final ruim de "aqui documento" (END)
  • falta de linha vazia entre cabeçalhos e corpo

Correções adicionais:

  • -i opção de linha de comando para parar o tratamento especial para linhas que começam com ponto
  • -- para separar as opções da linha de comando dos endereços dos destinatários     (boa recomendação de estilo)

script corrigido:

/usr/sbin/sendmail -i -- [email protected] <<EOF
subject: Backup Error!
from:backup@server01

$error
EOF
    
por AnFi 24.10.2013 / 17:35
1

Sugiro que você não use nenhum caractere de espaço em branco na frente ou após a segunda string de limite EOF . Se você usar apenas um espaço na frente ou depois da string limite, esse bloco de código para fins especiais nunca funcionará. Então, use apenas:

EOF

E você deve ler alguns guias de script bash nesse sentido, como Capítulo 19. Documentos aqui .

    
por Radu Rădeanu 24.10.2013 / 15:41
1

O Sendmail (e e-mail em geral, parece) requer uma linha em branco entre os cabeçalhos e o corpo. O exemplo a seguir funcionou.

$ sendmail [email protected] <<EOF
> subject: testing
> from: [email protected]
> 
> This is my body!
> EOF

(Obviamente colando isso com o > s lá não vai funcionar, apenas altere o que você está fazendo para que haja uma linha em branco entre seus cabeçalhos e a mensagem de erro).

    
por Oli 24.10.2013 / 15:49