На моих системах работает следующее:
if ! nc -z $host $port; then
echo "This message intentionally left blank" | mail -s "TCP port $port is not open on $host" $emailaddress
else
: Do whatever you wanted to do
fi
Если на ваших не работает, запустите tail -f /var/log/maillog
во время выполнения скрипта, чтобы узнать, почему сообщение может не доставляться.