Ciao,
sono riuscito a recuperare un pezzo di codice che ho usato tempo fa :

codice:
   $destinatari   = "aaa@bbb.it <aaa@bbb.it>";

   $intestazioni  = "From: ccc@ddd.it <ccc@ddd.it>\r\n";
   $intestazioni .= "Reply-To: eee@fff.it <eee@fff.it>\r\n";
   $intestazioni .= "Bcc: ggg@hhh.it <ggg@hhh.it>, iii@jjj.it <iii@jjj.it>\r\n";

   $oggetto = "Richiesta di informazioni";

   $messaggio = "Nome: " . $nome . "\r\nE-mail: " . $e_mail . "\r\nMessaggio: " . $testo;

   if (apache_getenv("SERVER_ADDR") <> "127.0.0.1") {
      if (!mail($destinatari, $oggetto, $messaggio, $intestazioni)) {
         header("Location: errore_spedizione.php");
      } else {
         header("Location: conferma_spedizione.php");
      };
   } else {
      header("Location: conferma_spedizione_locale.php");
   };
in realtà non è quello che serve a te perché in quel caso inviavo mail di solo testo, era solo per farti vedere la sintassi con gli indirizzi ripetuti fra < e >, tanto per fare una prova in più.

E ora che ci ripenso mi ricordo che era molto importante che non ci fossero ritorni a capo (cioè i \r\n) in nessun campo tranne che nelle intestazioni, dove deve essercene uno per ogni elemento e uno conclusivo, e nel corpo del messaggio ovviamente (però nel tuo caso i ritorni a capo nel corpo del messaggio li farai con
).

Non mi viene in mente altro.
Ciao


EDIT: comunque riguardando il tutto ora i tuoi header iniziali non mi sembrano più tanto disordinati, perché i primi forniscono le informazioni su destinatari e mittente e poi c'è il MIME e gli altri che danno informazioni sul messaggio vero e proprio. Quindi probabilmente vanno bene così e la cosa importante si rivelerà la sostituzione dei \n con \r\n.