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.