Aiuto per form email con allegato

  • Creatore Discussione Creatore Discussione aletta
  • Data di inizio Data di inizio

aletta

Nuovo Utente
27 Feb 2012
2
0
0
Ciao a tutti ho un problema con la compilazione di un form che mi permette di far inviare dei curriculum dal visitatore del sito esiste qualcosa di gia fatto o qualcuno cosi gentile che mi spiega passo per passo come fare perpiacere? :mavieni:
 
ciao
benvenuto nel forum.
per inviare in allegati guarda l'uso della classe phpmailler negli articoli mrwm.
qualcosa di pronto dipende cosa vuoi fare.
comunque butta giù qualcosa e postalo (inizia a postare il form che vorresti fare), qualche buon'anima che ti aiuti la trovi:)
 
Ultima modifica di un moderatore:
ciao
benvenuto nel forum.
per inviare in allegati guarda l'uso della classe phpmailler negli articoli mrwm.
qualcosa di pronto dipende cosa vuoi fare.
comunque butta giù qualcosa e postalo (inizia a postare il form che vorresti fare), qualche buon'anima che ti aiuti la trovi:)
Ciao grazie mille si mo provo a vedere li :)
Mi servirebbe un form con campo magari nome email un testo e la possibilità di allegarmi ed inviarmi il loro curriculum :( purtroppo ho provato con il codice in mio possesso ma nulla dove sbaglio?
pagina inviamail.php

HTML:
<body>
<div id="response" style="display:none;border:1px solid #ccc:padding:10px;background:#f4f4f4;"></div>
<form action="mailattachment.php" method="POST" enctype="multipart/form-data">
<table border="0">
<tr>
  <td>Tua Mail:</td>
  <td><input type="text" name="mail" value="" id="mail" /></td>
</tr>
<tr>
  <td>Oggetto:</td>
  <td><input type="text" name="oggetto" value="" id="oggetto" /></td>
</tr>
<tr>
  <td>Messaggio:</td>
  <td><textarea cols="30" rows="6" name="testomessaggio" id="testomessaggio"></textarea></td>
  </tr>
<tr>
  <td>Allega file:</td>
  <td><input type="file" name="attachment" /></td>
</tr>
<tr>
  <td colspan="2"><input type="submit" value="Invia mail" id="sendmail" name="sendmail" /></td>
</tr>
</table>
</form>
</body>

pagina mailattachment.php

PHP:
<?php
// Recuperiamo i valori dal form e aggiungiamo la nostra email dove ricevere il file allegato con la mail
$to = "QUA METTO EMAIL";      
$mail = $_POST['mail'];
$oggetto = $_POST['oggetto'];
$testomessaggio = $_POST['testomessaggio'];

// Creiamo le variabili per il file attachment
$attachment = $_FILES['attachment']['tmp_name'];
$attachment_type = $_FILES['attachment']['type'];
$attachment_name = $_FILES['attachment']['name'];

$headers = "From: " . $to;

// Verifichiamo  se è stato eseguito l'upload del file
if (is_uploaded_file($attachment))
{
  // usiamo la funzione fopen e fread per aprire e leggere il file e poi chiudiamo con fclose
  $file = fopen($attachment,'rb');
  $data = fread($file, filesize($attachment));
  fclose($file);

  // Codifichiamo il file adattandolo a base64 usando la funzione chunk_split di php
  $data = chunk_split(base64_encode($data));

   /* Creiamo una variabile per un divisore che deve divir
  dere la parte testuale del messaggio dal file stesso altrimenti riceverete una serie illeggibili di caratteri  
	 */
  $func_rand = md5(time());
  $mime_boundary = "==Multipart_divisor_x{$func_rand}x";
  
  // Aggiungo le intestazioni necessarie per l'attachment
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " divisor=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $body .= "This is a multi-part message in MIME format.\n\n";

 // Mettiamo il separatore 
  $body .= "--{$mime_boundary}\n";
  
  // Questa è la parte "testuale" del messaggio
  $body .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $body .= "Content-Transfer-Encoding: 7bit\n\n";
  $body .= "From :" . $mail . "\n\n";
  $body .= $messaggio . "\n\n";
  //  Ancora il separatore alla fine del contenuto testuale della mail
  $body .= "--{$mime_boundary}\n";

  // Adesso aggiungiamo l'allegato alla mail
  $body .= "Content-Disposition: attachment;\n";
  $body .= " filename=\"{$attachment_name}\"\n";
  $body .= "Content-Transfer-Encoding: base64\n\n";
  $body .= $data . "\n\n";
  
    // chiudo con il separatore
  $body .= "--{$mime_boundary}--\n";
}
else
{
  $body = $testomessaggio;
}

// Invio la mail
if (mail($to, $oggetto, $body, $headers))
{
  echo "<em>Mail e allegato inviati correttamenti</em>";
}else{
  echo "<em>Ci sono problemi, verifica il codice php</em>";
}
?>

Dove sbaglio? perpiacere
 
Ultima modifica di un moderatore:
ciao
alcune cose:
il form va abbastanza bene, mentre lo script php e meglio rimetterci le mani.
1) secondo me, ti convine fare tutto in una stessa pagina (form+invio)
2) inviando così brutalmente sia i valori (testi e allegato) corri i grosso rischio che ti inviino delle porcherie (es un allegato delete_tutto_hard_disck.exe)
o semplicemente un indirizzo email tipo pinco+pallo.it ecc..
quindi bisogna mettere dei controlli a quello che ti fai inviare
3) la funzione nativa php mail() non sempre funzia come dovrebbe ti conviene passare alla classe PHPMailler
vai all'articolo
https://www.mrw.it/php/articoli/inviare-email-classe-phpmailer_631.html
e scaricati lo zip, lo metti nella cartella dove hai il form e lo apri
dopo che l'hai aperto dovresti trovare le cartelle phpmasiller con i file class.phpmailler.php class.smtp.php e un'altra sottocartella language
li non toccare niente.
4) ti conviene inoltre mettere un captcha o qualcosa di simile in modo da non essere invaso da spam
fatto questo con un po' di pazienza assieme cominciamo a buttare giù qualcosa di decente.
non ti preuccupare è più semplice di quello che sembra (comunque siamo qui)
 
