Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    residenza
    Florence - Italy
    Messaggi
    60

    funzione mail () e verifica di invio

    salve a tt ho creato una banale procedura di invio di email con la funzione mail () e fin qui nessun problema, tuttavia vorrei verificare l'effettiva consegna della email pertanto il bool ritornato dalla funzione mail () penso non sia sufficiente in quanto il controllo credo sia solo formale e non di sostanza, qualcuno mi ilumina ?

    ES. mioaccount@hotmail.it dovrei avere un false poichè il mio indirizzo è in realtà [B]mioaccount@hotmail.com

    grazie a tutti un pivello

  2. #2
    Che io sappia non c'è modo.
    Come giustamente dicevi, mail() restituisce TRUE se ha processato correttamente la funzione. Questo però non garantisce la ricezione da parte del destinatario.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    residenza
    Florence - Italy
    Messaggi
    60

    "bene"

    sai se esiste un modo in php per verrificare l'esistenza di quell'account di postaelettronica ??

    grazie a prescindere

  4. #4
    Questo non lo so.

    Ma tu cosa hai bisogno di preciso?
    Perchè se vuoi evitare che al tuo sito si iscrivano persone che forniscono un email falso il sistema c'è. Se invece il tuo problema è semplicemente sapere se un email esiste o no... non saprei.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    residenza
    Florence - Italy
    Messaggi
    60
    in effetti li mio codice è la parte di registrazione di un sito quindi dovrei sapere se la mail esiste
    in teoria è semplice controlli gli altri dati se sono ok mandi la mail se la mail "arriva" (l'account esiste) ed allora registri l'utente sul database.......

  6. #6
    in questo caso ti propongo un sistema migliore, diciamo il sistema che viene usato spesso in questi casi, che è quello della conferma di registrazione.

    Ti spiego come faccio io in questi casi.

    Al momento della registrazione i dati dell'utente non vengono messi nella tabella user, ma nella tabella pending insieme ad una stringa alfanumerica casuale creata al momento.

    All'utente viene inviata un'email con un link da cliccare per attivare il suo account

    il link sarà: http://www.tuosito.com/conferma.php?...mzzdmRRt7Uopfg

    dove key sarà la stringa che hai registrato assieme ai dati nella tabella pending.

    Il file conferma.php dovrà cercare un utente che abbia questa chiave, e se c'è prenderà i suoi dati e li sposta nella tabella user.

    In questo modo verifichi che l'email eseite davvero. In più verifichi che qualcuno non abbia iscritto qualcun altro. puoi ad esempio mettere nell'email di conferma una frase tipo :
    Se non ti risulta di esserti iscritto a questo sito clicca il seguente link:

    e a questo punto sarà indidrizzato ad un'altra pagina con il compito di cancellare da pending l'utente con quella key.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    residenza
    Florence - Italy
    Messaggi
    60
    in effeti ci avevo già pensato....... ma da un punto di vista tecnico non saprei scrivere uno script così complesso..... senza contare la gerstione di due db uno definitivo e uno temporaneo......

    se mi puoi dare una mano ben lieto altrimenti grazie mille lo stesso

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    residenza
    Florence - Italy
    Messaggi
    60
    P.S. facciamo così ci lavoro un pò e ti faccio sapere grazie milleeee veramente !!!!!!

  9. #9
    Non devi gestire 2 db, solo due tabelle. la pending è uguale alla user solo che in più ha il codice di registrazione. E' semplice

    Ti invio la pagina che prende i dati dal form (poi la adatti)
    prendo per scontato che ci sia già una risorsa di connesione al db e che sia $conn

    Codice PHP:
    function stringacasuale() 
            {
                
    $car "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789";

                
    srand((double)microtime()*1000000);
                
    $elaborazione '' ;

                    for (
    $contatore=0$contatore<50$contatore++) 
                    {

                        
    $numeroCasuale rand(0strlen($car)-1);

                        
    $carattere substr($car$numeroCasuale1);
                        
    $elaborazione $elaborazione $carattere;

                    }
        
                    return 
    $elaborazione;

            }

        
    $ver stringacasuale();
                
    $message "Benvenuto $_GET[username],\r\nper confermare la tua iscrizione ed attivare il tuo account, clicca sul seguente link di attivazione:\r\n\r\nhttp://www.tuosito.com/verify.php?key=" $ver;
                
    $sql "INSERT INTO mem_pending (username, password, email, ver) VALUES('$_GET[username]', '$_GET[password]', '$_GET[email]', '$ver')";
                
    mysql_query($sql$conn);
                
    mail ($_GET['email'], 'Conferma di registrazione di ......'$message"From: tuonome<info@tuosito.com>"); 
    E adesso la verify.php

    Codice PHP:
    $key $_GET['key'];

    $query "SELECT * FROM mem_pending WHERE ver='$key'";
    $res mysql_query($query$conn);
        if (
    $row mysql_fetch_array($res))
        {
            
    $sql "INSERT INTO mem_user (username, password, email) VALUES('$row[username]', '$row[password]', '$row[email]')";
            
    $del "DELETE FROM mem_pending WHERE ver='$key'";
            
    mysql_query($sql$conn);
            
    mysql_query($del$conn);
            
    mysql_close();
    }
    else
    {
    errore

    Vedi.
    Cerca nel pending la riga che contiene la key giusta.
    Se c'è, inserisce i dati di quella riga in user e cancella la riga stessa da pending

    Devi solo aggiungere qualcosa per gestire gli errori se vuoi.

    Spero sia comprensibile

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Originariamente inviato da mtx_maurizio
    Non devi gestire 2 db, solo due tabelle. la pending è uguale alla user solo che in più ha il codice di registrazione. E' semplice
    .........................
    $query = "SELECT * FROM mem_pending WHERE ver='$key'";
    $res = mysql_query($query, $conn);
    if ($row = mysql_fetch_array($res))
    {
    $sql = "INSERT INTO mem_user (username, password, email) VALUES('$row[username]', '$row[password]', '$row[email]')";
    $del = "DELETE FROM mem_pending WHERE ver='$key'";
    mysql_query($sql, $conn);
    mysql_query($del, $conn);
    mysql_close();
    }
    else
    {
    errore
    }
    [/PHP]
    Ci sono delle cose che non capisco:
    1) perchè usare 2 tabelle? (E' sufficiente creare uno "stato" dell'utenza).
    2) Perchè in ogni esempio di script pubblicato nei vari forum della rete tutti trascurano di verificare il "return code" di ogni singola operazione di accesso al DBMS o a semplici file?

    In genere sembra che ci si accontenti di testare se l'operazione è andata bene o male infischiandosene del motivo ed ovviamente rinunciando alla gestione da parte del programma.
    Addirittura in un post qualcuno chiedeva come verificare il caso di "chiave doppia" nel tentativo d'inserimento di una tupla nella tabella. Ebbene, la risposta (da parte di qualche dotto che a parole sembrava essere il più esperto) fù che non è necessario testare quell'evenienza poichè se si usa la "primary key" nella creazione della tabella allora non è possibile inserire 2 volte la stessa tupla. Veramente esilarante tale risposta.

    Ma anche nell'esempio esposto dallo script sembra non essere buona norma testare lo "rc" ad OGNI accesso. Cosa succederebbe infatti se l'inserimento in "mem_user" andasse male (e quindi non fosse eseguito) e la successiva cancellazione in "mem_pending" andasse bene? Non ci sarebbe più traccia nè nell'una nè nell'altra tabella dell'operazione svolta dall'utente.

    Certamente le transazioni svolte in piattaforme client/server non sono così importanti e frequenti come avviene nei sistemi basati su "main frame" poichè in genere si lascia solo la gestione dell'interfiaccia grafica. Eppure se si vuole sviluppare software qualitativamente valido ed affidabile bisogna architettare un gestione delle eccezione "impeccabile".

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.