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
задан 18.04.2020, 02:17

3 ответа

В предыдущих ответах уже упоминалось:

  • плохой конец «здесь документа» (END)
  • отсутствует пустая строка между заголовками и телом
[118 ] Дополнительные исправления:

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

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

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

$error
EOF
2
ответ дан 18.04.2020, 02:18

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

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

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

1
ответ дан 18.04.2020, 02:17

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

EOF

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

1
ответ дан 18.04.2020, 02:18

Теги

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