Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    [PHP5] <Problema invio e-mail> Formato testo e html (Allegati non funzionano)

    Scusate ho questo script php, invia email con e senza allegati, e c'è l'opzione se formato html o testo.

    Quindi si può mandare nei seguenti modi a scelta:

    - html senza allegato
    - html con allegato
    - testo senza allegato
    - testo con allegato

    funziona ma ha qualche errore:

    per esempio non manda gli allegati..

    sapete dirmi al volo perchè non funziona ?

    grazie anticipatamente.

    codice:
        <?php
            function check_email($email) {
            // Controllo le lunghezze e la presenza di una unica "@"
                if (!ereg("[^@]{1,64}@[^@]{1,255}", $email)) {
                    // Email non valida a causa di un numero errato di caratteri
                        return false;
                    }
                    // Divido l'indirizzo in parti per semplicità 
                $email_array = explode("@", $email);
                $local_array = explode(".", $email_array[0]);
                for ($i = 0; $i < sizeof($local_array); $i++) {
                        if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
                                return false;
                            }
                    }
                if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // IP
                        $domain_array = explode(".", $email_array[1]);
                        if (sizeof($domain_array) < 2) {
                                return false;
                            }
                        for ($i = 0; $i < sizeof($domain_array); $i++) {
                                if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
                                        return false;
                                    }
                            }
                    }
                    
                    // Check if mail exchange exists.
                    if ( ! getmxrr ($email_array[1], $mxrecords) ) return false;
                return true;
            }
            
            
            session_start();
            
            if ($_POST['invia'] == 'preview')
            {
            
                $email = $_POST['email'];
                $from = $_POST['from'];
                $subject = stripslashes($_POST['subject']);
                $testo = stripslashes($_POST['testo']);
                $formato = $_POST['formato'];
            
                $allegato = $_FILES['allegato']['tmp_name'];
                $allegato_type = $_FILES['allegato']['type'];
                $allegato_name = $_FILES['allegato']['name'];
                $_SESSION["allegato"] = $allegato;
                $_SESSION["allegato_type"] = $allegato_type;
                $_SESSION["allegato_name"] = $allegato_name;
            
                    if ($formato == 'text') { $testo_vis = htmlentities($testo, ENT_NOQUOTES); }
                            else { $testo_vis = $testo; $testo = htmlentities($testo, ENT_QUOTES); }
                $testo_vis = ereg_replace("\n", "
    ", $testo_vis);
            
                if (check_email($from) && check_email($email)) 
                    {                
                        print "
                            
    
    
                            Stai per spedire una e-mail a $email
    
                            Mittente: $from
    
                            Subject: $subject
    
                            Testo: $testo_vis
    
    </p>";
                        if (is_uploaded_file($allegato)) 
                            {
                                print   "
    
    Invio allegato: $allegato_name</p>";
                            }
                            else 
                            {
                                print "
    
    Nessun allegato</p>";
                            }
                        print "
                            <form action=\"invio_mail.php\" method=\"post\" enctype=\"multipart/form-data\">
                            
    
    <input type=\"hidden\" name=\"email\" value=\"$email\" />
                            <input type=\"hidden\" name=\"from\" value=\"$from\" />
                            <input type=\"hidden\" name=\"subject\" value=\"$subject\" />
                            <input type=\"hidden\" name=\"testo\" value=\"$testo\" />
                            <input type=\"hidden\" name=\"formato\" value=\"$formato\" />
                            <input type=\"hidden\" name=\"allegato\" value=\"$allegato\" />
                            <input type=\"submit\" name=\"invia\" value=\"invia\" /></p>
                            <input type=\"submit\" name=\"back\" value=\"back\" /></p>
                            </form>";
                    }
                    else {
                        print "
    
    Non è possibile inviare la mail con mittente $from.</p>
                            
    
    Possibili problemi:</p>
                            <ul>[*]Le mail inserite non sono valide[*]Il dominio delle mail non sono raggiungibili[/list]";
                    }
            }
            elseif ($_POST['back'] == 'back')
            {
                header("location: contattaci.php");
            }
            elseif ($_POST['invia'] == 'invia') 
            {                                   
                $email = $_POST['email'];
                $from = $_POST['from'];
                $subject = stripslashes($_POST['subject']);
                $mail_body = stripslashes($_POST['testo']);
                $formato = $_POST['formato'];
            
                $mail_headers = "From: $from\n";
                $mail_headers .= "Reply-To: $from\n";
                $mail_headers .= "X-Priority: 1 (Highest)\n";
                $mail_headers .= "MIME-Version: 1.0\r\n";
            
                $allegato      = $_SESSION["allegato"];
                $allegato_name = $_SESSION["allegato_name"];
            
                if ($formato == 'html' && $allegato!="")
                    {
                        $mail_headers .= "Content-Type: multipart/mixed; charset=iso-8859-1\r\n";
                        $mail_headers .= " boundary=\"{$mime_boundary}\"";
                        $mail_body = html_entity_decode($mail_body, ENT_QUOTES);
                    
                        if (is_uploaded_file($allegato)) 
                            {
                            // Apro e leggo il file allegato
                                $file = fopen($allegato,'rb');
                                $data = fread($file, filesize($allegato));
                                fclose($file);
                                    
                                    // Adatto il file al formato MIME base64 usando base64_encode
                                $data = chunk_split(base64_encode($data));
                                    
                                    // Genero il "separatore"
                                    // Serve per dividere, appunto, le varie parti del messaggio.
                                    // Nel nostro caso separerà la parte testuale dall'allegato
                                $semi_rand = md5(time());
                                $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                                    
                                    // Metto il separatore
                                $mail_body .= "--{$mime_boundary}\n";
                                    
                                    // Aggiungo l'allegato al messaggio
                                $mail_body .= "Content-Disposition: attachment;\n";
                            
                                $mail_body .= " filename=\"{$allegato_name}\"\n";
                            
                                $mail_body .= "Content-Transfer-Encoding: base64\n\n";
                                $mail_body .= $data . "\n\n";
                                    
                                    // chiudo con il separatore
                                $mail_body .= "--{$mime_boundary}--\n";
                            }
                    }
                    elseif ($formato == 'html' && $allegato=="")
                    {
                        $mail_headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
                        $mail_body = html_entity_decode($mail_body, ENT_QUOTES);
                    }
                    elseif($formato == 'testo' && $allegato!="")
                    {
                        $mail_headers .= "Content-Type: multipart/mixed;\n";
                        $mail_headers .= " boundary=\"{$boundary}\"";
                    
                        if (is_uploaded_file($allegato)) 
                            {
                            
                            // Apro e leggo il file allegato
                                $file = fopen($allegato,'rb');
                                $data = fread($file, filesize($allegato));
                                fclose($file);
                                    
                                    // Adatto il file al formato MIME base64 usando base64_encode
                                $data = chunk_split(base64_encode($data));
                                    
                                    // Genero il "separatore"
                                    // Serve per dividere, appunto, le varie parti del messaggio.
                                    // Nel nostro caso separerà la parte testuale dall'allegato
                                $semi_rand = md5(time());
                                $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                                    // Metto il separatore
                                $mail_body .= "--{$mime_boundary}\n";
                                    
                                    // Aggiungo l'allegato al messaggio
                                $mail_body .= "Content-Disposition: attachment;\n";
                                $mail_body .= " filename=\"{$allegato_name}\"\n";
                                $mail_body .= "Content-Transfer-Encoding: base64\n\n";
                                $mail_body .= $data . "\n\n";
                                    
                                    // chiudo con il separatore
                                $mail_body .= "--{$mime_boundary}--\n";
                            }
                    }
            
                $mail_headers .= "X-Mailer: PHP/" . phpversion();
            
                $ris = mail($email, $subject, $mail_body, $mail_headers);
                if ($ris)
                    {
                        print "<h2>La mail destinata a $email è stata accettata dal sistema per la spedizione</h2>";
                    }
                    else 
                    {
                        print "<h2>La mail destinata a $email NON è stata accettata dal sistema per la spedizione</h2>";
                        print "
    </br/>
    
    <a href=\"contattaci.php\">Riprova</a></p>";
                    }
            }               
            unset($_SESSION["allegato"]);
            unset($_SESSION["allegato_type"]);
            unset($_SESSION["allegato_name"]);
            session_destroy();
            ?>
    Tony

  2. #2
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: [PHP5] <Problema invio e-mail> Formato testo e html (Allegati non funzionano)

    Originariamente inviato da tony83
    Scusate ho questo script php, invia email con e senza allegati, e c'è l'opzione se formato html o testo.

    Quindi si può mandare nei seguenti modi a scelta:

    - html senza allegato
    - html con allegato
    - testo senza allegato
    - testo con allegato

    funziona ma ha qualche errore:

    per esempio non manda gli allegati..

    sapete dirmi al volo perchè non funziona ?

    grazie anticipatamente.

    codice:
        <?php
            function check_email($email) {
            // Controllo le lunghezze e la presenza di una unica "@"
                if (!ereg("[^@]{1,64}@[^@]{1,255}", $email)) {
                    // Email non valida a causa di un numero errato di caratteri
                        return false;
                    }
                    // Divido l'indirizzo in parti per semplicità 
                $email_array = explode("@", $email);
                $local_array = explode(".", $email_array[0]);
                for ($i = 0; $i < sizeof($local_array); $i++) {
                        if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
                                return false;
                            }
                    }
                if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // IP
                        $domain_array = explode(".", $email_array[1]);
                        if (sizeof($domain_array) < 2) {
                                return false;
                            }
                        for ($i = 0; $i < sizeof($domain_array); $i++) {
                                if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
                                        return false;
                                    }
                            }
                    }
                    
                    // Check if mail exchange exists.
                    if ( ! getmxrr ($email_array[1], $mxrecords) ) return false;
                return true;
            }
            
            
            session_start();
            
            if ($_POST['invia'] == 'preview')
            {
            
                $email = $_POST['email'];
                $from = $_POST['from'];
                $subject = stripslashes($_POST['subject']);
                $testo = stripslashes($_POST['testo']);
                $formato = $_POST['formato'];
            
                $allegato = $_FILES['allegato']['tmp_name'];
                $allegato_type = $_FILES['allegato']['type'];
                $allegato_name = $_FILES['allegato']['name'];
                $_SESSION["allegato"] = $allegato;
                $_SESSION["allegato_type"] = $allegato_type;
                $_SESSION["allegato_name"] = $allegato_name;
            
                    if ($formato == 'text') { $testo_vis = htmlentities($testo, ENT_NOQUOTES); }
                            else { $testo_vis = $testo; $testo = htmlentities($testo, ENT_QUOTES); }
                $testo_vis = ereg_replace("\n", "
    ", $testo_vis);
            
                if (check_email($from) && check_email($email)) 
                    {                
                        print "
                            
    
    
                            Stai per spedire una e-mail a $email
    
                            Mittente: $from
    
                            Subject: $subject
    
                            Testo: $testo_vis
    
    </p>";
                        if (is_uploaded_file($allegato)) 
                            {
                                print   "
    
    Invio allegato: $allegato_name</p>";
                            }
                            else 
                            {
                                print "
    
    Nessun allegato</p>";
                            }
                        print "
                            <form action=\"invio_mail.php\" method=\"post\" enctype=\"multipart/form-data\">
                            
    
    <input type=\"hidden\" name=\"email\" value=\"$email\" />
                            <input type=\"hidden\" name=\"from\" value=\"$from\" />
                            <input type=\"hidden\" name=\"subject\" value=\"$subject\" />
                            <input type=\"hidden\" name=\"testo\" value=\"$testo\" />
                            <input type=\"hidden\" name=\"formato\" value=\"$formato\" />
                            <input type=\"hidden\" name=\"allegato\" value=\"$allegato\" />
                            <input type=\"submit\" name=\"invia\" value=\"invia\" /></p>
                            <input type=\"submit\" name=\"back\" value=\"back\" /></p>
                            </form>";
                    }
                    else {
                        print "
    
    Non è possibile inviare la mail con mittente $from.</p>
                            
    
    Possibili problemi:</p>
                            <ul>[*]Le mail inserite non sono valide[*]Il dominio delle mail non sono raggiungibili[/list]";
                    }
            }
            elseif ($_POST['back'] == 'back')
            {
                header("location: contattaci.php");
            }
            elseif ($_POST['invia'] == 'invia') 
            {                                   
                $email = $_POST['email'];
                $from = $_POST['from'];
                $subject = stripslashes($_POST['subject']);
                $mail_body = stripslashes($_POST['testo']);
                $formato = $_POST['formato'];
            
                $mail_headers = "From: $from\n";
                $mail_headers .= "Reply-To: $from\n";
                $mail_headers .= "X-Priority: 1 (Highest)\n";
                $mail_headers .= "MIME-Version: 1.0\r\n";
            
                $allegato      = $_SESSION["allegato"];
                $allegato_name = $_SESSION["allegato_name"];
            
                if ($formato == 'html' && $allegato!="")
                    {
                        $mail_headers .= "Content-Type: multipart/mixed; charset=iso-8859-1\r\n";
                        $mail_headers .= " boundary=\"{$mime_boundary}\"";
                        $mail_body = html_entity_decode($mail_body, ENT_QUOTES);
                    
                        if (is_uploaded_file($allegato)) 
                            {
                            // Apro e leggo il file allegato
                                $file = fopen($allegato,'rb');
                                $data = fread($file, filesize($allegato));
                                fclose($file);
                                    
                                    // Adatto il file al formato MIME base64 usando base64_encode
                                $data = chunk_split(base64_encode($data));
                                    
                                    // Genero il "separatore"
                                    // Serve per dividere, appunto, le varie parti del messaggio.
                                    // Nel nostro caso separerà la parte testuale dall'allegato
                                $semi_rand = md5(time());
                                $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                                    
                                    // Metto il separatore
                                $mail_body .= "--{$mime_boundary}\n";
                                    
                                    // Aggiungo l'allegato al messaggio
                                $mail_body .= "Content-Disposition: attachment;\n";
                            
                                $mail_body .= " filename=\"{$allegato_name}\"\n";
                            
                                $mail_body .= "Content-Transfer-Encoding: base64\n\n";
                                $mail_body .= $data . "\n\n";
                                    
                                    // chiudo con il separatore
                                $mail_body .= "--{$mime_boundary}--\n";
                            }
                    }
                    elseif ($formato == 'html' && $allegato=="")
                    {
                        $mail_headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
                        $mail_body = html_entity_decode($mail_body, ENT_QUOTES);
                    }
                    elseif($formato == 'testo' && $allegato!="")
                    {
                        $mail_headers .= "Content-Type: multipart/mixed;\n";
                        $mail_headers .= " boundary=\"{$boundary}\"";
                    
                        if (is_uploaded_file($allegato)) 
                            {
                            
                            // Apro e leggo il file allegato
                                $file = fopen($allegato,'rb');
                                $data = fread($file, filesize($allegato));
                                fclose($file);
                                    
                                    // Adatto il file al formato MIME base64 usando base64_encode
                                $data = chunk_split(base64_encode($data));
                                    
                                    // Genero il "separatore"
                                    // Serve per dividere, appunto, le varie parti del messaggio.
                                    // Nel nostro caso separerà la parte testuale dall'allegato
                                $semi_rand = md5(time());
                                $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                                    // Metto il separatore
                                $mail_body .= "--{$mime_boundary}\n";
                                    
                                    // Aggiungo l'allegato al messaggio
                                $mail_body .= "Content-Disposition: attachment;\n";
                                $mail_body .= " filename=\"{$allegato_name}\"\n";
                                $mail_body .= "Content-Transfer-Encoding: base64\n\n";
                                $mail_body .= $data . "\n\n";
                                    
                                    // chiudo con il separatore
                                $mail_body .= "--{$mime_boundary}--\n";
                            }
                    }
            
                $mail_headers .= "X-Mailer: PHP/" . phpversion();
            
                $ris = mail($email, $subject, $mail_body, $mail_headers);
                if ($ris)
                    {
                        print "<h2>La mail destinata a $email è stata accettata dal sistema per la spedizione</h2>";
                    }
                    else 
                    {
                        print "<h2>La mail destinata a $email NON è stata accettata dal sistema per la spedizione</h2>";
                        print "
    </br/>
    
    <a href=\"contattaci.php\">Riprova</a></p>";
                    }
            }               
            unset($_SESSION["allegato"]);
            unset($_SESSION["allegato_type"]);
            unset($_SESSION["allegato_name"]);
            session_destroy();
            ?>
    Sbaglio ad utilizzare le variabili di sessioni ?
    Tony

  3. #3
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    up
    Tony

  4. #4
    Mi aggancio al tuo post perchè devo arrivare al tuo stesso obiettivo.
    Innanzi tutto ti consiglio cmq di spezzare questo mega blocco di codice in diversi file e funzioni, perchè così è ingestibile. Una volta isolate le funzioni puoi verificarle una ad una.

    Valerio

  5. #5
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    OK.. con la speranza che qualcuno sia in grado di aiutarci..

    Il mio problema è qui:

    $allegato = $_FILES['allegato']['tmp_name'];
    $allegato_type = $_FILES['allegato']['type'];
    $allegato_name = $_FILES['allegato']['name'];
    $_SESSION["allegato"] = $allegato;
    $_SESSION["allegato_type"] = $allegato_type;
    $_SESSION["allegato_name"] = $allegato_name;

    lo devo vede qui quando ricarico la pagina:

    if ($_POST['invia'] == 'preview')
    {

    $email = $_POST['email'];
    $from = $_POST['from'];
    $subject = stripslashes($_POST['subject']);
    $testo = stripslashes($_POST['testo']);
    $formato = $_POST['formato'];

    $allegato = $_FILES['allegato']['tmp_name'];
    $allegato_type = $_FILES['allegato']['type'];
    $allegato_name = $_FILES['allegato']['name'];
    $_SESSION["allegato"] = $allegato;
    $_SESSION["allegato_type"] = $allegato_type;
    $_SESSION["allegato_name"] = $allegato_name;

    Come faccio a passa la variabile $allegato al ricarico della pagina ?
    Tony

  6. #6
    Io la soluzione penso di averla trovata: PHPMailer

    Per quanto riguarda gli upload dei files, io li salvo in una cartella temporanea e li vado a riprendere quando sto per spedire la email.

    Per ora ho inviato messaggi html con immagini, domani provo gli allegati.

    Valerio

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.