Назад | Перейти на главную страницу

подавлять пустые электронные письма

Как подавить пустые электронные письма? Например, для в следующем примере я хотел бы

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