Primeiro, 'echo $subject' é uma maneira complicada de escrever $subject (exceto que ele manipula o valor um pouco mais se ele contiver espaços em branco ou \[*? , porque $subject de cotações externas é tratado como uma lista separada por espaço em branco de padrões de caracteres curinga e, em seguida, o resultado de toda a substituição de comando é novamente tratado como uma lista separada por espaço em branco de padrões de caractere curinga).
A única maneira de seu comando resultar nesse erro é se 'echo $subject' 'echo $mailadd' estiver vazio. Isso acontece somente quando 'echo $subject' e 'echo $mailadd' consistem apenas em espaço em branco, o que acontece apenas se as variáveis subject e mailadd estiverem vazias (além de alguns casos excêntricos, como subject sendo o caractere ? e o diretório atual contendo um arquivo cujo nome é um espaço único). Então, muito provavelmente você tem algumas linhas em branco no seu arquivo de entrada.
Você deve sempre colocar aspas duplas em torno de substituições de variáveis e substituições de comandos ( "$somevar" , "$(somecommand)" ) a menos que você realmente queira dizer que os valores das variáveis devem ser interpretados como listas separadas por espaços em branco de padrões curinga de arquivos.
mutt -s "$subject" "$mailaddr" <~/testeomail.txt
Se houver uma linha em branco no arquivo de entrada, pule-a.
while read -a line; do
mailadd=${line[0]}
subject=${line[1]}
if [ -z "$subject" ]; then continue; fi
mutt -s "$subject" "$mailadd" < /home/emanuele/testomail.txt
done < prova.txt