email con allegato

maurofucile

Nuovo Utente
10 Mar 2013
2
0
0
Salve a tutti, ho un problema con il codice php.
Mi spiego, avrei bisogno di inviare un file allegato ad una mail tramite un form.
In rete ho recuperato questo script che funziona perfettamente con i file .doc, permette di inviare i file .jpeg che però non vengono ricevuti mentre i file .pdf li ricevo ma non riesco ad aprirli.
Posto il codice nella speranza che qualcuno riesca ad aiutarmi.
Il sito è su server aruba.

PHP:
<html>
<head>
<title>MMKit Tutorial - Send mail with attach</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#D2D2D2" leftmargin="3" topmargin="3" marginwidth="0" marginheight="0" text="#000000">
<?
function validate_upload($thefile) {
	global $thefile_type, $thefile_name, $thefile_size;
  $my_max_file_size 	= "3145728"; # in bytes

	$registered_types = array(
	                          "application/msword" => ".doc",
				  "application/octet-stream" => ".doc",
				  "application/pdf" => ".pdf",
				  "image/jpeg" => ".jpeg"
				  ); # these are only a few examples, you can find many more!
	$allowed_types = array("application/msword", "application/octet-stream", "application/pdf", "image/jpeg");
	$start_error = "\n";
	if ($thefile == "none") { # do we even have a file?
		$error .= "\n- Nessun documento allegato.<br>";
	} else { # check if we are allowed to upload this file_type
		if ($thefile_size>$my_max_file_size) $error .= "\n- Il file allegato supera la dimensione massima consentita.<br>";
		if (!in_array($thefile_type, $allowed_types)) {
			$error .= "\n- Il file che hai inserito non &egrave; del tipo richiesto:
						<br>\n";
			while ($type = current($allowed_types)) {
				$error .= "\n" . $registered_types[$type] . " (" . $type . ")<br>";
				next($allowed_types);
			}
			$error .= "\n";
		}
		if ($error) {
			$error = $start_error . $error . "\n";
			return $error;
		} else {
			return false;
		}
	}
} # END validate_upload
?> 
<font face="Arial, Helvetica, sans-serif" size="2"><br>
<?
if ($op=="invio") {
	$error=0;
	$msg="";
	if ($nome=="") {
		$error=1;
		$msg.="- Il campo nome è vuoto.<br>";
	}
	if ($cognome=="") {
		$error=1;
		$msg.="- Il campo cognome è vuoto.<br>";
	}
	if ($email=="") {
		$error=1;
		$msg.="- Il campo email è vuoto.<br>";
	}
	if ($email!="" && !eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)) {
		$error=1;
		$msg.="- L'email inserita non è valida.<br>";	
	}
	if ($commento=="") {
		$error=1;
		$msg.="- Il campo commento è vuoto.<br>";
	}
	$error_file="";
	if (!$thefile || $thefile=="none" || $thefile=="") {
		$error=1;
		$msg.="- Non hai inserito il certificato.<br>";
	} else $error_file = validate_upload($thefile);
	if ($error==1 || $error_file!="") {
		echo"<br><br>Attenzione! Si sono verificati i seguenti errori:<br>$msg<br>$error_file<br><a href=\"javascript:history.back()\">Clicca qui</a> per reinserire i dati.";	
	} else {
		$emailto="[email protected]"; // INSERIRE L'EMAIL QUI!!
		$data=date("j/m/Y");
		$ora=date("h:i:s");
		
		$headers = "MIME-Version: 1.0\n";
		$headers .= "Content-Type: multipart/mixed; boundary=\"XX-1234DED00099A\"\n";
		$headers .= "Content-Transfer-Encoding: 7bit\n";
		$headers .= "From: $email\n";
		
		$messaggio="--XX-1234DED00099A\n";
		$messaggio.="Content-Type: text/plain; charset=iso-8859-1\n";
		$messaggio.="Content-Transfer-Encoding: 7bit\n\r";

		$messaggio.="Certificato inviato il $data alle $ora\n\r\nDati inseriti\n";
		$messaggio.="Nome: $nome\n\rCognome: $cognome\n";
		if ($telefono!="") $messaggio.="Telefono: $telefono\n";
		$messaggio.="Email: $email\nCommento:\n$commento\n";
		$oggetto_send="Invio Certificato";
		
		
		$messaggio.="--XX-1234DED00099A\n";
		$messaggio.="Content-Type: {$thefile_type}; name=\"certificato\"\n";
		$messaggio.="Content-Transfer-Encoding: base64\n";
		$messaggio.="Content-Description: \"Certificato\"\n";
		$messaggio.="Content-Disposition: attachment\n\r";
		
		$fp=@fopen($thefile, "r");
		if ($fp) {
			$data = fread($fp, filesize($thefile));	
		}
		$curr = base64_encode($data);
		$messaggio .= "$curr\n\r--XX-1234DED00099A--\n";
		if (!mail($emailto, $oggetto_send, $messaggio, $headers)) {
			echo"<br><b>Attenzione.</b><br>Si sono verificati degli errori durante l'invio della Email.<br>
			Vi preghiamo di riprovare <a href=\"javascript: history.back()\">cliccando qui.</a><br>
			Se l'errore persiste Vi invitamo a riprovare più tardi. Grazie.";
		}
		else {
			$messaggio_risposta="Grazie per aver usato questo servizio.\n\rAbbiamo inviato il vostro certificato alla Segreteria competente.\n\r\n\rDati inseriti\n";
			$messaggio_risposta.="Nome: $nome\n\rCognome: $cognome\n\r";
			if ($telefono!="") $messaggio_risposta.="Telefono: $telefono\n\r";
			$messaggio_risposta.="Commento:\n\r$commento\n\r\n\r";
			$messaggio_risposta.="Distinti saluti,\n\r";
			$oggetto2="Certificato inoltrato";
			mail($email, $oggetto2, $messaggio_risposta,"From: NOMESITO <$emailto>");
			echo "<br><b>Email inviata correttamente.</b><br>
			<br>I dati inseriti sono i seguenti:<br><br>";
			echo"Nome:<b> $nome </b><br>
			Cognome:<b> $cognome</b><br>";
			if ($telefono!="") echo"Telefono: <b>$telefono</b><br>";
			echo"Email: <b>$email</b><br>Commento:<b> ".nl2br($commento)."</b><br>
			<br><br>Grazie per aver usato questo servizio.";
		}
	}
	
} else {
?>
			<br><br>Form per invio certificato<br><br>
      <form enctype="multipart/form-data" method="post" action="<?=$PHP_SELF?>" name="contatti">
        <table width="550" border="0" cellspacing="3" cellpadding="0">
          <tr> 
            <td>Nome *</td>
            <td> 
              <input type="text" name="nome" size="30">
            </td>
          </tr>
          <tr> 
            <td>Cognome *</td>
            <td> 
              <input type="text" name="cognome" size="30">
            </td>
          </tr>
          <tr> 
            <td>Telefono</td>
            <td> 
              <input type="text" name="telefono" size="30">
            </td>
          </tr>
          <tr> 
            <td>Email *</td>
            <td> 
              <input type="text" name="email" size="30">
            </td>
          </tr>
          <tr> 
            <td>Allega il tuo certificato<br>(formato .doc - Max 3 Mb) *</td>
            <td>
              <input type="hidden" name="MAX_FILE_SIZE" value="3145728"> 
              <input name="thefile" type="file" SIZE="35">
            </td>
          </tr>
          <tr> 
            <td>Commento *</td>
            <td> 
              <textarea name="commento" wrap="VIRTUAL" cols="30" rows="5"></textarea>
            </td>
          </tr>
          <tr> 
            <td colspan="2">
              <div align="center">
              	<input type="hidden" name="op" value="invio">
                <input type="submit" name="Submit" value="Invia">
                <input type="reset" name="Submit2" value="Reimposta">
              </div>
            </td>
          </tr>
        </table>
      </form>
      <font size="1">I campi con l'asterisco sono obbligatori.<br>
      <?
}
?> 
       </font>
      
</table>
</body>

</html>
 
Ultima modifica di un moderatore:
ciao
guardando meglio mi sono accorto di alcune cose
credo che lo script che hai usato sia di una versione paleolitica, infatti
per verificare l'indirizzo email usi eregi, la funzione eregi è deprecata,
usi lo short tag <? al posto di <?php
non usi i $_POST per ricevere i dati dal form
ho la vaga impressione che ti convenga rivedere un po' il tutto, non solo l'invio dell'allegato
 

Discussioni simili