apenas alguns pensamentos (desculpe, não posso comentar):
Você tentou armazenar $ headers e cat file em uma nova variável e, em seguida, fazer o eco dessa variável no terminal para verificar se há novas linhas no lugar? Se você conseguir construir um novo var correto, então você precisa ir mais fundo na parte do sendmail.
Por exemplo, isto ecoa a mensagem $ corretamente na minha tela ... mas eu não pude testá-la com o sendmail.
data=$(cat b.txt)
headers=$(cat c.txt)
message=$(echo "$headers")
message+=$(echo "\n")
message+=$(echo "$data")
echo -e "message=\n$message"
sendmail "$recipients" <<<"$message"