• User Attivo

    [Tutorial] Gestione di un form mail semplice

    Invio mail da web form by pikadilly

    Lo script illustrato di seguito può essere utile a tutti coloro che hanno incontrato problemi con la creazione di un form per l'invio di mail

    Si tratta di uno script di base, ma utile per capire i meccanismi.
    Da questo punto in poi la parola a pikadilly che mi ha gentilmente inviato lo script e la sua descrizione.

    "La domanda che spesso viene fatta è: "come faccio ad inviare un modulo

    dalla mia pagina web alla mia mail?", le risposte prevedono sempre la comparsa della parola "programmazione". Di seguito vedremo un semplice script che permette di inviare una mail dal nostro sito alla nostra casella e-mail, funziona anche se la casella di posta è una webmail.
    Anzitutto abbiamo due pagine che chiameremo:

    "modulo.html"
    "invio.php"

    **modulo.html **conterrà la form in cui si inseriranno di dati, per esempio:

    -E-mail
    -Oggetto
    -Messaggio

    Per ogni campo sopracitato si deve sapere il nome, name, tipo, type, e id, che rimane *id.
    *quindi il codice sarà così ad esempio per l'oggetto della mail.

    <input name="object" type="text" id="object" />

    **Vediamo la form nella pagina modulo.html nell'insieme:**
    

    [PHP]<form action="invio.php" method="post" id="modulo">
    <table>
    <tr>
    <td>Il Suo indirizzo e-mail*</td>
    <td><label>
    <input name="mail" type="text" id="mail" />
    </label></td>
    </tr>
    <tr>
    <td>Oggetto*</td>
    <td><label>
    <input name="object" type="text" id="object" />
    </label></td>
    </tr>
    <tr>
    <td>Messaggio*</td>
    <td>
    <textarea name="body" cols="30" rows="5" id="body"></textarea>
    </td>
    </tr>
    <tr>
    <td><label></label>
    </td>
    <td><label>
    <input type="submit" name="submit" id="submit" value="Invia" /> <input type="reset" name="cancella" id="cancella" value="Ripristina" />
    </label></td>
    </tr>
    </table>
    </form>
    [/PHP]
    Ogni campo di testo ha un suo id che verrà trasmesso alla pagina invio.php che processerà il tutto e spedirà i risultati all'indirizzo mail che andremo a specificare in seguito.
    Come si può notare, all'apertura del tag <form> è stato aggiunto:
    action="invio.php" method="post"
    "Action" determina l'azione, ovvero invia ad invio.php tutto quello contenuto nel modulo, "post" indica invece il metodo.

    **Passiamo alla pagina invio.php**
    

    In invio.php ponete questo codice tra i tag body:

    [PHP]<?php
    // indirizzo di chi riceve la mail è sottolineato ma nel codice non sottilineatelo
    if ((trim($_POST['object']) != "") && (trim($_POST['body']) != "")) { //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
    $to = " \n [email protected] Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo ";
    $headers = "From: " . $_POST['mail'] . "\n";
    // soggetto della mail
    $subject = "Modulo proveniente da www.tuosito.it";

    // corpo messaggio
    $body = "Contenuto del modulo:\n\n";

    $body .= "Inviata da: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, come si vede riprende l'id del campo destinato all'inserimento della mail del mittente

    $body .= "Oggetto: " . trim(stripslashes($_POST["object"])) . "\n"; //oggetto del messaggio
    $body .= "testo: " . trim(stripslashes($_POST["body"])) . "\n"; //messaggio

    // invio mail
    mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...

    echo "La mail è stata inviata con successo. Grazie per averci contattato";

    } else {// altrimenti
    echo "Deve compilare la form prima di inviare.";

    }

    ?>
    [/PHP]

    Inserendo questo codice nella pagina invio.php e settando la vostra mail al posto di " [EMAIL="[email protected]"][email protected][/EMAIL]" riceverete una mail dalla vostra web form.

    Una cosa fondamentale è la codifica dei caratteri.
    Per ricevere una mail priva di lettere strane tipo questa "è" o apostrofi preceduti da " " è necessario che la codifica dei caratteri nei metatag sia impostata così:

    [PHP]
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    [/PHP]

    Alcuni programmi di defaultl mettono:

    [PHP]<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.[/PHP]

    Grazie pikadilly


  • Super User

    Io invece ringrazio Gmassi e Adriano_Bari per avermi aiutato a risolvere il problema degli accenti e degli apostrofi nelle mail che si ricevono dalla web form.
    Grazie Mz per l'inserimento 😄


  • User Newbie

    ma cerchero' di contribuire con piccole cose...ciao:vai:


  • User Newbie

    scusate l'ignoranza sono nuova.... ma tutto questo script lo si incolla in un' unica pagina semplice di html ?


  • Super User

    Ciao Raffa,
    la pagina che contiene il form può anche essere una semplice pagina html ma la seconda (invio.php) deve essere .php.

    Tu inserisci tutto il codice php nella pagina .php (scusa le ripetizioni).

    😉


  • User Attivo

    Ciao, non riesco a far funzionare il mio form,, credo che c'è qualche problema su su invio.php?
    prima dell'indirizzo email c'è una n... :mmm:
    quando provo a inviare i dati dice invio dati riuscito ma non mi arriva nessuna e-mail.......:():😢

    <?php
    // indirizzo di chi riceve la mail è sottolineato ma nel codice non sottilineatelo
    if ((trim($_POST['object']) != "") && (trim($_POST['body']) != "")) { //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
    $to = " \n E-MAIL MIO SITO.net Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo ";
    $headers = "From: " . $_POST['mail'] . "\n";
    // soggetto della mail
    $subject = "Modulo proveniente da NOME MIO SITO.net";

    // corpo messaggio
    $body = "Contenuto del modulo:\n\n";

    $body .= "Inviata da: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, come si vede riprende l'id del campo destinato all'inserimento della mail del mittente

    $body .= "Oggetto: " . trim(stripslashes($_POST["object"])) . "\n"; //oggetto del messaggio
    $body .= "testo: " . trim(stripslashes($_POST["body"])) . "\n"; //messaggio

    // invio mail
    mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...

    echo "La mail è stata inviata con successo. Grazie per averci contattato";

    } else {// altrimenti
    echo "Deve compilare la form prima di inviare.";

    }

    ?>
    </body>
    </html>


  • Moderatore

    lo utilizzi in localhost?

    magari non hai il client smtp attivo 🙂

    prova in remoto 🙂


  • User Attivo

    ho caricato i files su internet e da internet che faccio la prova


  • Super User

    Ho capito il problema...forse...
    Hai scaricato lo zip o hai copiato e incollato quello scritto nel primo thread?

    Probabilmente, se hai copiato e incollato il primo post del thread hai copiato anche questa dicitura:

    Indirizzo e-mail protetto dal bots spam
    che si trova accanto a l'indirizzo e-mail.

    Togli quella frase che non fa parte dello script e riprova, facci sapere. 😉


  • User Attivo

    GRAZIEEEEEEEEE FUNZIONAAAAAAAAAA ⭕cry::lol::eheh:

    CIAO.. :ciauz:


  • User Attivo

    Il form funziona, ho aggiunto altri cmpi coma nome e cognome, ma quando leggo la e-mail nn si vedono i nuovi campi... eppure ci sono gli id ..... ho aggiunto questo: ma nn arriva, ho cantato vittoria troppo presto 😛

    <tr>
    <td><strong>Nome*</strong></td>
    <td><label>
    <input name="nome" type="text" id="nome" size="100" />
    </label></td>
    </tr>
    <tr>
    <td><strong>Cognome*</strong></td>
    <td><label>
    <input name="cognome" type="text" id="cognome" size="100" />
    </label></td>
    </tr>


  • User Attivo

    🙂 ALLA FINE HO CAPITO CHE DOVEVO MODIFICARE ANCHE IL FILE .PHP E FUNZIONA... ora una cosa vorrei fare ancora, a far scrivere obbligatoriamente ttt i dati.... cm si fa?


  • User Attivo

    SONO RIUSCITO ANCHE A RENDERE OBBLIGATORIO TUTTI I CAMPI..... VI RINGRAZIO ANCORA TUTTI, PERCHE' SENZA DI VOI NN CE LA POTEVO MAI FARE... GRAZIE DAVVERO!:wink3:


  • Super User

    Bene,
    in ogni caso nei thread utili c'era anche lo script su come fare una form mail con campi obbligatori. 😉

    http://www.giorgiotave.it/forum/php-mysql/58050-esempio-form-per-invio-mail-con-controllo.html


  • User Attivo

    Grazie Pikaciu! 😉 adesso però, avrei un'altro problemino............. :D, siccome sono un webmaster in via di estinzione, che nn conoscono in dettaglio la programmazione......... mi aiuteresti a creare una pagina dove un utente ci si può iscrivere avere subito una risposta via e-mail du benvenuto.. e se conosci qualcs di più professionale e carino possibile?

    Grazie di cuore.
    Davide smack


  • Super User

    Allora siamo colleghi di sventura. 😄
    Purtroppo io non mi occupo di programmazione, ogni tanto provo a montare, degli script per le form mail e vengono fuori cose che funzionano.
    Non saprei proprio come aiutarti. Probabilmente se apri un discorso a tema o fai una piccola ricerca nel forum php qualcosa puoi anche trovare.
    Buon lavoro 😉


  • User Newbie

    ciao ragazzi,
    il post è vecchio ma ho un problema.

    Non sono molto esperto di programmazione (me la cavo) ho fatto un sito internet e volevo inserirci una pagina di commenti per poi riceverli sulla mail.

    Ho usato i 2 documenti (html e php) messi a disposizione nella prima spiegazione e HO MODIFICATO SOLO LA MAIL METTENDO LA MIA MAIL DI HOTMAIL.

    Per fare una prova creo una pagina vuota scrivo ''valutazioni'' e lo collego ipertesto sulla pagina html.

    • Carico la pagina vuota, il file html e il file php sul sito;
    • Vado sul sito da web premo valutazioni mi apre la pagina impostata in html;
    • Compilo premo invia e mi dice errore visualizzazione pagina.

    Io da i 2 files scaricati non ho modificato nulla (solo la mail) ho lasciato le scritte che stavano in arancione.

    Vi prego aiutatemi che ne ho urgente bisogno.


  • User Attivo

    Salve, il codice funziona perfettamente, volevo sapere c'è un modo per inserire altre opzioni oltre a messaggio, oggetto e email?


  • Consiglio Direttivo

    Ciao zaghor82, cosa intendi per altre opzioni? 🙂


  • User Attivo

    Ragazzi apposto ho già risolto, grazie.