Как подавить пустые электронные письма? Например, для в следующем примере я хотел бы
some command | mail -s "tables altered on `hostname`" me@company.com
Я получаю следующее сообщение "после" отправки сообщения:
Null message body; hope that's ok
Это не нормально. Я не хочу отправлять почту, если нет текста.
#!/bin/sh
string=`some command`
len=${#string}
if [ "$len" -gt "0" ]
then echo $string | mail -s "tables altered on `hostname`" me@company.com
fi
Это отправит письмо только в том случае, если выходные данные команды содержат не менее 1 символа, но могут включать пробелы и т. Д.
(Приведенное выше решение работает, но в нем нет необходимости. man mail
показывает параметр -E):
some command | mail -E -s "tables altered on `hostname`" me@company.com
Я использую следующее:
$ mail --exec 'set nonullbody' -s Test test@example.com
Что я нашел в Почтовая документация GNU под нулевое тело раздел.
Однострочная версия ответа SvenW (кредиты должны принадлежать ему, а не мне)
string=`some command`; [ "$len" -gt "0" ] && ( echo $string | mail -s "tables altered on `hostname`" me@company.com )
пример:
echo -n "" | mail -E -s "Сообщение журнала" me@mydomain.tld
объясните:
пустая строка имеет символ конца строки, поэтому мы должны добавить -n, чтобы исключить в этом тестировании echo \ n (cr). Но если ваше тело сообщения не существует, значит, почта прекратит отправку.
источники:
Почему mail -E позволяет мне отправлять пустые сообщения? http://heirloom.sourceforge.net/mailx/mailx.1.html
Для некоторых реализаций mail
переключатель командной строки -E
эквивалентно --exec
что позволяет вам выполнить команду. В таком случае ответ Дахарона работает неплохо. Вы даже можете сократить его до:
$ mail -E 'set nonullbody' -s Test test@example.com
Если вы хотите проверить это поведение, используйте echo
команда с -n
ключ командной строки для подавления завершающего символа новой строки.
Эта команда отправляет электронное письмо:
$ echo -n "something" | mail -E 'set nonullbody' -s Test test@example.com
Но эта команда не отправляет электронное письмо:
$ echo -n "" | mail -E 'set nonullbody' -s Test test@example.com