Я пытаюсь прикрепить файл .log или .txt к команде mail, чтобы отправить электронное письмо после выполнения моего скрипта ksh. Я не могу использовать команду mutt, так как она не установлена на моей машине, и я не должен ее устанавливать. Я пробовал много способов с помощью Google, которые не помогли мне добиться успеха.
Вот мое требование, мне нужно запустить около 10 SQL-запросов и результат нужно отправить по электронной почте через вложение. У меня есть, Check.ksh
и я запускаю это с помощью nohup
команды.
nohup Check.ksh > Valid_Check.log 2>&1 &
В Check.ksh
typeset var TO="[email protected]";
typeset var SUB="Report";
typeset var BODY="Check Completed";
typeset var ATTACHMENT=${FILE_PATH}/Valid_Check.log
if [ -f "${ATTACHMENT}" ]; then
echo "Log file exist";
else
echo "No Log File";
fi
uuencode Valid_Check.log Valid_Check.log | mail -s "${SUB}" "${BODY}" ${TO}
и попробовал также ниже
#mailx -s "${SUB}" "${TO}" "${BODY}" < ${FILE_PATH}/Valid_Check.log
#cat ${FILE_PATH}/Valid_Check.log | mailx -s "${SUBJECT}" "${TO}" "${BODY}";
Приведенный выше код выдает ошибку типа «Верно... Пользователь неизвестен»
Какие-либо предложения или другие простые/легкие подходы будут полезны?
Спасибо,
решение1
Если у вас достаточно свежий mailx
, воспользуйтесь -a
возможностью добавить вложение.
mailx -s "$SUB" -a "Valid_Check.log" "$TO" <<<"$BODY"
Смотрите такжеhttps://access.redhat.com/solutions/104833
Если вы безнадежно застряли в предыдущем тысячелетии и у вас нет программного обеспечения, способного обрабатывать правильные вложения, данные uuencode следует просто добавить к телу.
( echo "$BODY"; echo; uuencode Valid_check.log Valid_check.log ) |
mailx -s "$SUB" "$TO"
Однако базовый подход страдает от состояния гонки — существование выходного файла указывает на то, что задание cronначал,не завершено. Помещение команды mail в конец задания cron исправит это; тогда электронное письмо будет отправлено только после завершения предыдущего шага.