Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Validazione mail

  1. #1

    Validazione mail

    Ho dei problemi con uno script per validare le e-mail

    Codice PHP:
    <?php

    class ccms_email //gestisce l'invio delle email
    {
        var 
    $my_email="sirdaniel.nm@gmail.com";
        
        function 
    validate_mail($email)
        { 
    //controlla la validità dell'email di chi invia
        
            
    if(phpversion() >= 5.2.0)
                { return 
    filter_var($emailFILTER_VALIDATE_MAIL); }
            else
                { return 
    ereg("^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-\.]+$]"$email); }
        }
        
        function 
    send_mail($messaggio$mail$nome$mittente)
        { 
    //invia l'email
        
            //if(!$this->validate_mail($mittente))
            //    { return false; }
            
            
            
    $text  "Messaggio inviato da: $nome - $mittente\n";
            
    $text .= "\nTesto messaggio:\n";
            
    $text .= $messaggio;
            
    $text  strip_tags($text); //elimina il testo inserito tra i tag < e >
            
            
    $header "From: <$mittente>";
            
    $oggetto="E-mail dal sito \"SiR DanieL\"";
            
            
    $sended mail($this->my_email$oggetto$text$header);
            if(!
    $sended)
                { return 
    false; }
            else
                { return 
    true; }
        }
    }
    Se lo uso così com'è funziona "bene" poichè invio il messaggio senza validare l'e-mail.
    Se invece decommento

    Codice PHP:
    //if(!$this->validate_mail($mittente))
    //    { return false; } 
    Mi restituirà sempre e comunque false nonostante l'e-mail inserita sia valida.
    Il form che invia la mail è questo:

    Codice PHP:
    <form method="post" action="author.php">
            <input type="text" name="name" value="Inserisci il tuo nome" /> *


            <input type="text" name="mail" value="Inserisci la tua e-mail" /> *


            <textarea name="messaggio" cols="80" rows="15">Inserisci il tuo messaggio</textarea>


            <input type="submit" value="Invia e-mail" name="ok" />
        </form>
    <?php
    if(isset($_POST['name']) && isset($_POST['mail']) && isset($_POST['messaggio']))
    {
        if(!
    $ccms_email->send_mail($_POST['messaggio'], $ccms_email->my_email$_POST['name'], $_POST['mail']))
            { echo 
    "Impossibile inviare il messaggio. Riprova."; }
        else
            { echo 
    "Messaggio inviato correttamente."; }
    }
    else
        { echo 
    "I campi contrassegnati da * sono obbligatori."; }
    ?>

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prova intanto a cambiare l'intero blocco di validazione con:

    Codice PHP:
    function validate_mail($email) {
      return 
    ereg("^[a-z0-9_]+@[a-z0-9-]+.[a-z0-9-.]+$]"$email);

    ...che versione di PHP usi?

  4. #4

  5. #5
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    { return ereg("^[a-z0-9_]+@[a-z0-9-]+.[a-z0-9-.]+$]", $email); }

  6. #6

  7. #7
    PS: sconsiglio seriamente di utilizzare le ereg!

    sono funzioni deprecate che verranno rimosse a brevissimo da php (sono già state rimosse da php6)!

    usa le preg, sono delle espressioni regolari, compatibili con quelle perl (praticamente identiche, pochissime differenze), più veloci e soprattutto non deprecate

    credo basti qualcosa tipo

    return preg_match("/^[a-z0-9_]+@[a-z0-9-]+.[a-z0-9-.]+$/", $email);

    inoltre farei una piccola modifica dando un numero minimo di caratteri alle varie parti cosi da dare ulteriori restrizioni per chi vuol far danni
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    eh lo so che le ereg non sono più viste di buon occhio, ma purtroppo altervista non mi accetta le filter_function.

    Comunque come dovrei fare per dare un numero minimo o massimo di caratteri con le exp. regolari?

  9. #9
    beh, usando le preg_match ottieni soluzioni efficenti e performanti

    per dare un numero minimo di caratteri, dai un occhio qua ... è spiegato

    http://www.php.net/manual/en/regexp....repetition.php

    direi che, almeno, l'indirizzo dovrebbe essere 3/4 caratteri, anche se tutto dipende dal tipo di target del sito: spesso per ambienti professionali si mette o il nome con il cognome puntato, il cognome con il nome puntato o tutto per intero ... si evitano soprannomi quindi puoi anche aumentarlo

    per il nome del dominio direi minimo 4 caratteri a salire mentre per l'estensione da 2 a 6 caratteri
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.