Pues ese "comportamiento" no debiera pasar... ¿Estas haciendo algun str_replace() en alguna parte?
Lo que podrias checar es, si tu cadena no la "modificas" ante de tiempo
Código PHP:
$asunto=$p[4];
echo $p[6];
//Checamos que trae tu variable antes de aplicarle nl2br()
$mensaje1 = nl2br($p[6]);
Lo que esta pasando no tiene que ver nada con nl2br().
Saludillos.