• User Attivo

    [Risolto] Problema invio mail con php

    Buongiorno,
    è da un po di giorni che ho problemi ad inviare email con uno script php ch ho costruito.
    Il codice php è questo:
    <?php
    $destinatario=$_POST['destinatario'];
    $mittente=$_POST['mittente'];
    $oggetto=$_POST['oggetto'];
    $mess=$_POST['mess'];

    if (( $mittente == "" ) || ( $mess == "" ))
    {
    echo "<h3>Errore!</h3><br>Devi compilare tutti i campi obbligatori.<br>
    <A HREF="javascript:history.go(-1)">Torna indietro.</A> Grazie";
    exit;
    };

    $msg='

    Destinatario:
    '.$destinatario.'

    Mittente:
    '.$mittente.'

    Oggetto:
    '.$oggetto.'

    Messaggio:
    '.$mess.'

    ';

    if (mail($destinatario, $mittente, $msg, $headers))
    {
    echo "<p>La tua mail, è stata inviata con successo.</p>";
    }else{
    echo "<p>Errore!</p>";
    }
    ?>

    Il codice HTML è questo:

    <html>

    <head>
    <meta http-equiv="Content-Language" content="it">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>INFO@CANILEDIGINOSA</title>
    </head>

    <body>
    <input type="hidden" name="destinatario" value="la mia email">
    <p><b><font color="#FF0000" size="5">INFORMAZIONI GENERICHE</font></b></p>
    <form method="POST" action="link della pagina php">
    <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
    <p>Tuo nome:<input type="text" name="nome" size="20"></p>
    <p>Tua email:<input type="text" name="mittente" size="20"></p>
    <p>Oggetto del messaggio<input type="text" name="oggetto" size="20"></p>
    <p>Inserisci messaggio:
    <textarea rows="2" name="mess" cols="20"></textarea></p>
    <p>                               
    <input type="submit" value="INVIA" name="B2"></p>
    </form>

    </body>

    </html>

    Cosa c'è che non va? E' pure ho usato la stressa procedura per le altre caselle di posta e vanno.....Mah!
    Qualcuno mi illumina?
    Grazie in anticipo,
    Alessandro


  • User Attivo

    Ciao,
    la variabile $headers utilizzata come 4° parametro della funzione mail() dovrebbe contenere un dato del tipo:
    "From: [email][email protected][/email]"
    ma nel tuo script non viene proprio inizializzata.

    Alessandro


  • User

    Hai un errore o semplicemente le email non arrivano? Nel secondo caso il problema è legato al fatto che non hai impostato correttamente gli header dei messaggi e quindi alcuni SMTP pensano il messaggio sia SPAM e non lo ricevono. Fai una ricerca in google oppure, mio consiglio, usa la classe PhpMailer che si smazza per te tutti questi problemi.


  • User

    Ciao io uso questo codice (ps non lo fatto io), email mi arriva come non sicura su hotmail, ma non ho capito il motivo, questo è il codice

    [php]

    <?php
    //funzione per controllo veridicita e-mail;
    function ControlloEmail($mail){
    $result = eregi("^[_a-z0-9+-]+(.[_a-z0-9+-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+$",$mail);
    if($result == false){return false;}
    else{return true;}
    }
    //variabili globali provenienti dal form;
    $nome = ltrim(rtrim(strip_tags(stripslashes($_POST['nome']))));
    $cognome = ltrim(rtrim(strip_tags(stripslashes($_POST['cognome']))));
    $email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
    $oggetto = ltrim(rtrim(strip_tags(stripslashes($_POST['oggetto']))));
    $tel = ltrim(rtrim(strip_tags(stripslashes($_POST['tel']))));
    $fax = ltrim(rtrim(strip_tags(stripslashes($_POST['fax']))));
    $regionesociale =ltrim(rtrim(strip_tags(stripslashes($_POST['regionesociale']))));
    $testo = ltrim(rtrim(strip_tags(stripslashes($_POST['testo']))));
    //$conf = trim($_POST['consenso']);
    $mail_to = "[email protected]";
    $header .="From: <$cognome>";

    //unisco i campi nome, cognome,e-mail e testo per utilizzarli come campo body nella
    //funzione mail();
    $body = $cognome."\r\n".$nome."\r\n".$regionesociale."\r\n".$tel."\r\n".$fax."\r\n".$email."\r\n\r\n".$testo;

    if($nome=="" || $cognome=="" || $email=="" || $oggetto=="" || $testo=="" || $tel=="" || $fax=="" || $regionesociale==""){
    echo "<p style="color:red; font-weight:bold; text-align:center;">Errore nella compilazione dei dati. <br />Si prega di ricontrollarli ed inserire tutti i campi obbligatori.<br />";
    echo "<a href="contatti.php" alt="Torna indietro" title="Torna indietro"><a href="contatti.php">Torna indietro</a></a></p>

    ";}

    else{
    if(mail($mail_to, $oggetto, $body, $header)){
      echo "<p style=\"text-align:center;\"> E-mail inviata correttamente!!!</p>";
     }
     
     
      else{
       echo "<p>
       <p style=\"color:red; font-weight:bold; text-align:center;\">C&acute &egrave; stato un errore nell&acute invio dell&acute E-mail. <br />Si prega di riprovare. Grazie</p>
       </p>";
       
      }
     }
    

    ?>

    [/php]
    Ciao.


  • User

    Secondo me è sempre un problema di header. Avevo letto che non basta mettere il from, almeno non con tutti gli smtp. Se usate la classe che vi ho consigliato (è free) non dovrete preoccuparvi di nulla e otterrrete del codice php molto + pulito.
    Ciao, Andrea


  • User Attivo

    Qual'è il tuo indirizzo che vado subito a spammare, fare un poco di cross site scripting e visto che ci sono un poco di injection, ma davvero quello è il codice che utilizzi? 😮
    Dici che non lo usi per la prima volta ma non dici se gli altri script girano sullo stesso server dove dovrebbe girare questo. Se è così è strano, sicuro di aver fatto un copia e incolla totale di tutto il codice e senza aggiunte di errori?
    La parte di codice PHP che hai inserito in realtà potrebbe già funzionare.
    ma ecco perché non funziona!
    Ma destinatario nella paginetta html è inserito fuori dal FORM, il campo nascosto è fuori dal FORM per questo non ti invia la posta, in pratica manca il destinatario e quindi la funzione mail() non sa a chi mandarla.
    Ora però perdonami mi chiedo ma perché diamine passi il destinatario in quel modo? Ma non ti conviene scriverlo direttamente nel codice PHP, tanto quel dato non cambia mai.
    Se lo metti in chiaro nel html l'unica cosa che fai è facilitare la vita degli spammer.
    [php]
    <?php
    $destinatario='nonmettoaltrospammoni@@hotmail.it';
    $mittente=$_POST['mittente'];
    $oggetto=$_POST['oggetto'];
    $mess=$_POST['mess'];
    [/php]Sorvolo su questo punto, dato che non so se veramente tu prendi i dati inseriti così senza nemmeno un controllo su ciò che viene inserito, magari per sbrigarti hai scritto così... te la sto facendo buona dai.
    Però mettici magari che so un [php]$destinatario = strip_tags(stripslashes($_POST['destinatario']));[/php] davanti ad ogni richiesta di POST, mica per nulla, costa poco codice in più e ti assicuri notti tranquille!
    Quindi questa parte di codice diverrebbe:
    [php]
    $destinatario='[email protected]';
    $mittente=strip_tags(stripslashes($_POST['mittente']));
    $oggetto=strip_tags(stripslashes($_POST['oggetto']));
    $mess=strip_tags(stripslashes($_POST['mess']));
    [/php]Che PHP gira sul server, spero almeno la versione 5.2.x non dico aggiornatissima ma almeno una di quelle, se è PHP 4 cambia server 😄
    [php]
    if (( $mittente strip_tags(stripslashes(== "" ) || ( $mess == "" ))
    {
    echo "<h3>Errore!</h3><br>Devi compilare tutti i campi obbligatori.<br>
    <A HREF="javascript:history.go(-1)">Torna indietro.</A> Grazie";
    exit;
    };
    [/php]Scusa ma perché controlli solo questi due campi e solo se sono vuoti?
    Va bene per il campo messaggio, ma per il mittente sarebbe interessante controllare se l'email è scritta bene non ti pare? In un altro post ti hanno passata una funzione, non so se funziona 😄 ma io la proverei per controllare se il campo è scritto bene.
    Personalmente io uso i filtri del PHP disponibili dalla versione 5.2.x in poi.
    Altra cosa, mettere history.go(-1) va anche bene, ma se uno capita su quella pagina tramite un motore di ricerca? come ci va sul tuo sito? Se clicca lì torna a Google, allora meglio sarebbe usare location e scrivere l'indirizzo della pagina a cui puntare, così chi capita per caso su quella pagina può tornare che so all'home page o anche alla pagina di inserimento email. E' solo un suggerimento sia chiaro!
    [php]

    $msg='

    Destinatario:
    '.$destinatario.'

    Mittente:
    '.$mittente.'

    Oggetto:
    '.$oggetto.'

    Messaggio:
    '.$mess.'

    ';

    if (mail($destinatario, $mittente, $msg, $headers))
    {
    echo "<p>La tua mail, è stata inviata con successo.</p>";
    }else{
    echo "<p>Errore!</p>";
    }
    ?>
    [/php]Qui non dico altro, c'è poco da dire, dovrebbe funzionare.
    Quello che mi chiedo è perché usi questa roba in un iframe quando il sito è costruito con Joomla!
    Dici che non gli arriva la posta su hotmail, ma è abbastanza normale, infatti hotmail come casella di posta è abbastanza "sputtanata", passami il francesismo, sono molti i server email che la mettono in un limbo pre lista nera, quindi è meglio se la cambia che so con gmail o con una casella di posta presa sul server dove gira il sito.


  • User Attivo

    Grazie mille veramente per le mille risposte che mi avete dato 😉
    Io ho risolto, mettendo l'indirizzo email dentro il form, in effetti stava fuori....:D
    Si comunque l'email di hotmail è quella mia, in realtà è una posta elettronica certificata, quindi non dovrebbe dare problemi.....
    Alessandro