Per mandare una mail che passa al 100% (io ti dico 100% perché l'ho provata a mandare sulle peggio caselle ed è sempre arrivata) è usare gli oggetti Mail e Mail_mime.

Sono entrambe oggetti del pacchetto pear.

La cosa da spiegare è lunga, ti mando scrivo un scriptino che faccio eseguire da shell al mio somarello quando mi cambia l'ip.

Codice PHP:
<?php

//Includo gli oggetti Mail.php e Mail/mime.php
//Attenzione che questi oggetti devono essere prima installati
//da pear, se non si possono installare, si possono sempre
//utilizzare richiamandoli dalla cartella dove sono stati messi
//ma funzionano in maniera un pò problematica così.
//Se non erro bisogna installare Net_SMTP (sempre di
//pear) altrimenti potrebbe non riuscire l'invio.

require_once("Mail.php");
require_once(
"Mail/mime.php");

//Carico i destinatari
$recipients[] = "indirizzo1@domain.it";
$recipients[] = "indirizzo2@domain.it";
$recipients[] = "indirizzo3@domain.it";

//Quì risiede il corpo del messaggio
$root="/var/www/mail/";

//Apro il messaggio e ne carico il contenuto dentro
//$contents, nb il messaggio è in HTML
$filename $root."somarello_t.html";
$handle fopen($filename"r");
$contents fread($handlefilesize($filename));
fclose($handle);

//Carico un altro ipotetico corpo del messaggio
//in solo testo
$filename $root."somarello.txt";
$handle fopen($filename"r");
$contents2 fread($handlefilesize($filename));
fclose($handle);

//Parametri di configurazione necessari (cambiare l'smtp
//se non si usa tin)
$params["host"] = "mail.tin.it";
$params["port"] = "25";
$params["auth"] = false;
$params["username"] = "";
$params["password"] = "";

//Apro questi due file, cache contiene l'ultimo mio indirizzo
//ip, flush viene aggiornato ogni 20 minuti con l'indirizzo
//attuale
$flu=fopen("/pers/ip-sender/flush","r");
$cac=fopen("/pers/ip-sender/cache","r");
$r_flu=fgets($flu);
$r_cac=fgets($cac);

//sostituisco all'interno dei due messaggi il tag @@ip@@
//con l'indirizzo ip
$contents=str_replace("@@ip@@",$r_flu,$contents);
$contents2=str_replace("@@ip@@",$r_flu,$contents2);

//Se cache e flush sono diversi allora il mio ip è mutato
//e procedo all'invio
if(strcmp(trim($r_flu),trim($r_cac))!=0){
    
fclose($cac);
    
$cac=fopen("/pers/ip-sender/cache","w");
    
//scrivo dentro a cache il nuovo indirizzo
    
fwrite($cac,$r_flu);
    
//Processo uno ad uno tutti i miei destinatari
    
foreach($recipients as $k => $v){
        
//Creo l'oggetto Mail, il tipo d'invio è
        //smtp, la configurazione è in params
        
$mail_object =& Mail::factory("smtp"$params);
        
//Creo l'oggetto mail_mime, va creato passandogli
        //i caratteri dell'accapo
        
$mail_mime=new Mail_mime("\r\n");
        
//Creo un array che sarà l'header del messaggio
        
$hdrs = array(
                      
'From'    => 'La posta del Somaro<indirizzo@somaro.it>',
                      
'To'      => $v,
                      
'Subject' => 'Ip cambiato'
                      
);
        
//Con il metodo setHTMLBody carico nell'oggetto
        //il corpo HTML del messaggio, con setTXTBody il
        //corpo solo testo, in questo modo se il destinatario
        //non ha la possibilità di vedere messaggi in HTML
        //vedrà il solo testo
        
$mail_mime->setHTMLBody($contents);
        
$mail_mime->setTXTBody($contents2);
        
//Grazie a mail_mime posso anche caricare allegati ed
        //immagini che fanno parte del corpo del messaggio
        //HTML, per le immagini del corpo uso addHTMLImage.
        //Per essere visualizzate all'interno del messaggio
        //l'src dell'immagine deve essere src="nomeimmagina.estensione"
        
$mail_mime->addHTMLImage($root."somarello-sx.jpg","image/jpeg","somarello-sx.jpg",true);
        
$mail_mime->addHTMLImage($root."somarello-up.jpg","image/jpeg","somarello-up.jpg",true);
        
$mail_mime->addHTMLImage($root."somarello-dw.jpg","image/jpeg","somarello-dw.jpg",true);
        
$mail_mime->addHTMLImage($root."somarello-dx.jpg","image/jpeg","somarello-dx.jpg",true);
        
        
//una volta caricati tutti i dati in mail_mime utilizzo
        //il metodo get() che mi restituisce un body del messaggio
        //formattato in maniera impeccabile pronto per essere spedito
        //con mail, poi con headers() ottengo un header formattato
        //anch'esso e pronto per mail
        
$body $mail_mime->get();
        
$hdrs $mail_mime->headers($hdrs);
        
        
//Ora spedisco il tutto con il metodo send di Mail
        
$mail_object->send($v,$hdrs,$body);
    }
    echo(
"Inviata e-mail.\n");
}
?>
Spero ti sia d'aiuto