Salve a tutti, mi chiamo Raffaele e sono un nuovo iscritto.
Consulto spesso il vostro forum e lo trovo molto utile e solutivo.
Questa volta, però, non sono riuscito a trovare la soluzione al mio problema, pur avendo cercato diverse discussioni in merito su questo forum
Il mio problema è questo:
devo creare un form che permetta di inviare un'email testuale formattata in HTML e più allegati.
Di seguito il codice html ed il relativo php. Premetto che di PHP sono completamente a digiuno
Il form attualmente funziona inviando il testo nel corpo del messaggio ed un unico allegato.
Tutti gli altri allegati non vengono proprio presi in considerazione.
Estratto del form HTML
codice:
<form action="form-a-step.php" method="post" enctype="multipart/form-data" id="presentazioneistanza">
<label for="NomeC">Nome </label>
<input class="required" type="text" name="NomeC20" id="NomeC20" value="" />
<label for="CognomeC">Cognome </label>
<input class="required" type="text" name="CognomeC20" id="CognomeC20" value="" />
<label for="allegato">Seleziona il file</label>
<input type="file" name="allegato" id="allegato" value="" style="width:200px">
<div class="clear"></div>
<label for="allegato1">Seleziona il file</label>
<input type="file" name="allegato1" id="allegato1" value="" style="width:200px">
<div class="clear"></div>
...
estratto del php
Codice PHP:
<?php
//dati generali
$NomeC20 = stripslashes(stripslashes($_POST['NomeC20']));
$CognomeC20 = stripslashes(stripslashes($_POST['CognomeC20']));
// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];
$allegato1 = $_FILES['allegato1']['tmp_name'];
$allegato1_type = $_FILES['allegato1']['type'];
$allegato1_name = $_FILES['allegato1']['name'];
// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $Email;$msg = "";
// Processo di configurazione dell'email
// [Destinatario, Mittente, Oggetto e Messaggio ]
$mail_to = "giranapoli@giranapoli.it";
$mail_from = "$Email";
$mail_subject = "Nuovo Form a Step";
$mail_body = "
Richiesta informazioni Nuovo Form a Step</p>
Nome: $NomeC20</p>
Cognome: $CognomeC20</p>";
// 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/html; charset=ISO-8859-15\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
$msg .= $mail_body . "\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";
// Intestazioni HTML
$mail_in_html = "MIME-Version: 1.0\r\n";
$mail_in_html .= "Content-Type: text/html; charset=ISO-8859-15\n";
$mail_in_html .= "From: <$mail_from>";
// Processo di invio
if (mail($mail_to, $mail_subject, $msg, $headers))
{
header("Refresh: 2; URL=/provaform/demo.html");
print "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";
}
else if (is_uploaded_file($allegato1)){
// Apro e leggo il file allegato1
$file1 = fopen($allegato1,'rb');
$data1 = fread($file, filesize($allegato1));
fclose($file1);
// Adatto il file al formato MIME base64 usando base64_encode
$data1 = chunk_split(base64_encode($data1));
// 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/html; charset=ISO-8859-15\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
$msg .= $mail_body . "\n\n";
// Metto il separatore
$msg .= "--{$mime_boundary}\n";
// Aggiungo l'allegato al messaggio
$msg .= "Content-Disposition: attachment;\n";
$msg .= " filename=\"{$allegato1_name}\"\n";
$msg .= "Content-Transfer-Encoding: base64\n\n";
$msg .= $data . "\n\n";
// chiudo con il separatore
$msg .= "--{$mime_boundary}--\n";
// Intestazioni HTML
$mail_in_html = "MIME-Version: 1.0\r\n";
$mail_in_html .= "Content-Type: text/html; charset=ISO-8859-15\n";
$mail_in_html .= "From: <$mail_from>";
// Processo di invio
if (mail($mail_to, $mail_subject, $msg, $headers))
{
header("Refresh: 2; URL=/provaform/demo.html");
print "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";
}
{
header("Refresh: 1; URL=/provaform/demo.html");
print "Errore";
}
}
else{
// Intestazioni HTML
$mail_in_html = "MIME-Version: 1.0\r\n";
$mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
$mail_in_html .= "From: <$mail_from>";
// Processo di invio
// domando sostituito
if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
{
header("Refresh: 2; URL=/provaform/demo.html");
print "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";
}
else{
header("Refresh: 1; URL=/provaform/demo.html");
print "Errore";
}
}
?>
in parole povere il php funziona perfettamente con un unico allegato, quindi mi sono limitato a clonare il comando
Codice PHP:
if (is_uploaded_file($allegato1))
modificando il nome della variabile in <allegato1>
La cosa che non mi aspettavo è che non mi da nessun messaggio di errore e continua a funzionare con l'aggiunta di questa parte di codice... ovviamente senza inviare il secondo allegato.
Confido in un vostro aiuto,
Grazie