Prima avevo letto in fretta (chiedo venia).
Il tuo problema io l'ho risolto inserendo un mittente fisso e aggiungendo l'e-mail del contatto in "reply-to".
Questo è lo script che ho fatto io - ho modificato parecchie cose (non escludo qualche errore, perciò), perché l'originale richiama dei metodi della classe che uso io - ho tolto anche qualche parte di cui parlerò dopo:
- Codice: Seleziona tutto
// modifica queste variabili
$to="destinatario-email";
$mitt="mittente"; // inserisci un'email fissa: es. admin@dominio
$site="nomesito";
$paginaform="indirizzopaginadelform";
$nm=trim($_POST["nome"]);
$cg=trim($_POST["cognome"]);
$em=trim($_POST["email"]);
isset($_POST["telefono"]) ? $tl=trim($_POST["telefono"]) : $tl=0;
$tx=trim($_POST["testo"]);
if($nm=="" | $em=="" | $cg=="" | $tx=="") {
$paginaform.="&messaggio=campo-richiesto";
// devi impostare la visualizzazione del messaggio nel form
// naturalmente io ho messo & perché suppongo ci sia già un ? nella querystring
// altrimenti sostituisci (qui e sotto) & con ?
header("Location: $paginaform");
exit();
} elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$em)) {
$paginaform.="&messaggio=email-non-valida";
header("Location: $paginaform");
exit();
} else {
// poi spiego perché uso mysql...
$qry=sprintf("INSERT INTO contatti VALUES('','%s','%s','%s','%s','%s')",addslashes($nm),addslashes($cg),$em,$tl,addslashes($tx));
$res=mysql_query($qry) or die("inserimento fallito");
$id=mysql_insert_id();
$mrq="SELECT * FROM contatti WHERE ID='$id'";
$mrr=mysql_query($mrq);
$mrw=mysql_fetch_object($mrr);
$sub="Contatti sito $site";
$mnm=stripslashes($mrw->Nome);
$mcg=stripslashes($mrw->Cognome);
$mrw->Testo!="" ? $mtx=wordwrap(stripslashes($mrw->Testo),70) : $mtx=" ";
//$headers = 'MIME-Version: 1.0' . "\r\n";
//$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers = 'From: $mitt\r\n";
$headers .= 'Reply-To: '.$mrw->Email. "\r\n";
$message=<<<EOM
Hai ricevuto un contatto dal sito $site
-------------------------------------------------------------------
Da:\t$mnm $mcg
E-mail:\t$mrw->Email
Telefono:\t$mrw->Telefono
-------------------------------------------------------------------
Contenuto del messaggio:
-------------------------------------------------------------------
$mtx
EOM;
if(mail($to,$sub,$message,$headers)) {
$paginaform.="&messaggio=messaggio-inviato";
header("Location: $paginaform");
exit();
} else {
$paginaform.="&messaggio=invio-fallito";
header("Location: $paginaform");
exit();
}
Non sarà il massimo, ma funziona abbastanza bene.
Avevo fatto una versione che creava un messaggio in html, ma non sempre veniva visualizzato correttamente ed ho preferito rinunciarci.
Io utilizzo da un po' anche un sistema di anti-spam testuale accessibile che fa capo a delle domande-risposte in una tabella mysql. Preferisco non usare il
captcha (che personalmente odio). In ogni caso, qualcosa bisogna fare, altrimenti si viene sommersi dallo spam.
Uso mysql perché voglio lasciare traccia dei contatti e anche perché, così, ho risolto definitivamente il noioso problema delle vocali accentate (coi soliti sistemi avevo esiti diversi in base alle diverse versioni di php).
Rimane, comunque, il problema che segnalavo prima: se inserisco come destinatario un indirizzo gmail, con alcuni hosting funziona, con altri no.