Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316

    phpmailer problema allegati

    ciao, sto cercando di inviare una mail con allegato (che verrà scelto dall'utente) ma non riesco a capire dove sbaglio. La mail viene inviata, l'allegato supera i controlli però alla ricezione non riesco ad aprirlo (come se fosse corrotto).

    Premetto che l'invio di allegati in sè funziona (e anche l'invio mail), il problema si verifica solo con gli allegati che vengono caricati dall'utente.

    questo è il mio form html

    codice:
    <form action ='mail2.php' method='POST' enctype="multipart/form-data">
        <table class='tab1'>
            <tr><td>Oggetto: </td>
                <td><input type='text' style='width:600px;height:30px; font-size:24px; 'name='subj'></td>
            </tr>
            <tr><td>Messaggio: </td>
                <td><textarea style='width:600px; height:200px; font-size:24px;' name='msg'></textarea></td>
            </tr>        
            <tr><td>Carica File</td>
                <td><input type="file" name="uploadfile" style='width:600px;height:30px;'></td>
            </tr>
    </table>
        <br/><input type='submit' value='Invia!' class='butt'></input>
    </form>
    e questo il php che controlla l'allegato e chiama una funzione invia_mail (che funziona, per cui riporto soltanto la creazione dell'allegato)

    codice:
    if ($_FILES['uploadfile']['error'] == 0){
        // upload ok
        // upload terminato, stampo alcune info sul file
        echo "Upload terminato con successo:<br>";
        echo "Nome file: ".$_FILES['uploadfile']['name']."<br>";
        echo "Dimensione file: ".$_FILES['uploadfile']['size']."<br>";
        echo "Tipo MIME file: ".$_FILES['uploadfile']['type'];
        }
        else{
        // controllo il tipo di errore
        if ($_FILES['uploadfile']['error'] == 2){
        // errore, file troppo grande (> 1MB)
        die("Errore, file troppo grande: il massimo consentito è 1MB");
        }
        else{
        // errore generico
        die("Errore, impossibile caricare il file");
        }
        }
        
    //se non scrivo queste 2 righe mi stampa una cosa tipo: Warning: base64 expects string, array given in phpmailer.php line 2285
    $filedata = file_get_contents($_FILES['uploadfile']['tmp_name']);
    $post_data = base64_encode($filedata);
    
    //crea allegato phpmailer
    $mail->AddStringAttachment($post_data, $_FILES['uploadfile']['name'], 'base64', 'application/pdf'); //ho provato con 'application/octet-stream' ma non cambia nulla

    grazie,
    L.

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Sai che non ho trovato uno straccio di documentazione riguardo AddStringAttachment? Ma guardando https://github.com/PHPMailer/PHPMail...iler.php#L2285 penso che il tuo problema sia che il contenuto del file viene passato a base64_encode due volte. Leva quel $post_data = base64_encode($filedata); e riprova.

  3. #3
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    addStringAttachment l'ho trovato negli esempi fella libreria fpdf che uso per creare alcuni pdf..
    a-ha! risolto! effettivamente non avevo provato a passare a invia_mail $filedata, ma solo $_FILE[uploadfile][tmp_name] e $post_data!

    grazie mille!!

    L.

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.