• User Newbie

    Form contatti formattato alla ricezione

    Salve a tutti,
    Non so precisamente se questa è la categoria giusta per iniziare questa discussione ma adesso vi spiego il mio problema, così se ci fosse bisogno la sposterò immediatamente.
    Avrei bisogno di creare un form contatti su un sito web, dove è possibile che il visitatore possa introdurre il suo Nome,Cognome,Indirizzo,Data di nascita e tante altre informazioni.
    Il mio problema giunge quando il proprietario del sito riceve la mail, perché dovrebbe visualizzare tutte le info. non sotto forma di lista ma formattate come in una lettera.

    Grazie per l'attenzione.
    :ciauz:


  • User Attivo

    Se usi PHP per l'invio della email ti consiglio PHPMailer, per i campi ti basta un semplice form php con i campi che desideri. Con l'azione post del pulsante troverai nelle variabili $_POST i dati che puoi riutilizzare come meglio credi.


  • User Newbie

    Ok grazie. Sto seguendo il tuo consiglio ed ho scaricato PHPMailer Version 2.0 dal sito sourceforge.net/projects/phpmailer/files/phpmailer for php4/v2.0.0/.

    Successivamente ho trovato una guida su come utilizzare PHPMailer: mrwebmaster.it/php/articoli/inviare-email-classe-phpmailer_631.html

    Alla Pagina 3 della guida,con il titolo "Inviare email in formato HTML con PHPMailer", suggerisce questo codice:

    <?require "phpmailer/class.phpmailer.php";$messaggio = new PHPmailer();$messaggio->IsSMTP();//settiamo su true il metodo che indica alla classe //il formato HTML$messaggio->IsHTML(true);$messaggio->Host='Host SMTP';//intestazioni e corpo dell'email$messaggio->From='[email protected]';$messaggio->AddAddress('[email protected]');$messaggio->AddReplyTo('[email protected]'); $messaggio->Subject='Prova formato HTML';//inseriamo i tag HTML e i CSS per formattare il messaggio$messaggio->Body = '<html>
    <body>
    <head>
    <style>';$messaggio->Body .= '.up{background-color:#FF0000;color:#000000;font-size:12px}';$messaggio->Body .= '.down{color:#FF0000;text-align:left;font-size:15px}';$messaggio->Body .= '</style></head>';$messaggio->Body .= '<center><table><tr><td class="up">Ciao!!</td></tr>';$messaggio->Body .= '<tr><td class="down">ciao!!!</td></tr></table></center>';$messaggio->Body .= '</body></html>';//parte relativa all'invioif(!$messaggio->Send()){ echo $messaggio->ErrorInfo; }else{ echo 'Email inviata correttamente!';}$messaggio->SmtpClose();unset($messaggio);?>

    Adesso,quest'ultimo, deve essere scritto nella mia pagina index.html, dove metterò i text box opportuni per l'utilizzo del form contatti, oppure deve essere inserito in un file di configurazione di PHPMailer?


  • User Attivo

    Intanto il file deve avere estensione .php altrimenti non eseguirà il codice server.
    Ecco un esempio veloce

    Pagina index.html
    [HTML]
    <form method="POST" action="mailManager.php" enctype="multipart/form-data">
    <table>
    <tr>
    <td>Nome</td>
    <td><input class="text" type="text" name="nome" size="20"></td>
    </tr>
    <tr>
    <td>Cognome</td>
    <td><input class="text" type="text" name="cognome" size="20"></td>
    </tr>
    <tr>
    <td>Email</td>
    <td><input class="text" type="text" name="email" size="20"></td>
    </tr>
    <tr>
    <td>Messaggio</td>
    <td><textarea rows="2" name="messaggio" cols="20"></textarea></td>
    </tr>
    <tr>
    <td>File</td>
    <td><input type="file" name="allegato"></td>
    </tr>
    <tr>
    <td> </td>
    <td><input type="submit" value="Invia" name="sub"><input type="reset" value="Annulla" name="res"></td>
    </tr>
    </table>
    </form>
    [/HTML]

    pagina **mailManager.php
    **[PHP]
    <?php
    require_once('class.phpmailer.php');
    //upload dell'allegato
    if (!move_uploaded_file($_FILES['allegato']['tmp_name'], $_FILES['allegato']['name']))
    {
    echo "Errore nel caricamento dell'immagine";
    }
    else{
    //invio mail
    $mail = new PHPMailer();
    $mail->SetFrom($_POST['email'],$_POST['nome']."".$_POST['cognome']); //mittente
    $mail->AddAddress("[email protected]", "Nome destinatario"); //destinatario
    $mail->Subject = "Invio mail da form"; //oggetto
    $mail->Body = $_POST['messaggio']; //corpo del messaggio
    $mail->AddAttachment($_FILES['allegato']['name']); //allegato appena caricato sul server

         if(!$mail->Send())              
        {                    
            echo "Messaggio non inviato! <p>";                   
            echo "Errore: " . $mail->ErrorInfo;                   
            exit;              
       }                   
         echo "Message inviato con successo";           
     }  
    

    ?>
    [/PHP]
    **

    **


  • User Newbie

    Ho copiato il codice che mi hai postato e questi sono i file che ho creato:

    **index.html
    **
    [HTML]<html> <head> <title> Prova php mailer </php></title> </head> <body> <form method="POST" action="mailManager.php" enctype="multipart/form-data"> <table> <tr> <td>Nome</td> <td><input class="text" type="text" name="nome" size="20"></td> </tr> <tr> <td>Cognome</td> <td><input class="text" type="text" name="cognome" size="20"></td> </tr> <tr> <td>Email</td> <td><input class="text" type="text" name="email" size="20"></td> </tr> <tr> <td>Messaggio</td> <td><textarea rows="2" name="messaggio" cols="20"></textarea></td> </tr> <tr> <td>File</td> <td><input type="file" name="allegato"></td> </tr> <tr> <td> </td> <td><input type="submit" value="Invia" name="sub"><input type="reset" value="Annulla" name="res"></td> </tr> </table> </form> </body></html>[/HTML]

    **mailerManager.php

    **[PHP]<?php require_once('phpmailer/class.phpmailer.php'); //upload dell'allegato if (!move_uploaded_file($_FILES['allegato']['tmp_name'], $_FILES['allegato']['name'])) { echo "Errore nel caricamento dell'immagine"; } else{ //invio mail $mail = new PHPMailer(); $mail->SetFrom($_POST['email'],$_POST['nome']."".$_POST['cognome']); //mittente $mail->AddAddress("[email protected]", "Marco Tornani"); //destinatario $mail->Subject = "Invio mail da form"; //oggetto $mail->Body = $_POST['messaggio']; //corpo del messaggio $mail->AddAttachment($_FILES['allegato']['name']); //allegato appena caricato sul server
    if(!$mail->Send()) { echo "Messaggio non inviato! <p>"; echo "Errore: " . $mail->ErrorInfo; exit; } echo "Message inviato con successo"; }
    ?>[/PHP]

    Ho caricato tutto sul mio server. Dopo aver compilato tutti i campi ed aver caricato l'immagine *wedding_head_table_4.jpg, *al momento che premo invio mi compare questo errore:

    Warning: move_uploaded_file(wedding_head_table_4.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied inD:\Inetpub\webs\esseaserviceit\mailManager.php on line **4

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\PHP\upload\php2348.tmp' to 'wedding_head_table_4.jpg' in**D:\Inetpub\webs\esseaserviceit\mailManager.php on line **4
    Errore nel caricamento dell'immagine

    **NE SAI QUALCOSA???
    **



  • User Attivo

    Prima di passare a oltre ti pongo la domanda:
    Serve che l'utente carichi un file?
    Se si è un problema di permessi che dovresti vedere sulla cartella temporanea C:\PHP\upload\php2348.tmp
    Se no ti basta togliere la parte di attach e togliere il componente input "file" su index.html.

    Ultima domanda intetpub mi sa tanto di IIS, per caso son solo prove locali o stai facendo andare PHP sotto server windows?


  • User Newbie

    Si,ho bisogno anche che carichi un immagine. Sto provando il tutto su un server windows... Quindi devo dare i permessi alla cartella upload. Provo un pò e poi ti faccio sapere. **Grazie **


  • User Newbie

    Adesso che ho cancellato,sia nel file.html che nel file.php,il codice che riguardava l'inserimento di un file, mi da il seguente errore: **Fatal error: Call to undefined method PHPMailer::SetFrom() in **D:\Inetpub\webs\esseaserviceit\mailManager.php on line **7

    ******Ti posto anche il codice del file mailManager.php attuale:

    [PHP]<?php
    require_once('phpmailer/class.phpmailer.php');

              //invio mail              
          $mail = new PHPMailer();                                                                                        
          $mail->SetFrom($_POST['email'],$_POST['nome']."".$_POST['cognome']);  //mittente      
          $mail->AddAddress("[email protected]", "Marco Tornani"); //destinatario             
          $mail->Subject    = "Invio mail da form";     //oggetto         
          $mail->Body = $_POST['messaggio'];     //corpo del messaggio         
          $mail->AddAttachment($_FILES['allegato']['name']);  //allegato appena caricato sul server         
    
    
         if(!$mail->Send())              
        {                    
            echo "Messaggio non inviato! <p>";                   
            echo "Errore: " . $mail->ErrorInfo;                   
            exit;              
       }                   
         echo "Message inviato con successo";           
    

    ?>
    [/PHP]


  • User Attivo

    L'errore dice che la classe [LEFT]PHPMailer [/LEFT]non contiene il metodo [LEFT]SetFrom()[/LEFT] dovresti verificare se nel file [LEFT]phpmailer/class.phpmailer.php[/LEFT] trovi tale metodo (che è di base di phpmailer, quindi c'è forse qualcos'altro.)
    Inoltre nel file php che mi hai incollato c'è ancora il codice riguardante l'allegato. [LEFT][/LEFT]


  • User Newbie

    Buongiorno,
    Grazie per il consiglio. Il mio file class.phpmailer.php non contiene il metodo SetFrom() ma il metodo *var $From,*dove ho messo il mio indirizzo. :mmm: E' la solita cosa?
    Mi sono accorto anche che la variabile Host,che dovrebbe contenere l'host smtp è scritta così: *var $Host = 'localhost'; *Io non so cosa metterci avendo un account gmail.

    Questa è la parte di configurazione SMTP nel file class.phpmailer.php:
    *
    [PHP]///////////////////////////////////////////////// // PROPERTIES FOR SMTP /////////////////////////////////////////////////
    /
    * * Sets the SMTP hosts. All hosts must be separated by a * semicolon. You can also specify a different port * for each host by using this format: [hostname:port] * (e.g. "smtp1.example.com:25;smtp2.example.com"). * Hosts will be tried in order. * @var string / var $Host = 'localhost';
    /
    * * Sets the default SMTP server port. * @var int / var $Port = 25;
    /
    * * Sets the SMTP HELO of the message (Default is $Hostname). * @var string / var $Helo = '';
    /
    * * Sets connection prefix. * Options are "", "ssl" or "tls" * @var string / var $SMTPSecure = "";
    /
    * * Sets SMTP authentication. Utilizes the Username and Password variables. * @var bool / var $SMTPAuth = false;
    /
    * * Sets SMTP username. * @var string / var $Username = '';
    /
    * * Sets SMTP password. * @var string / var $Password = '';
    /
    * * Sets the SMTP server timeout in seconds. This function will not * work with the win32 version. * @var int / var $Timeout = 10;
    /
    * * Sets SMTP class debugging on or off. * @var bool / var $SMTPDebug = false;
    /
    * * Prevents the SMTP connection from being closed after each mail * sending. If this is set to true then to close the connection * requires an explicit call to SmtpClose(). * @var bool / var $SMTPKeepAlive = false;
    /
    * * Provides the ability to have the TO field process individual * emails, instead of sending to entire TO addresses * @var bool */ var $SingleTo = false;[/PHP]


  • User Newbie

    Zambros! ho risolto il problema Fatal error: Call to undefined method PHPMailer::SetFrom() inD:\Inetpub\webs\esseaserviceit\mailManager.php on line **7, ****aggiornando la versione di PHPMailer alla 5.1 che ho trovato a questo link sourceforge.net/projects/phpmailer/files/phpmailer for php5_6/PHPMailer v5.1/. Purtroppo non ho risolto del tutto il mio problema perchè adesso mi da questo errore SMTP Error: Could not connect to SMTP host. SMTP Error: Could not connect to SMTP host. **Puoi aiutarmi? Io vorrei che mi arrivino le informazioni compilate nel form, alla mia posta su gmail.


  • User Attivo

    Ecco 🙂
    L'errore è semplicemente dato dal login che fai con SMTP dovresti mettere i valori giusti:

    Esempio GMAIL
    $Host= "smtp.gmail.com";
    $port = "465";
    $SMTPSecure = "ssl";
    $SMTPAuth = true;
    $Username = "[email protected]";
    $Password= "TUAPASSWORD";