ciao
ecco come dovresti impostare la pagina che puoi chiamare (es) contatto.php, l'importante che sia .php
leggi i commenti (che poi se ti danno fastidio puoi togliere)

PHP:
<?php
//qui metteremo i controlli e l'invio (se i controlli sono OK)
//.......

?>
<!-- qui tutto l'html che ti serve -->
<div id="response" style="display:none;border:1px solid #ccc:padding:10px;background:#f4f4f4;"></div>
<!-- mettendo l'action così puoi mettere tutto nella stessa pagina e non preoccuparti di che nome gli dai -->
<form action="<?php echo {$_SERVER['REQUEST_URI']};?>" method="POST" enctype="multipart/form-data">
<table border="0">
<tr>
  <td>* Tua Mail:</td>
  <td><input type="text" name="mail" value="" id="mail" /></td>
</tr>
<tr>
  <td>* Oggetto:</td>
  <td><input type="text" name="oggetto" value="" id="oggetto" /></td>
</tr>
<tr>
  <td>* Messaggio:</td>
  <td><textarea cols="30" rows="6" name="testomessaggio" id="testomessaggio"></textarea></td>
  </tr>
<tr>
  <td>Allega file:</td>
  <td><input type="file" name="attachment" /></td>
</tr>
<tr>
  <td colspan="2"><input type="submit" value="Invia mail" id="sendmail" name="sendmail" /></td>
</tr>
<tr>
  <td colspan="2">i campi contrassegnati con * sono obbligatori</td>
</tr>
</table>
</form>
<!-- qui tutto l'html che ti serve -->
 

Discussioni simili