- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problemi con script php per mail con allegati!
-
Problemi con script php per mail con allegati!
Salve! Ho un problema abbastanza importante che viene riproposto spesso anche in altri forum. Ho trovato uno script con cui poter inviare un file o una foto che risulta sulla email come allegato. Il problema è che foto grandi arrivano sulla email, mentre quelle piccole no!
Inoltre ho provato con libero, yahoo, msn ma non dipende da loro... credo ci sia un problema sullo script che risulta poco affidabile.La pagina html è questa:
[html]<table width="950" border="0">
<tr><td>
<table border="0">
<tr>
<form action="send.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="destinatario" value="[email protected]">
<td><font face="verdana" size="2">Inserisci il tuo culo:</font></td>
<td><input type="file" name="allegato" size="20" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Invia"/></td>
</tr>
</table>[/html]
Qui di seguito la pagina php:[php]<?php
// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mittente;
$msg = "";// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
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";// 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";
}
else
{
$msg = $messaggio;
}// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
echo "<p>Foto inviata con successo!</p>";
}else{
echo "<p>Errore!</p>";
}
?>
[/php]Aiutatemi è piuttosto importante! Grazie
-
Ciao Gianlu90,
se si tratta di immagini piccole potresti valutare l'idea di inserirle direttamente nel corpo dell'email.Ciao
-
Ciao mirkoagrati. Il fatto è che non posso sapere la dimensione dell'immagine dato che si tratta di uno script da mettere su un sito in cui sono le persone ad inviare le foto.
Se qualcuno ha uno script migliore o comunque che non da problemi di nessun tipo me lo faccia avere!
Grazie ancora.
-
Ciao,
se ti può essere utile,
mi pare che dopo aver eseguito l'upload del file (qualunque tipo) si possa sapere la sua dimensione (in termini di quanti KB pesa).Ciao
-
Grazie, ma non credo mi serva a molto.
Deve essere uno script funzionale sempre, indipendentemente dalla grandezza del file.
In rete non riesco proprio a trovarlo e quello che ho sembra finora essere il migliore
-
Scusate il doppio post... ma è urgente e non so come modificare l'altro messaggio.
Comunque ho scoperto una cosa molto importante. Sul dominio di altervista lo script funziona correttamente, benissimo!
Mentre sul dominio ".it" si rileva il famoso problema che arrivano solo foto di dimensioni grandi!
Qualcuno saprebbe spigarmi il motivo?
Inoltre perchè quando invio la foto tramite il dominio su altervista, nel campo "Da" dell'email appare scritto Apache?