allegato via mail tramite form php

eleinad85

Nuovo Utente
2 Ago 2010
17
0
0
allora ho bisogno di aiuto. ho fatto un form in html con campo testo,chekbox ecc...queste risposte mi arrivano perfettamente per mail...ho dovuto inserire un campo file per far allegare gli utenti dei documenti e farmeli arrivare in allegato,mi potreste dire gentilmente un codice pulito da scrivere nello script in php? io ho cercato su internet ma nn riesco a farlo funzionare forse xkè mi va in conflitto con le mie variabili.

questo è il mio script.php

PHP:
<?php

$email = $_POST['mail'];


//
$stringa1 = "ATTENZIONE Tutti i campi sono obbligatori!";

//
$stringa2 = "l'indirizzo mail non è valido";

//
$stringa3 = "la checklist è stata inviata.grazie!";



// formato del messaggio
$msgformat = "La persona $nome $cognome ha compilato la seguente cechklist:\n\nnome checklist: $checklist\nstruttura: $struttura \nauditor: $auditor \nverifica del:$verifica \nmail: $email\nrisposte $d1_3 $d1_2 $d1_1 $d1_0 $d1_na \n$d2_3 $d2_2 $d2_1 $d2_0 $d2_na \n$d3_3 $d3_2 $d3_1 $d3_0 $d3_na \n$d4_3 $d4_2 $d4_1 $d4_0



//
$i=1;
while($i<=110)
{
if($_POST["note".$i]!='')
$msgformat.="Note".$i.":".$_POST["note".$i]."";
$i++;
}




// definisce i campi obbligatori (da personalizzare con quelli del proprio form)
if (( $nome == "" ) || ( $cognome == "" ) || ( $email == "" ))




// popup di errore sui campi obbligatori
{
echo "<script language=\"JavaScript\">\n";
echo "alert(\"$stringa1\");\n";
echo "java-script:history.go(-1);";
echo "</script>";
}

// controllo del formato della email
else if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
{

// invia la email a me
mail($receiverMail, $subject, $msgformat, "From: $email");


// nelle prossime righe definisco se voglio un semplice popup che avvisa l'utente che il messaggio è stato inviato (OPZIONE1) e che lo fa ritornare automaticamente alla pagina dove ha compilato il form

// OPPURE

// se ridirezionarlo verso una pagina web specifica (OPZIONE2)


// OPZIONE1:
// popup di messaggio inviato e ritorno alla pagina precedente
// decommentare $stringa3
// commentare tutto se si usa OPZIONE2 (per commentare usare /* all'inizio e */ alla fine delle righe da commentare)

echo "<script language=\"JavaScript\">\n";
echo "alert(\"$stringa3\");\n";
echo "java-script:history.go(-1);";
echo "</script>";
}

// OPZIONE2:
// popup di messaggio inviato e ridirezionamento ad una pagina web
// decommentare $redirect
// commentare tutto se si usa OPZIONE1 (per commentare usare /* all'inizio e */ alla fine delle righe da commentare)

/* echo "<script language=\"JavaScript\">\n";
echo "window.location.href=(\"$redirect\");\n";
echo "</script>";
}
*/

// popup di errore se fallisce il controllo formato email
else
{
echo "<script language=\"JavaScript\">\n";
echo "alert(\"$stringa2\");\n";
echo "java-script:history.go(-1);";
echo "</script>";
}
?>
 
Ultima modifica di un moderatore:
purtroppo non ho tempo ormai ,sono tantissime domande...mi serve solo un codice semplice da inserire per poter ricevere degli allegati,senza controllo ecc...basta ke mi arrivano i file,mi potresti fare un favore a dirmi il codice,mi serve per lavoro aiutami per favore 0:)
 
ciao
guarda che quello che ha detto alex è sacrosanta verità, utilizzandi phpmailler risolvi il problema.

p.s.
vedo che usi ereg, guarda che è deprecato tra poco devi modificare tutti gli script in cui lo usi
 
lo so piu avanti lo proverò,ma adesso non posso rifare tutto lo script ho più di 200 domande,non posso inserire un codice nello script php?
 
su internet ho trovato quresto codice ma nn mi funge,forse va in conflitto con le mie variabili dato ke quel codice è stato creato solo per un esempio

PHP:
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];

// 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>Mail inviata con successo!</p>";
}else{
  echo "<p>Errore!</p>";
}
 
Ultima modifica di un moderatore:
ciao
ribadisco quello che aveva detto alex, usa phpmailler, non è difficile come sembra.
io sono anni che non uso più la funzione mail(), che tra l'altro da problemi con alcuni server di posta
 
lo so dovrei istallarlo sul sito,cè la spiegazione sul link ke mi ha dato...xò devo riscrivere tutte le variabili sono piu di 200 domande e non ho tempo,per adesso mi serviva un codice da inserire nello script ke ho poi con calma imparerò phpmail
 

Discussioni simili