Это код, который у меня есть в 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...
Я пробовал другие варианты, это самый близкий у меня есть. Я попробовал это в обычном сценарии, и он работал правильно. Что происходит и как я могу отправить это письмо, указав тему и форму отправителя?
Предыдущие ответы уже упомянули:
Дополнительные меры:
-i
параметр командной строки для остановки специального режима для строк, запускающихся с точки--
разделить параметры командной строки от адресов получателей (хорошая рекомендация стиля)Исправленный сценарий:
/usr/sbin/sendmail -i -- myemail@email.com <<EOF
subject: Backup Error!
from:backup@server01
$error
EOF
Я предлагаю вам не использовать пробельные символы перед или после второй строки ограничения EOF
. Если вы используете только один пробел перед или после строки предела, этот блок кода специального назначения никогда не будет работать. Итак, используйте только:
EOF
И вам следует прочитать некоторые руководства по написанию сценариев bash в этом смысле, например Глава 19. Здесь документы .
Sendmail (и, похоже, электронная почта в целом) требует пустой строки между заголовками и телом. Следующий пример сработал.
$ sendmail oli@mydomain.com <<EOF
> subject: testing
> from: oli2@mydomain.com
>
> This is my body!
> EOF
(Очевидно, что вставить с помощью >
не получится, просто измените то, что вы делаете, чтобы между заголовками и сообщением об ошибке была пустая строка).