2010-09-01 8 views
0

J'utilise la fonction mail() sur ma page de commentaires.Télécharger le fichier php mail

Il y a 3 champs: Nom, Mail et Message.

Voulez-vous ajouter un nouveau champ - fichier, avec la possibilité de télécharger des fichiers et les envoyer à mon courrier électronique.

Quelques limites:

  1. .zip et .rar fichiers autorisés fichier
  2. ne peut pas être plus 200kb taille.

Comment faire cela et éviter les failles de sécurité?

+0

Avez-vous pensé à regarder dans Zend Framework? J'ai commencé à utiliser seulement sa classe Zend_Mail. Je suis tombé amoureux de ça, et maintenant j'utilise ZF sur tous mes sites. En utilisant ZF, vous pouvez valider les entrées, telles que votre fichier, gérer le téléchargement, l'attacher au courrier et l'envoyer en quelques lignes de code. – Phliplip

Répondre

2

Pour en apprendre davantage sur le téléchargement de fichiers, reportez-vous Handling file uploads dans le manuel PHP

Pour envoyer des pièces jointes, en utilisant une classe PHP comme Swiftmailer au lieu de mail() est une bonne idée.

+1

+1 ou 'Zend_Mail' :) http://framework.zend.com/manual/fr/zend.mail.html – robertbasic

+0

@robertbasic: +1 pour suggérer Zend_Mail :) – Phliplip

+0

une solution plus facile? y compris une grande bibliothèque pour un téléchargement de fichier simple n'est pas une bonne solution. J'en ai besoin pour une seule page sur un petit site. – James

2

Vous pouvez utiliser cette fonction:

function mail_file($to, $subject, $messagehtml, $from, $fileatt, $replyto="") { 
      // handles mime type for better receiving 
      $ext = strrchr($fileatt , '.'); 
      $ftype = ""; 
      if ($ext == ".doc") $ftype = "application/msword"; 
      if ($ext == ".jpg") $ftype = "image/jpeg"; 
      if ($ext == ".gif") $ftype = "image/gif"; 
      if ($ext == ".zip") $ftype = "application/zip"; 
      if ($ext == ".pdf") $ftype = "application/pdf"; 
      if ($ftype=="") $ftype = "application/octet-stream"; 

      // read file into $data var 
      $file = fopen($fileatt, "rb"); 
      $data = fread($file, filesize($fileatt)); 
      fclose($file); 

      // split the file into chunks for attaching 
      $content = chunk_split(base64_encode($data)); 
      $uid = md5(uniqid(time())); 

      // build the headers for attachment and html 
      $h = "From: $from\r\n"; 
      if ($replyto) $h .= "Reply-To: ".$replyto."\r\n"; 
      $h .= "MIME-Version: 1.0\r\n"; 
      $h .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
      $h .= "This is a multi-part message in MIME format.\r\n"; 
      $h .= "--".$uid."\r\n"; 
      $h .= "Content-type:text/html; charset=iso-8859-1\r\n"; 
      $h .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
      $h .= $messagehtml."\r\n\r\n"; 
      $h .= "--".$uid."\r\n"; 
      $h .= "Content-Type: ".$ftype."; name=\"".basename($fileatt)."\"\r\n"; 
      $h .= "Content-Transfer-Encoding: base64\r\n"; 
      $h .= "Content-Disposition: attachment; filename=\"".basename($fileatt)."\"\r\n\r\n"; 
      $h .= $content."\r\n\r\n"; 
      $h .= "--".$uid."--"; 

      // send mail 
      return mail($to, $subject, strip_tags($messagehtml), str_replace("\r\n","\n",$h)) ; 

     } 

http://www.barattalo.it/2010/01/10/sending-emails-with-attachment-and-html-with-php/

Questions connexes