• Super User

    Problema Form mail in php e libero mail

    Salve a tutti, mi è capitata una cosa molto strana con una web mail e con la casella di posta di libero.

    [php]<?php
    define("_destinatario","[email protected]);
    define("errore_oggetto_predefinito","Non hai inserito un oggetto!");
    define("errore_email_predefinito","L'indirizzo email che hai inserito non è corretto!");
    define("errore_messaggio_predefinito","Il messaggio è vuoto!");
    define("segnaposto_oggetto","Inserisci un oggetto");
    define("segnaposto_email","Inserisci la tua email");
    define("segnaposto_messaggio","Inserisci il tuo messaggio");
    function generaModulo($oggetto=segnaposto_oggetto,$email=segnaposto_email,$messaggio=segnaposto_messaggio,$errore_oggetto="",$errore_email="",$errore_messaggio=""){
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="form1">
    <p>Per ricevere informazioni può telefonarci ai numeri:<br />
    <strong>0766/92329-0766/950048</strong><br />
    <strong>Cell:328/9198828</strong><br />
    <br />
    Altrimenti può inviare una mail attraverso la form sottostante. Le ricordiamo che inviando la mail dichiara di aver letto e accettato ciò che è scritto nell'informativa per la privacy. L'inserimento di un indirizzo e-mail non esistente comporterà il mancato recapito di risposte e quindi di perdita di informazioni.<br />
    <br />
    </p>
    <table>
    <tr>
    <td>Il tuo indirizzo e-mail*</td>
    <td><label>
    <?php if (!$errore_email=="") { echo"<span><strong>$errore_email</strong></span>";} else { echo"";}?><br />
    <input name="email" type="text" id="mail" value="<?php echo $email;?>" />
    </label></td>
    </tr>
    <tr>
    <td>Oggetto*</td>
    <td><label>
    <?php if (!$errore_oggetto=="") { echo"<span><strong>$errore_oggetto</strong></span>";} else { echo"";}?><br />
    <input name="oggetto" type="text" id="oggetto" value="<?php echo $oggetto;?>" />
    </label></td>
    </tr>
    <tr>
    <td>Messaggio*</td>
    <td>

    <?php if (!$errore_messaggio=="") { echo"<span><strong>$errore_messaggio</strong></span>";} else { echo"";}?>
    <br />
      <textarea name="messaggio" cols="30" rows="5" id="messaggio" ><?php echo $messaggio;?></textarea>
    

    <br />
    <br />

    <label>*
    <input name="informativa" type="checkbox" id="informativa" onclick="MM_popupMsg('Selezionando questa casella dichiari di aver letto e accettato l'informativa sulla privacy.')" />
    Dichiaro di aver letto l'</label><a href="informativa_privacy.php"><strong> Informativa sulla privacy
    </strong></a></td>
    </tr>
    <tr>
    <td><label>*I campi sono obbligatori

    </label></td>
    <td><label>
    <input type="submit" value="Invia il modulo" name="bottone_invio" /> <input type="reset" name="cancella" id="cancella" value="Ripristina" />
    </label></td>

    </tr>
    </table>

    </form>
    <?php
    }
    function isValidEmail($email){
    $pattern = "^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$";

    if (eregi($pattern, $email)){
    return true;
    }
    else {
    return false;
    }
    }

    function controlla($stringa,$lunghezza){
    if (strlen($stringa)<$lunghezza){
    return true;
    }
    else {
    return false;
    }
    }

    ?>
    <?php if (!isset($_POST['bottone_invio'])) {
    generaModulo();
    } else {
    $oggetto = isset($_POST['oggetto']) ? stripslashes ($_POST['oggetto']) : "";
    $email = isset($_POST['email']) ? stripslashes ($_POST['email']) : "";
    $messaggio = isset($_POST['messaggio']) ? stripslashes ($_POST['messaggio']) : "";

    $error = false;
    $errore_oggetto = '';
    $errore_email = '';
    $errore_messaggio = '';

     if (controlla($oggetto,1) or ($oggetto==segnaposto_oggetto)) {
      $error = true;
      $errore_oggetto = errore_oggetto_predefinito;
    

    }

    if (!isValidEmail($email)){
    $error = true;
    $errore_email = errore_email_predefinito;
    }
    if ((controlla($messaggio,1)) or ($messaggio==segnaposto_messaggio)) {
    $error = true;
    $errore_messaggio = errore_messaggio_predefinito;
    }

    if ($error){
    generaModulo($oggetto,$email,$messaggio,$errore_oggetto,$errore_email,$errore_messaggio);
    }
    else {
    ?>
    <p>
    Ha inserito i seguenti dati:<br />
    <br />
    <b>Oggetto:</b> <?php echo $oggetto ?>
    <br />
    <b>Email:</b> <?php echo $email ?>
    <br />
    <b>Messaggio:</b> <?php echo $messaggio ?>
    <br />
    </p>
    <?php
    if ($telefono == segnaposto_telefono) $telefono="-";
    mail(_destinatario,"Richiesta Informazioni Sito...","Oggetto: $oggetto\nEmail: $email\nMessaggio:$messaggio","From:$email");
    echo"<p>Grazie per aver inviato il messaggio</p>";?>
    <?php } }

    ?>[/php]Il codice che ho appena postato funziona veramente molto bene, le mail arrivano puntuali in tutte le caselle, tranne che su libero mail.

    Mi chiedo: è colpa del codice o della casella? Come posso far sì che anche libero mi riceva il contenuto della mail?

    E' una curiosità, potrei benissimo usare un'altra casella, ma mi piacerebbe sapere il motivo per cui non dovrebbe ricevere solo lui ciò che gli altri ricevono. Avete qualche suggerimento? Grazie. 😉


  • Super User

    Perdonate l'up, ma ho dimenticato un doppio apice mentre editavo l'indirizzo per postare lo script, ma nella form vera il doppio apice c'è. Scusatemi. 😉


  • User Attivo

    ciao pikadilly

    prova a utilizzare questo semplice pattern al posto di quello presente nel codice e vedi se funziona...
    [PHP]
    $pattern =".+@.+";

    [/PHP]

    PS:ma hai controllato nello spam oppure prova a vedere se la funzione mail fa il suo lavoro cambiando il codice cosi':

    [PHP]
    mail(_destinatario,"Richiesta Informazioni Sito...","Oggetto: $oggettonEmail: $emailnMessaggio:$messaggio","From:$email") or die ("mi dispiace ma questa funzione non invia niente");[/PHP]

    se ti da errore vai all'indietro nel codice e vedi dove e l' origine


  • Consiglio Direttivo

    Gironzolando forse ho trovato la risposta al quesito di libero :fumato:


  • Super User

    Ah, perfetto. Almeno sappiamo che non è lo script, grazie sia a te, Samyorn, che a Angelbit88. 😉


  • User Newbie

    Ragazzuoli ... scusate se m'intrometto, ma ho avuto lo stesso problema e non mi convinceva che fosse un errore del smtp del mio domino ...

    dopo svariate prove ho scoperto perche' Libero non considerava le email: MANCAVA UN PARAMETRO !!!

    aggiungete nella vostra intestazione dell'email che inviate il seguente codice:

    <?php
    $intestazione .= "X-Mailer: PHP/" . phpversion() . "\r\n";
    $intestazione .= "Message-ID: <" . md5(uniqid(time().mt_rand())) . "@" . $_SERVER['SERVER_NAME'] . ">\r\n";
    ?>

    E TUTTO FUNZIONERA' !!!!!

    EUREKA !!!!!! 😘


  • User Newbie

    Ritiro tutto ... ha funzionato per 20 min ... e poi come prima !!!

    bestemmiaapiacere!


  • User

    Per esperienza personale prima di tutto il controllo viene fatto sull'ip della macchina dove il dominio è ospitato, quindi in questo caso è il provider che deve avere tutto in regola, sopratutto un parametro chiamato rDNS,
    ma quello che potete fare per garantirvi probabilità più alte di invii riusciti è utilizzare l'invio tramite SMTP autenticato, invece della comune funzione mail().
    In pratica la mail inviata diventa esattamente identica ad una mail inviata da un client di posta normale, non da un web server.
    Io utilizzo sempre la classe PhpMailer per questo scopo, che trovo decisamente ottima.