8768 sujets

Développement web côté serveur, CMS

Bonjour,

Ca fait deux jours que je cherche à trouver une solution à mon souci. Ayant des connaissances plutôt basiques en PHP je galère.
J'ai créé un formulaire qui doit permettre d'ajouter en fichier joint un document (type doc, txt) et qui sera envoyé par la suite par e-mail avec la fonction mail() de php.

J'en arrive à un code qui upload correctement le fichier dans le dossier /fichiers/ mais quand il s'agit de l'envoyer par email, je reçois le fichier, au bon nom, mais vide. J'imagine qu'au lieu de récupérer le fichier sur le serveur il m'envoie un fichier vide mais avec les bonnes valeurs de nom et de type de fichier.

Le souci est que pour m'en sortir j'ai grappillé de ci de là plusieurs morceaux de code et que j'en arrive à ne plus rien voir et n'étant pas un expert, je tente de debug à taton mais je sèche.

Voici le bout de code que j'utilise dans mon fichier type envoi.php appelé par le formulaire pour traiter l'envoi.


<?php 


// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
   {
      // formulaire non envoyé
      echo '<p>erreur envoi</p>'."\n";
   }
   else
   {
   // formulaire envoyé, on récupère tous les champs.
      $sujet=$_POST['sujet'];
      $nom =$_POST['nom'];
      $adresse=$_POST["prenom"];
      $tel=$_POST["tel"];
      $email=$_POST['email'];
      $msg=$_POST["message"];
      $to="contact@monmail.fr";
    
   
      // On va vérifier les variables et l'email ...

      if(($email != "")&($nom != "")&($tel != "")&($adresse != "")&($msg != "")) 
      {

                 //Corps du mail en commençant par le message principal
      setlocale (LC_TIME, 'fr_FR');
      $mail_corps =  "Envoyé le ".strftime("%A %d %B %Y à %Hh%M")." par $nom\r\n";
      $mail_corps .= "\r\n";    
      $mail_corps .="Sujet : $sujet\r\n";
      $mail_corps .= "Demande de : $nom\r\n";
      $mail_corps .= "Adresse : $adresse\r\n";
      $mail_corps .= "\r\n";
      $mail_corps .= "Téléphone : $tel\r\n";
      $mail_corps .= "Mail : $email\r\n";      
      $mail_corps .= "Message du client : $msg\r\n\n";

   //Préparation de l'entête du mail:
      $boundary = '-----=' . md5(uniqid(mt_rand()));
      $mail_entete = "From: $email\r\n";
      $mail_entete .= "Reply-To: $email\r\n";
      $mail_entete .= "MIME-Version: 1.0\r\n";
      $mail_entete .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'."\r\n";
      $mail_entete .= "X-Mailer: PHP/" . phpversion() . "\n" ;

   //Corps du mail en commençant par le message principal
      $message = '--'.$boundary."\r\n";
      $message .= 'Content-Type: text/plain; charset="utf-8"'."\r\n";
      $message .= 'Content-Transfer-Encoding: 8bit'."\r\n";
      $message .= "\r\n";
      $message .= $mail_corps."\r\n";
      $message .= "\r\n";

   //**********************PIECE JOINTE******************************//
      $file_name = $_FILES['Fichier']['name'];
      $source = $_FILES['Fichier']['tmp_name'];
      $file_type = $_FILES['Fichier']['type'];
      $file_size = $_FILES['Fichier']['size'];
      move_uploaded_file($source,"./fichiers/".$file_name);

      if($file_name!="")
         {
            $file = $file_name;
            $handle = fopen($file,'rb');
            $content = fread($handle, $file_size);
            fclose($handle);
            $content = chunk_split(base64_encode($content));
            $message .= '--'.$boundary."\r\n";
            $message .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
            $message .= 'Content-transfer-encoding:base64'."\r\n";
            $message .= 'Content-Disposition:attachement; filename='.$file_name.'\r\n';
            $message .= '\r\n';
            $message .= $content."\r\n"; 
            $message .= '--'.$boundary.'--'; 
         
         }      

      // envoi du mail
       if (mail($to,"Candidature",$message,$mail_entete)) {
       //Le mail est bien expédié
          echo "<div class=\"message-email valide\">Merci ! Votre e-mail a bien été envoyé</div>";
       } else {
       //Le mail n'a pas été expédié
         echo "<div class=\"message-email valide\"> Votre e-mail a pas été envoyé</div>";
       }
   }
       
}
?>


Merci d'avance pour votre aide et pendant ce temps je continu de cherche une solution.