Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143

    [Form Mail] E-mail vuota

    Ciao a tutti

    Ho scaricato da questo sito uno script in php, per l'invio di dati e allegati (http://php.html.it/script/vedi/4785/php-mailer-form/).

    Il problema è che l'email arriva è vuota. Le uniche informazioni che ottengo sono quelle definite nell'header (from, oggetto), mentre il corpo, che dovrebbe contenere tutti gli altri dati (phone, company ecc) rimane bianco.

    Per quanto riguarda gli allegati nessun problema, arrivano sempre.

    Ho provato a sostituire l'indirizzo di destinazione e in effetti l'email è arrivata completa, ma la seconda volta che ci ho provato non è stata neanche recapitata.

    Non riesco a capire dove sia il problema. Qualcuno dice che si tratta del server, ma anche stesso, come dovrei modificare lo script?

    Questo è il codice:

    Codice PHP:
    <?php
    function print_form(){
    ?>


    <span class="required">*</span> Required fields</p>
        <form method="post" action="<?php echo $PHP_SELF;?>" id="uploadform" enctype="multipart/form-data">
        

    <label for="namefrom">Name <span class="required">*</span></label>
        <input name="namefrom" id="namefrom" type="text" class="field" tabindex="1"/></p>
        
        

    <label for="company">Company</label>
        <input name="company" id="company" type="text" class="field"  tabindex="2"/></p>
        
        

    <label for="emailfrom">Email <span class="required">*</span></label>
        <input name="emailfrom" id="emailfrom" type="text" class="field"  tabindex="3"/></p>
        
        

    <label for="phone">Phone</label>
        <input name="phone" id="phone" type="text" class="field"  tabindex="4"/></p>
        
        

    <label for="subject">Subject <span class="required">*</span></label>
        <input name="subject" id="subject" type="text" class="field" tabindex="5"/></p>
        
        

    <label for="comments">Comments <span class="required">*</span></label>
        <textarea name="comments" id="comments" rows="7" cols="10" class="field" tabindex="6"></textarea></p>
        
        

    <label for="attachment">File Upload
    (1 file only, max file size 1024kb. Allowed file formats are .doc, .pdf, .txt, .zip, .rar)</label>
        <input name="attachment" id="attachment" type="file" tabindex="7">
        
        

    <input type="submit" name="submit" id="submit" value="Send Email!"  tabindex="8"/></p>
        

    <input type="hidden" name="submitted"  value="true" /></p>
        </form>
    <?php
    }

    // enquiry form validation

    function process_form() {
        
    // Read POST request params into global vars
        // FILL IN YOUR EMAIL
        
    $to "info@cinomania.net";
        
    $subject trim($_POST['subject']);
        
    $namefrom trim($_POST['namefrom']);
        
    $company trim($_POST['company']);
        
    $phone trim($_POST['phone']);
        
    $emailfrom trim($_POST['emailfrom']);
        
    $comments trim($_POST['comments']);
        
        
    // Allowed file types. add file extensions WITHOUT the dot.
        
    $allowtypes=array("zip""rar""txt""doc""pdf");
        
        
    // Maximum file size for attachments in KB NOT Bytes for simplicity. MAKE SURE your php.ini can handel it,
        // post_max_size, upload_max_filesize, file_uploads, max_execution_time!
        // 2048kb = 2MB,       1024kb = 1MB,     512kb = 1/2MB etc..
        
    $max_file_size="1024";
        
        
    // Thank you message
        
    $thanksmessage="Your email has been sent, we will respond shortly.";

        
    $errors = array(); //Initialize error array

        //checks for a name
        
    if (empty($_POST['namefrom']) ) {
            
    $errors[]='You forgot to enter your name';
            }

        
    //checks for an email
        
    if (empty($_POST['emailfrom']) ) {
            
    $errors[]='You forgot to enter your email';
            } else {

            if (!
    eregi ('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$'stripslashes(trim($_POST['emailfrom'])))) {
                
    $errors[]='Please enter a valid email address';
            } 
    // if eregi
        
    // if empty email

        //checks for a subject
        
    if (empty($_POST['subject']) ) {
            
    $errors[]='You forgot to enter a subject';
            }

        
    //checks for a message
        
    if (empty($_POST['comments']) ) {
            
    $errors[]='You forgot to enter your comments';
            }
            
        
    //checks attachment file
        // checks that we have a file
        
    if((!empty($_FILES["attachment"])) && ($_FILES['attachment']['error'] == 0)) {
                
    // basename -- Returns filename component of path
                
    $filename basename($_FILES['attachment']['name']);
                
    $ext substr($filenamestrrpos($filename'.') + 1);
                
    $filesize=$_FILES['attachment']['size'];
                
    $max_bytes=$max_file_size*1024;
                
                
    //Check if the file type uploaded is a valid file type. 
                
    if (!in_array($ext$allowtypes)) {
                    
    $errors[]="Invalid extension for your file: [b]".$filename."[/b]";
                    
            
    // check the size of each file
            
    } elseif($filesize $max_bytes) {
                    
    $errors[]= "Your file: [b]".$filename."[/b] is to big. Max file size is ".$max_file_size."kb.";
                }
                
        } 
    // if !empty FILES

        
    if (empty($errors)) { //If everything is OK
            
            // send an email
            // Obtain file upload vars
            
    $fileatt      $_FILES['attachment']['tmp_name'];
            
    $fileatt_type $_FILES['attachment']['type'];
            
    $fileatt_name $_FILES['attachment']['name'];
            
            
    // Headers
            
    $headers "From: $emailfrom";

            if (
    is_uploaded_file($fileatt)) {
              
    // Read the file to be attached ('rb' = read binary)
              
    $file fopen($fileatt,'rb');
              
    $data fread($file,filesize($fileatt));
              
    fclose($file);

              
    // create a boundary string. It must be unique
              
    $semi_rand md5(time());
              
    $mime_boundary "==Multipart_Boundary_x{$semi_rand}x";

              
    // Add the headers for a file attachment
              
    $headers .= "\nMIME-Version: 1.0\n" .
                          
    "Content-Type: multipart/mixed;\n" .
                          
    " boundary=\"{$mime_boundary}\"";

              
    // Add a multipart boundary above the plain message
              
    $message ="This is a multi-part message in MIME format.\n\n";
              
    $message.="--{$mime_boundary}\n";
              
    $message.="Content-Type: text/plain; charset=\"iso-8859-1\"\n";
              
    $message.="Content-Transfer-Encoding: 7bit\n\n";
              
    $message.="From: ".$namefrom."\n";
              
    $message.="Company: ".$company."\n";
              
    $message.="Phone: ".$phone."\n";
              
    $message.="Comments: ".$comments."\n\n";
              
              
    // Base64 encode the file data
              
    $data chunk_split(base64_encode($data));

              
    // Add file attachment to the message
              
    $message .= "--{$mime_boundary}\n" .
                          
    "Content-Type: {$fileatt_type};\n" .
                          
    " name=\"{$fileatt_name}\"\n" .
                          
    //"Content-Disposition: attachment;\n" .
                          //" filename=\"{$fileatt_name}\"\n" .
                          
    "Content-Transfer-Encoding: base64\n\n" .
                          
    $data "\n\n" .
                          
    "--{$mime_boundary}--\n";
            }
            
            
            
    // Send the completed message
            
    if(!mail($to,$subject,$message,$headers)) {
                exit(
    "Mail could not be sent. Sorry! An error has occurred, please report this to the website administrator.\n");
            } else {
                echo 
    '<div id="formfeedback"><h3>Thank You!</h3>

    '
    $thanksmessage .'</p></div>';
                
    print_form();
            } 
    // end of if !mail
            
        
    } else { //report the errors
            
    echo '<div id="formfeedback"><h3>Error!</h3>

    The following error(s) has occurred:
    '
    ;
            foreach (
    $errors as $msg) { //prints each error
                    
    echo " - $msg
    \n"
    ;
                } 
    // end of foreach
            
    echo '</p>

    Please try again</p></div>'
    ;
            
    print_form();
        } 
    //end of if(empty($errors))

    // end of process_form()
    ?>
    e questa è l'index:

    Codice PHP:
    <?php require_once('fns.php'); ?>

        <div id="uploadform">
        <?php
        
    // contact form
        
    if (isset($_POST['submitted']) && ('true' == $_POST['submitted'])) { 
            
    // checks if the form is submitted and then processes it
            
    process_form(); 
        } else { 
            
    // else prints the form
            
    print_form(); 
        }
        
        
    ?>
        </div>

  2. #2
    Provato ad utilizzare la classe PHPMailer? Ti risolverebbe un pò di problemi

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Ciao Samleo, grazie mille per la risposta.

    Vorrei provare ad utilizzare PHPmailer, ma non ho capito se è sufficiente aggiungere queste due righe:

    Codice PHP:
    require "class.phpmailer.php";
    $messaggio = new PHPmailer(); 
    o dovrei fare altro per implementare la classe nel mio script.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Novità...

    Adesso il form funziona benissimo solo se inserisco un allegato. Se invio senza allegato, la mail arriva vuota...

    Ci deve essere qualcosa di sbagliato nel codice, ma io non so proprio dove mettere le mani.

    Aiuto?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Scusate per questo terzo messaggio consecutivo ma ho superato la soglia dei 60 minuti e non ho potuto editare il post precedente.

    Volevo aggiornare la situazione, dicendo che sono riuscito a risolvere il problema in un modo un pò rude...

    Dopo:

    Codice PHP:
           if (is_uploaded_file($fileatt)) {
              
    // Read the file to be attached ('rb' = read binary)
              
    $file fopen($fileatt,'rb');
              
    $data fread($file,filesize($fileatt));
              
    fclose($file);

              
    // create a boundary string. It must be unique
              
    $semi_rand md5(time());
              
    $mime_boundary "==Multipart_Boundary_x{$semi_rand}x";

              
    // Add the headers for a file attachment
              
    $headers .= "\nMIME-Version: 1.0\n" .
                          
    "Content-Type: multipart/mixed;\n" .
                          
    " boundary=\"{$mime_boundary}\"";

              
    // Add a multipart boundary above the plain message
              
    $message ="This is a multi-part message in MIME format.\n\n";
              
    $message.="--{$mime_boundary}\n";
              
    $message.="Content-Type: text/plain; charset=\"iso-8859-1\"\n";
              
    $message.="Content-Transfer-Encoding: 7bit\n\n";
              
    $message.="From: ".$namefrom."\n";
              
    $message.="Company: ".$company."\n";
              
    $message.="Phone: ".$phone."\n";
              
    $message.="Comments: ".$comments."\n\n";
              
              
    // Base64 encode the file data
              
    $data chunk_split(base64_encode($data));

              
    // Add file attachment to the message
              
    $message .= "--{$mime_boundary}\n" .
                          
    "Content-Type: {$fileatt_type};\n" .
                          
    " name=\"{$fileatt_name}\"\n" .
                          
    //"Content-Disposition: attachment;\n" .
                          //" filename=\"{$fileatt_name}\"\n" .
                          
    "Content-Transfer-Encoding: base64\n\n" .
                          
    $data "\n\n" .
                          
    "--{$mime_boundary}--\n";
            } 
    Ho aggiunto:

    Codice PHP:
            else        
        {        
              
    $message.="From: ".$namefrom."\n";
              
    $message.="Company: ".$company."\n";
              
    $message.="Phone: ".$phone."\n";
              
    $message.="Comments: ".$comments."\n\n"
        } 
    In pratica ho dichiarato quali campi inviare nel caso non venga uppato nessun allegato... Sono sicuro che questa è una soluzione bruttina, ma non sapevo più che pesci pigliare e ho lavorato un pò di logica...

    Se avete una soluzione migliore e più "pulita" sarei felice di leggervi

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.