Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Invio mail con allegato estratto da mysql

    Ciao a tutti
    Ho bisogno di aiuto per inviare una mai con allegato.
    L'utente deve poter inserire un file nel database e successivamente, a sua richiesta, deve poter inviarsi tale file nella sua casella di posta. Di consegenza devo poter estrarre il file e metterlo in allegato. Il db è mysql.
    Attualmente ho creato le seguenti pagine in php. Il primo carica i dati nel database:
    __________________________________________________ ____

    <?php
    include "config.inc.php";
    // se è stato inviato il file...
    if(isset($_POST['invia']))
    {
    // se ci sono stati problemi nell'upload del file
    if(!isset($_FILES['file_inviato']) OR $_FILES['file_inviato']['error'] != UPLOAD_ERR_OK)
    mostra_form("errore nell'invio del file. Riprova");

    // connessione e selezione del database
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_connect($db_host, $db_user, $db_password)
    or die('Connessione non riuscita: ' . mysql_error());

    if(!mysql_select_db($db_name,$db))
    die('Selezione database fallita!');

    // recupero alcune informazioni sul file inviato
    $nome_file_temporaneo = $_FILES['file_inviato']['tmp_name'];
    $nome_file_vero = $_FILES['file_inviato']['name'];
    $tipo_file = $_FILES['file_inviato']['type'];
    //$dimensione_file = $_FILES['file_inviato']['size'];

    // leggo il contenuto del file
    $dati_file = $nome_file_temporaneo;

    // preparo il contenuto del file per la query
    $dati_file = addslashes($dati_file);

    // query per inserire il file nel DB
    $query = "INSERT INTO consegne SET
    nome_file = '$nome_file_vero',
    tipo_file = '$tipo_file',
    dati_file = '$dati_file'";

    mysql_query($query)
    OR die('Query non valida: ' . mysql_error());

    // mostro nuovamente il form ed un messaggio di successo
    mostra_form("Memorizzazione del file $nome_file_vero nel database eseguita correttamente.");
    }
    else
    {
    mostra_form();
    }

    /**
    * Mostra il form per l'upload del file
    *
    */
    function mostra_form($messaggio = '')
    {
    ?><head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Carica file nel database</title>
    </head>





    <?php echo $messaggio?>
    Seleziona un file da memorizzare nel database:

    </p>
    <form name="form1" enctype="multipart/form-data" method="post" action="">



    <input type="file" name="file_inviato">


    </p>



    <input type="submit" name="invia" value="Invia file">


    </p>
    </form>


    <?php
    exit();
    }
    ?>
    __________________________________________________ _________

    la seconda pagina visualizza il contenuto del database e permette, dopo aver cliccato sul link, di inviare la mail

    __________________________________________________ _________


    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Carica file nel database</title>
    </head>



    Clicca su uno dei seguenti file



    </p>
    <?php

    include "config.inc.php";
    // connessione e selezione del database
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_connect($db_host, $db_user, $db_password)
    or die('Connessione non riuscita: ' . mysql_error());

    if(!mysql_select_db($db_name,$db))
    die('Selezione database fallita!');

    // query per ottenere l'elenco dei files nel DB
    $query = "SELECT * FROM consegne";

    $risultato = mysql_query($query)
    or die('Query non valida: ' . mysql_error());

    // se ci sono files nel DB
    if(mysql_numrows($risultato))
    {
    // estrazione dei risultati e stampa dei links ai files
    while ($tmp = mysql_fetch_array($risultato))
    {
    echo "

    <a href=\"mostra.php?id=$tmp[id]\">$tmp[nome_file]</a></p>\n";
    }
    }
    else
    {
    echo '

    Nessun file presente nel database</p>';
    }
    ?>
    __________________________________________________ __
    a seguire il mostra.php ( dove sicuamente c'è l'errore! )
    __________________________________________________ __

    <?php

    include "config.inc.php";
    // connessione e selezione del database
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_connect($db_host, $db_user, $db_password)
    or die('Connessione non riuscita: ' . mysql_error());

    if(!mysql_select_db($db_name,$db))
    die('Selezione database fallita!');

    // query per recuperare il file
    $query = 'SELECT * FROM consegne WHERE id = '.$_GET['id'];
    $risultato = mysql_query($query) or die('Query non valida: ' . mysql_error());
    $tmp = mysql_fetch_array($risultato);


    // RENDIAMO LO SCRIPT COMPATIBILE CON LE VERSIONI DI PHP < 4.1.0
    if(!isset($_POST)) $_POST = $HTTP_POST_VARS;
    if(!isset($_FILES)) $_FILES = $HTTP_POST_FILES;

    // RIPULIAMO I VARI CAMPI DEL MODULO
    $Destinatario = "prova@prova.it";
    $Soggetto = "oggetto $tmp[oraconsegna]";
    $Contenuto = $tmp['dati'];

    // ASSEGNIAMO A VARIABILI PIU' LEGGIBILI, LE PROPRIETA' DELL'ALLEGATO
    // Valorizzo le variabili relative all'allegato
    $allegato = $tmp['dati_file'];
    $allegato_type = $tmp['tipo_file'];
    $allegato_name = $tmp['nome_file'];



    // Creo 2 variabili che riempirò più avanti...
    $headers = "From: " . 'logbook';
    $msg = "";


    // 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";

    // Aggiungo le intestazioni necessarie per l'allegato
    $headers .= "\nMIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed;\n";
    $headers .= " boundary=\"{$mime_boundary}\"";

    // Definisco il tipo di messaggio (MIME/multi-part)
    $msg .= "This is a multi-part message in MIME format.\n\n";

    // Metto il separatore
    $msg .= "--{$mime_boundary}\n";

    // Questa è la parte "testuale" del messaggio
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    $msg .= "Content-Transfer-Encoding: 7bit\n\n";
    $msg .= $messaggio . "\n\n";

    // Metto il separatore
    $msg .= "--{$mime_boundary}\n";

    // Aggiungo l'allegato al messaggio
    $msg .= "Content-Disposition: attachment;\n";
    $msg .= " filename=\"{$allegato_name}\"\n";
    $msg .= "Content-Transfer-Encoding: base64\n\n";
    $msg .= $data . "\n\n";

    // chiudo con il separatore
    $msg .= "--{$mime_boundary}--\n";

    echo $msg;
    echo $headers;

    // INVIO DELLA MAIL
    if(@mail($Destinatario, $Soggetto, $msg, $headers)) { // SE L'INVIO È ANDATO A BUON FINE...

    echo "La mail è stata inoltrata con successo.";

    } else {// ALTRIMENTI...

    echo "Si sono verificati dei problemi nell'invio della mail.";

    }



    // invio una intestazione contenente il tipo MIME
    //header('Content-Type: '.$tmp['tipo_file']);

    // invio il contenuto del file
    //echo $tmp['dati_file'];
    ?>
    __________________________________________________ ____

    Ovviamente la mail viene inviata e il file in allegato è presente solo che non coincide con la dimensine ed inoltre da errore quando cerco di aprire il file

    A seguire gli errori che presenta mostra.php

    Warning: fopen(C:\PROGRA~1\EASYPH~1\\tmp\php243.tmp): failed to open stream: No such file or directory in c:\programmi\easyphp1-8\www\lab\mostra.php on line 39

    Warning: filesize(): Stat failed for C:\PROGRA~1\EASYPH~1\\tmp\php243.tmp (errno=2 - No such file or directory) in c:\programmi\easyphp1-8\www\lab\mostra.php on line 40

    Warning: fread(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\lab\mostra.php on line 40

    Warning: fclose(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\lab\mostra.php on line 41

    Notice: Undefined variable: messaggio in c:\programmi\easyphp1-8\www\lab\mostra.php on line 66
    La mail è stata inoltrata con successo


    Spero di essere stato chiaro e spero che qualcuno riesca ad aiutarmi.

    grazie

  2. #2
    Forse non mi sono espresso correttamente oppure è troppo complicata la mia richiesta. Sono disposto anche a trovare soluzioni alternative.

    grazie

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.