Ciao,
ho questo form per l'inserimento dell'oggetto, del messaggio e la selezione del file da allegare:
<form action="sendmail.php" enctype="multipart/form-data" method="POST">
Oggetto:<input type="text" name="oggetto" size="40">
Allegato:<input type="file" name="allegato" size="40">
Messaggio:<textarea name="messaggio" rows="15" cols="50"></textarea>
<input type="submit" value="Invia la mail">
</form>
Questo invece è il file sendmail.php:
Codice PHP:
<?
$contatore = 0;
$textfile = fopen("db/iscritti.txt", "r");
while ( $rigafile = fgets($textfile,1024)) {
$contatore = $contatore + 1;
$campiriga = explode("|", $rigafile);
$destinatario = $campiriga[2];
// Recupero il valore dei campi del form
$mittente="ciccio@ciccio.it";
$oggetto = stripslashes($_POST['oggetto']);
$messaggio = $_POST['messaggio'];
$mess = stripslashes($messaggio);
$reply="ciccio@ciccio.it"; /*Inserire l'indirizzo email a cui verranno inviate le risposte all'email inviata*/
$bcc="panza@ciccio.it.it";
// Valorizzo le variabili relative all'allegato
$titolo = "allegato";/*Inserire il nome che si vuole dare all'allegato*/
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];
$filetype="application/pdf"; /*Inserire il formato MIME del file da allegare*/
// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mittente;
$msg = "";
$intestazioni = "From: $mittente\nBCC: $bcc;\nReply-To: $reply\nX-Mailer: Sismail Web Email Interface\nMIME-version: 1.0\nContent-type: multipart/mixed;\n boundary=\"Message-Boundary\"\nContent-transfer-encoding: 7BIT\nX-attachments: $titolo";
$body_top = "--Message-Boundary\n";
$body_top .= "Content-type: text/html; charset=iso-8859-1\n";
$body_top .= "Content-transfer-encoding: 7BIT\n";
$body_top .= "Content-description: Mail message body\n\n";
$msg_body = $body_top . $mess;
// 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,'r');
$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 .= $mess . "\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 = $mess;
}
// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
echo "Invio email a $destinatario
";
}else{
echo "
Errore!</p>";
}
}
fclose($textfile);
echo "
Invio di [b]$contatore[/b] email terminato con successo";
?>
Questo file un po' l'ho adattato alle mie esigenze perchè dovevo recuperare dei dati da un txt, e poi ho cambiato altre cose perchè così come l'ho trovato nella pillola sul forum non mi funzionava.
Cmq morale non funziona o meglio, le email le invia correttamente mentre per l'allegato ci sono problemi.
Ho controllato da un indirizzo di posta di un dominio aruba e lì tutto ok, anche se il nome del file che mi visualizza in basso all'email è text/plain (come si fa per far uscire il nome del file reale?), mentre controllando una casella tiscali esce fuori una cosa strana.
Mi dice, nell'elenco delle email, che ho un allegato ma quando apro l'email mi esce fuori questo:
prova
prova
prova
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAIQAAAAAAAAAA
EAAA/v///wAAAAD+////AAAAACAAAAD/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////8J
CBAAAAYFAKAZzQfJwAAABgMAAOEAAgCwBMEAAgAAAOIAAABcAH AABQAAQmlzaW8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE IAAgCwBGEBAgAAAMABAAA9AQYA
...etc
Cosa significa? E soprattutto che devo fare?
Inoltre mi piacerebbe mettere delle limitazioni all'invio del file si per le estensioni che per la dimensione. Non so perchè ma mi ignora $titolo.
Grazie anticipatamente a chi abbia voglia di aiutarmi,
ciao,
cicileu