Sendmail не работает должным образом в скрипте bash

Это код, который у меня есть в bash-скрипте, который выполняется как cronjob. Cronjob работает от имени root.

   /usr/sbin/sendmail myemail@email.com<<EOF
   subject:Backup Error!
   from:backup@server01
   $error
        EOF

После этого есть код, и электронное письмо, которое я получаю, выглядит следующим образом:

От пользователя root на машине.

и сообщение включает в себя:

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

Я пробовал другие варианты, это самый близкий у меня есть. Я попробовал это в обычном сценарии, и он работал правильно. Что происходит и как я могу отправить это письмо, указав тему и форму отправителя?

1
задан 24 October 2013 в 17:29

3 ответа

Предыдущие ответы уже упомянули:

  • плохой конец "здесь документа" (КОНЕЦ)
  • недостающая пустая строка между заголовками и телом

Дополнительные меры:

  • -i параметр командной строки для остановки специального режима для строк, запускающихся с точки
  • -- разделить параметры командной строки от адресов получателей (хорошая рекомендация стиля)

Исправленный сценарий:

/usr/sbin/sendmail -i -- myemail@email.com <<EOF
subject: Backup Error!
from:backup@server01

$error
EOF
2
ответ дан 24 October 2013 в 17:29

Я предлагаю вам не использовать пробельные символы перед или после второй строки ограничения EOF. Если вы используете только один пробел перед или после строки предела, этот блок кода специального назначения никогда не будет работать. Итак, используйте только:

EOF

И вам следует прочитать некоторые руководства по написанию сценариев bash в этом смысле, например Глава 19. Здесь документы .

0
ответ дан 24 October 2013 в 17:29

Sendmail (и, похоже, электронная почта в целом) требует пустой строки между заголовками и телом. Следующий пример сработал.

$ sendmail oli@mydomain.com <<EOF
> subject: testing
> from: oli2@mydomain.com
> 
> This is my body!
> EOF

(Очевидно, что вставить с помощью > не получится, просто измените то, что вы делаете, чтобы между заголовками и сообщением об ошибке была пустая строка).

0
ответ дан 24 October 2013 в 17:29

Другие вопросы по тегам:

Похожие вопросы: