• User

    help form invio mail

    ciao a tutti
    mi scuso per la domanda banale ma non ne vengo a capo e non sono riuscito a trovare script già fatti che siano ok per il mio caso.
    vi spiego:
    devo creare un form per invio mail da un sito
    questo form ha i campi
    nome, cognome, mail, messaggio
    questo è l'html che ho creato

    <form method="post" action="mail.php"> <BR>
    Nome <input type="text" id="nome"> <BR>
    Cognome <input type="text" id="cognome"> <BR>
    Email Mittente: <input type="text" id="email_mittente"> <BR>
    Testo: <textarea id="messaggio"> </textarea> <BR>
    <input type="submit" value="Invia Email"> <BR>
    </form>

    il codice ph che ho utilizzato è questo:

    <? 
$to = $_POST['[email protected]'];
    $subject =
    $email = $_POST['messaggio'];
    $mailheaders = "From: " . $_POST['nome'] . " " . $_POST['cognome '] . " <> ";
    $mailheaders .= "Reply-To:" . $_POST['email_mittente'] . " ";
    mail($to, $subject, $email, $mailheaders); 
?>

    ho fatto alcune prove inviando al mio indirizzo mail ma non ricevo nulla.
    dove sbaglio?
    mi farebbe comodo mettere anche dei controlli sulla mail e sui vari campi del form.
    la parte subject è vuota perche vorrei scriverci "mail dal sito" ma non ho idea di come fare.

    potete cortesemente aiutarmi?


  • ModSenior

    Hai provato a fare un echo delle variabili?
    Prima della funzione mail(....), prova cosi...

    echo "$subject , $email , $mailheaders";

    Se ti ritornano solo tre virgole separate da degli spazi allora vuol dire che le variabili sono vuote ancor prima di arrivare li.


  • User

    ciao

    ho modificato il codice per vedere gli errori in questo modo:

    <?php
    ini_set('display_errors',1);
    error_reporting(E_ALL|E_STRICT);

    $to = $_POST['[email protected]'];
    $subject = "";
    $email = $_POST['messaggio'];
    $mailheaders = "From: " . $_POST['nome'] . " " . $_POST['cognome '] . " <> ";
    $mailheaders .= "Reply-To:" . $_POST['email_mittente'] . " ";
    echo "$subject , $email , $mailheaders";

    mail($to, $subject, $email, $mailheaders);
    ?>

    mi restituisce i seguenti errori:

    Notice: Undefined index:xxx @gmail.com in mailprova.php on line 13

    Notice: Undefined index: messaggio in mailprova.php on line 15

    Notice: Undefined index: nome in mailprova.php on line 16

    Notice: Undefined index: cognome in mailprova.php on line 16

    Notice: Undefined index: email_mittente in mailprova.php on line 17


  • ModSenior

    Intanto il $to... gli assegni una variabile post che di sicuro non puo essere un valore... ma il nome del'id o name che era presente nel form che manda informazioni a questa pagina... 🙂


  • User

    forse ho sbagliato e non ho capito
    ma io $to non ci dovrrebbe andare la mia mail?
    quella a cui deve arrivare il messaggio spedito dal form?


  • ModSenior

    Allora $to prima di tutto è una variabile.
    Concettualmente visto anche il nome, sicuramente ci va la tua mail, ma attenzione a come gli assegni il valore...

    $to = $_POST['[email protected]'];

    Se fai cosi stai dicendo di assegnare alla variabile $to il valore di una variabile di tipo POST (mandata cioè dal form di prima) il cui nome/id è xxx @ gmail.com, invece credo che tu, almeno in questa variabile, gli debba assegnare una stringa diretta.

    $to = "[email protected]";


  • User

    oraq è rimasto un solo errore

    Notice: Undefined index: cognome in mailprova.php on line 16
    , ddd , From: dd <> Reply-To:dd

    grazie mille!


  • ModSenior

    Vero!
    E che lo avevo anche scritto nome/id mannaggia. 🙂


  • ModSenior

    Mi sa che si tratta dello stesso tipo di errore, il nome della variabile POST deve avere lo stesso nome del campo name...


  • User

    si, c era uno spazio di troppo.

    ora mi restituisce questo:

    , ddd , From: dd dd <> Reply-To:dd


  • ModSenior

    Se è quello che ti aspetti allora va bene.... 🙂
    Dipende da quello che hai scritto tu nei campi...

    Attenzione qua nel forum ad iniziare le frasi con le lettere maiuscole...


  • User

    quello che mi restituisce è ok
    ma la mail non la invia.

    e se volessi che mi restituisse messaggio inviato?


  • User

    ho modificato lo script aggingendo un controllo di mail inviata o no

    <?php

    $to = "[email protected]";
    $subject = "";
    $email = $_POST['messaggio'];
    $mailheaders = "From: " . $_POST['nome'] . " " . $_POST['cognome'] . " <> ";
    $mailheaders .= "Reply-To:" . $_POST['email_mittente'] . " ";

    if(mail($to, $subject, $email, $mailheaders)){
    print "mail inviata";
    }
    else{
    print "mail NON inviata!";
    }
    ?>

    solo che non la invia.
    cosa potrebbe essere?


  • ModSenior

    Qua nel forum per postare il codice usa l'apposito pulsante, cosi risulta tutto piu leggibile.

    Da dove stai provando a fare questi test?
    Da in locale?
    Da un sito in internet?


  • User

    certo, non mi ero accorto della sua esistenza.
    lo sto provando da un server aruba.
    ho provato a spedire una mail tramite il loro tool che fa vedere se il php.ini è configurato bene o meno e tutto funziona...
    i file del form e dello script però non sono nella directory radice del sito.


  • ModSenior

    Forse è sbagliata la sintassi che usi.

    Tu usi questa.
    mail($to, $subject, $email, $mailheaders)

    Mentre la sintassi giusta dovrebbe essere questa

    $headers = 'From: tuamail' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
    

  • User

    buongiorno!!!
    ho modificato lo script in questo modo:

    [PHP]
    <?php

    $to = "[email protected]";
    $subject = "";
    $email = $_POST['messaggio'];
    $mailheaders = "From: " . $_POST['nome'] . " " . $_POST['cognome'] . " <> ";
    $mailheaders .= "Reply-To:" . $_POST['email_mittente'] . " ";

    if(
    $headers = 'From: MAIL ' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
    ){
    print "mail inviata";
    }
    else{
    print "mail NON inviata!";
    }
    ?>
    [/PHP]

    mi da questo errore:
    Parse error: syntax error, unexpected ';' on line 23

    poi non capisco questa riga di codice [PHP]$headers = 'From: MAIL ' . "\r\n" .[/PHP]
    poi spiegarmela?

    grazie mille


  • ModSenior

    Attenzione alle maiuscole qua nel Forum. 🙂
    Purtroppo non vedo la riga 23... Ma credo si tratti dell'if...
    Porta fuori l'assegnazione dell'header che alla fine è una stringa.

    $headers = "From: MAIL \r\n X-Mailer: PHP/" . phpversion();

    Dove al posto della parola mail metti la tua effettiva mail.

    Questo dovrebbe far si che i sistemi antispam, buttino la mail generata da questa funzione nella cartella Spam.