Fala Robson,
Qdo vc usa -n1 no tail, vc está mandando só uma linha (a última). Com -n0, vc não está mandando nenhuma. Acho que teu erro está aí.
Por outro lado, se o último registro de /var/messages não tiver a cadeia que vc pesquisa com o grep, o retorno será uma cadeia vazia que será enviada por email. Acho que essa lógica deve estar furada. Creio que vc queira algo mais ou menos assim:
while true
do
Linha=$(tail -Fn1 /var/log/messages)
grep "[ACESSO]" <<< "$Linha" && while
/usr/bin/esmtp
address@hidden <<< "$Linha"
done &
Não testei, mas deve ser algo mais ou menos assim.