• User

    Io sono più che sicuro che tu sia stato molto chiaro, ma io non riesco a farlo funzionare:

    ti allego il testo del mio form e quello del mio php, così mi dici cosa di preciso ho sbagliato. Premetto che il form l'ho scaricato, quindi ci sono anche delle indicazioni che, comunque, non mi sono bastate.. per questo chiedo scusa, perchè quando uno è tardo di comprendonio diventa pure scocciante!

    Ecco i miei file:

    la prima parte del form:

    <table border="0" width="540" height="420" cellspacing="0" cellpadding="0" background="http://www.giorgiotave.it/forum/images/contenuti/cornice_form.png" style="background-repeat:no-repeat">
    <tr>
    <td width="100%"><div align="center"><center><table border="0" width="100%">
    <tr>
    <td align="center" valign="top" rowspan="2" width="90%">
    <form name="modulo" method="post" action="inviamail.php">
    <input type="hidden" name="object" value="1" />

    Il file .php:

    //(3) oggetto del messaggio
    //$oggetto_email = "";

    $object="";
    $object=$_POST['object'];
    switch ($object){
    case 1:
    $object_mail="Oggetto mail prodotto 1";
    $link="vvv.nomesito.ext/indirizzoprodotto1";
    break;
    case 2:
    $object_mail="Oggetto mail prodotto 2";
    $link="vvv.nomesito.ext/indirizzoprodotto2";
    break;
    case 3:
    $object_mail="Oggetto mail prodotto 3";
    $link="vvv.nomesito.ext/indirizzoprodotto3";
    break;

    }

    Le parti in corsivo sono quelle che c'erano nel file scaricato. I 2 slash in neretto li ho aggiunti io per sostituire quella riga con le righe che mi hai dato tu.

    Di sicuro ho omesso qualche elemento di sintassi o roba simile, perchè la mail mi arriva sempre senza oggetto.

    Rafa
    😞


  • Consiglio Direttivo

    Prova a postare il form completo ed il file .php dove c'è la funzione mail() così vediamo come sistemarle. 😉


  • User

    Samyorn io ti ringrazio davvero tanto, per tutto il tempo che mi stai deidcando e per l'onestà che mi hai dimostrato nello scambio di messaggi.

    Stavo copiando il codice del file .php per postartelo quando mi sono accorto, ahimè per la prima volta soltanto adesso, che alla fine del file c'era un richiamo alla variabile "object_mail".

    Ho sistemato quella, che nella versione originale del file si chiamava "oggetto_mail" ed è andato, finalmente, tutto liscio.

    Adesso non mi resta che, si fa per dire, che mettere su tutto l'ambaradan necessario per creare un sistema che mi salvi i dati delle mail in un database e che mi faccia da risponditore automatico all'arrivo delle mail da parte dei form.

    Ma per questo, mi sa, che mi conviene aprire un altro topic.

    Grazie mille e a buon rendere.
    Rafa
    😉


  • Consiglio Direttivo

    Ciao pinokkietto,
    se sei daccordo potremmo continuare su questo thread per implementare l'inserimento dei dati sul Db dato che riguarda lo stesso file .php di elaborazione. Poi se approdiamo, sempre con il tuo consenso, potremmo fare un ritocchino al Titolo della discussione e spostarla in Script e Risorse utili. Sarà di certo un enorme aiuto a tutta l'utenza del Forum. 😉

    P.S. ho un paio di giorni di fuoco, non preoccuparti se non rispondo in breve tempo. 😉


  • User

    Ovvio che sono d'accordo.

    Pensavo di chiudere la discussione solo perchè non volevo andare troppo OT, ma se ritieni che cambiandole il titolo e posizionandola in una sezione più adeguata possa essere d'aiuto ad altri, fa pure.

    A questo punto ne approfitto per fare un'altra domanda:

    ad essere sinceri io non capisco come il modulo possa inviare una mail, cioè come faccia a farlo senza collegarsi ad un server SMTP o qualcosa comunque che gli consenta l'invio. Ma, visto che lo fa (ogni tanto bisogna accontentarsi della "fede"), mi chiedevo se, addirittura, si poteva configurare qualcosa che fungesse anche da autorisponditore. Mi spiego meglio:

    • Attualmente cliccando sul tasto "invia" del form, io ricevo una mail con i dati inseriti nel form e con l'oggetto che riesco ad ottenere grazie al giochetto mostrato da Samyorn

    E' possibile fare in modo che le mail inviate siano 2, una a me con i dati inseriti nel form, ed una all'email inserita nel form con un testo preimpostato? Ovviamente recuperando in entrambi i casi gli oggetti personalizzati

    In questo modo la ricezione del link dove poter scaricare il contenuto gratuito sarebbe pressapoco immediata e non ci sarebbe bisogno di implementare un autorisponditore con le opportune regole.

    rafa
    😉


  • Consiglio Direttivo

    @pinokkietto said:

    Pensavo di chiudere la discussione solo perchè non volevo andare troppo OT, ma se ritieni che cambiandole il titolo e posizionandola in una sezione più adeguata possa essere d'aiuto ad altri, fa pure.
    Riguardando la stessa elaborazione di dati troviamo più opportuno ed utile fare tutto nella stessa discussione. 😉

    @pinokkietto said:

    .. ad essere sinceri io non capisco come il modulo possa inviare una mail, cioè come faccia a farlo senza collegarsi ad un server SMTP o qualcosa comunque che gli consenta l'invio. Ma, visto che lo fa (ogni tanto bisogna accontentarsi della "fede"), mi chiedevo se, addirittura, si poteva configurare qualcosa che fungesse anche da autorisponditore.
    Nessun mistero della "fede", basta che guardì quì. 😉

    Esistono ovviamente funzioni che utilizzano una connessione ad un server SMTP, e di certo sarebbe molto più idoneo, sicuro e, in molti casi, ti potrebbe evitare, o diminuire, la possibilità di finire in SPAM. Ma sono settaggi un po' più complessi. Puoi iniziare comunque a dare un'occhiata quì. 😉

    @pinokkietto said:

    E' possibile fare in modo che le mail inviate siano 2, una a me con i dati inseriti nel form, ed una all'email inserita nel form con un testo preimpostato? Ovviamente recuperando in entrambi i casi gli oggetti personalizzati

    Basta replicare la riga dove trovi la funzione mail() e sostituire la tua mail con quella ricevuta dal form che, nell'esempio precedente, è contenuta nella variabile $email. 😉


  • User

    Sam mi piace che la fai così facile, perchè è evidente che mostri fiducia in me.. ma mi dispiace doverti deludere. 🙂

    Cioè, non ci ho neanche provato perchè credo che farei un casino, però sono convinto che inviare la seconda mail facendo quello che mi stai dicendo sia anche piuttosto facile. Ma implementare la seconda mail con un testo preimpostato mi sembra sia davvero qualcosa al limite del "malefico"..

    Quindi pensavo: non è che per caso potrebbe essere una strada migliore associare una seconda "action" al form facendo riferimento ad un secondo file inviamail.php, in modo da pote configurare i due file in maniera distinta e separata tra di loro??

    Capisco che potrebbe non essere la soluzione meglio ottimizzata, ma se fosse, tra le varie opzioni, quella più semplice da realizzare, io sarei contentissimo così.

    Rafa
    😉


  • Consiglio Direttivo

    Ciao Rafa,
    posta il contenuto del file inviamail.php, includendo tutto il codice tra i tag [php] (Questa iconcina imageche trovi nella modalità avanzata dell'editor)

    Vedrai che non c'è nulla di difficile, quindi abbi fiducia in te, più che in me, nel caso puoi sempre lavorare su una copia del file così se qualcosa va male hai sempre modo di ripristinare. 😉


  • User

    Ok, ci provo 🙂

    [php]
    <?php
    $email=$_POST['email'];

    #######################################

    IMPOSTAZIONI DA CONFIGURARE

    #######################################

    //(1) indirizzo email del destinatario del modulo
    $destinatario = "[email protected]";

    //(2) indirizzo email del mittente, campo FROM
    // non toccare se desiderate che l'indirizzo email inserito nel modulo sia
    // riportato nel campo DA del messaggio che sarà ricevuto.
    // Se invece desiderate un campo fisso annullare la prima riga e abilitare
    // la seconda inserendo la dicitura desiderata (per annullare mettere //
    // all'inizio della prima riga e per abilitare togliere // dalla seconda riga)
    $nome_mittente = "$email";
    // $nome_mittente = "Dal Modulo";

    //(3) oggetto del messaggio;
    $object="";
    $object=$_POST['object'];
    switch ($object){
    case 1:
    $object_mail="Oggetto mail prodotto 1";
    $link="vvv.nomesito.ext/indirizzoprodotto1";
    break;
    case 2:
    $object_mail="Oggetto mail prodotto 2";
    $link="vvv.nomesito.ext/indirizzoprodotto2";
    break;
    case 3:
    $object_mail="Oggetto mail prodotto 3";
    $link="vvv.nomesito.ext/indirizzoprodotto3";
    break;

    }

    $all_free = "n";

    $campi_req = array("nome","email","citta","prov");

    $obbligo_email = "y";

    $accetta_condizioni = "y";

    //(8) URL della pagina di ringraziamento
    $pagina_grazie = "vvv.dominio.ext/contenuti/ty_page.html";

    //(9) URL della pagina errore campi vuoti
    $pagina_error_empty = "vvv.dominio.ext/contenuti/err_page.html";

    //(10) URL della pagina errore email
    $pagina_error_email = "vvv.dominio.ext/contenuti/err_page.html";

    //(11) URL della pagina errore condizioni non accettate
    $pagina_error_condizioni = "vvv.dominio.ext/contenuti/err_page.html";

    //(12) URL della pagina errore invio non autorizzato (mancanza di referer)
    $pagina_error_referer = "vvv.dominio.ext/contenuti/err_page.html";

    #######################################

    FINE IMPOSTAZIONI DA CONFIGURARE

    #######################################

    //ora e data
    $ora = date ("H:i:s");
    $data = date ("d/m/Y");

    //intestazione email che arriva al destinatario
    $corpo = "
    Modulo inviato il $data alle ore $ora
    Riepilogo dati:\n\n";

    ########### CODICI ###########

    //variabili per rendere lo script compatibile anche con la versione PHP 4.2 e maggiori
    if(!isset($_SERVER) OR !$_SERVER OR !is_array($_SERVER) OR count(array_diff($_SERVER, $HTTP_SERVER_VARS))){
    $_POST = &$HTTP_POST_VARS;
    }

    //prende IP ADDRESS
    if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){

    if ($_SERVER["HTTP_X_FORWARDED_FOR"] == "") {
    

    $ipnumb = getenv("REMOTE_ADDR");

        }else {
    

    $ipnumb = getenv("HTTP_X_FORWARDED_FOR");

            }
    
        } else {
    

    $ipnumb = getenv("REMOTE_ADDR");
    }
    ###################################

    //controllo referer
    if(empty($_SERVER["HTTP_REFERER"])){

    header ("Location: $pagina_error_referer");
    exit();
    
    }
    

    ########### CONTROLLO DEI CAMPI ###########
    $control_campi = 0;

    if($all_free != "y"){

    foreach($_POST as $key => $valore){
    
        if(in_array($key,$campi_req)){
    
            if(trim($valore) == ""){
    
            $control_campi++;
            
                                    } 
    
                                }
    
                            }
    
                        } else {
    
            $control_campi = 0;    
    
                                }                    
    

    ########### CONTROLLO EMAIL ###########
    $control_email = 0;

    if($obbligo_email == "y"){

    if(isset($_POST['email'])){
    
        if(!eregi("^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9_-])+.)+[a-z]{2,6}$", $_POST['email'])){
    
        $control_email++;
    
                            }
    
                        } else {
    
        $control_email = 0;
    
                            }
    
                        }
    

    ########### CONTROLLO CONDIZIONI ###########
    $control_condizioni = 0;

    if($accetta_condizioni == "y"){

    if(isset($_POST['trattamento_dati']) && $_POST['trattamento_dati'] == "accetto"){
    
        $control_condizioni = 0;
    
            } else {
    
        $control_condizioni ++;
    
            }
    
        }
    

    ########### INVIO EMAIL ###########
    if($control_campi == 0){

        if($control_email == 0){
    
            if($control_condizioni == 0){
    

    foreach($_POST as $key => $valore){

    $key = ucfirst(stripslashes(trim($key)));
    $valore = stripslashes(trim($valore));
    $key = str_replace("_"," ",$key);

            if(trim($valore) == "") $valore = "Non compilato";
            
                $corpo .= $key .": ". $valore ."\n\n";
    
            }
            
                $corpo .= "Numero IP: $ipnumb"."\n";
    

    $corpo .= "____________________________________________________________ \n\n

    ";

    // invio e-mail
    // Header Mail
    $headmail.="From: $nome_mittente <$nome_mittente>\n";
    $headmail.="Return-Path: $nome_mittente\n";
    $headmail.="User-Agent: Php Mail Function\n";
    $headmail.="X-Accept-Language: en-us, en\n";
    $headmail.="MIME-Version: 1.0\n";
    $headmail.="X-Priority: 1 (Highest)\n";
    $headmail.="Content-Type: text/plain; charset=ISO-8859-1; format=flowed\n";
    $headmail.="Content-Transfer-Encoding: 7bit\n";

    ini_set('sendmail_from', "$destinatario");
    mail("$destinatario", "$object_mail", "$corpo", "$headmail");

                header ("Location: $pagina_grazie");
    
                                } else {
    
                header ("Location: $pagina_error_condizioni");
    
                            }
    
                        } else {
    
                header ("Location: $pagina_error_email");
    
                        }
    
                    } else {
    
                    
                header ("Location: $pagina_error_empty");
    
                    }
    

    ?>
    [/php]questo è tutto il file.

    Sam dovrai darmi modo di sdebitarmi, in un modo o nell'altro 😉

    rafa


  • Consiglio Direttivo

    Allora, vediamo un po'.
    Questa è la riga 217 del file, quella che contiene la funzione mail():
    [php]mail("$destinatario", "$object_mail", "$corpo", "$headmail");[/php]I parametri inseriti tra parentesi non sono altro che, in ordine:

    • e-mail del destinatario (in questo caso $destinatario contiene la tua mail)
    • Oggetto della Mail
    • Testo della mail
    • Header della mail

    Se tu vuoi mandare una mail anche a chi compila il modulo non devi far altro che copiare, intanto, la riga subito dopo questa, cambiare l'e-mail del destinatario, ovvero quella inserita nel form che in questo file è contenuta nella variabile $email. Fatto questo variare il testo della mail che sicuramente sarà diverso dalla mail che giunge a te.
    Per il corpo della mail, anche per avere una maggiore leggibilità del codice, puoi utilizzare il seguente metodo (questa parte va inserita tra le due righe contenenti le funzioni mail() 😞
    [php]$corpo="Salve ".$nome.",\n"; // \n serve ad andare a capo
    $corpo.="blablablablablablabla.\n"; // attenzione al .= serve a aggiungere a seguire il resto del testo
    $corpo.="Puoi scaricare l'e-book da <a href="".$link."" title="Clicca per scaricare">questo link</a>.\n";[/php]Altra cosa:
    [php]$nome_mittente = "$email";[/php]Sostituisci $email con il nome che vuoi che appaia nel mittente (sempre tra virgolette) e poi:
    [php]$headmail.="From: $nome_mittente <$nome_mittente>\n";
    $headmail.="Return-Path: $nome_mittente\n";[/php]Trasformalo in:
    [php]$headmail.="From: ".$destinatario." <".$nome_mittente.">\n";
    $headmail.="Return-Path: ".$destinatario."\n";[/php]Vediamo se con queste modifiche che ti ho scritto va. 😉