Envoi mail PHP + pièce jointe

axel098 Messages postés 1 Date d'inscription lundi 25 janvier 2016 Statut Membre Dernière intervention 25 janvier 2016 - Modifié par jordane45 le 26/01/2016 à 16:02
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 - 26 janv. 2016 à 16:13
Bonjour à tous,

Je suis entrain de créer un formulaire en php avec plusieurs champs.
Une page envoie.php qui vérifie si tous les champs sont bien remplie et qui envoie le mail. (pour l'instant ça fonctionne)

Maintenant je voudrai avoir la possibilité d'ajouter une pièce jointe à mon mail. J'ai donc rajouté un champ supplémentaire à mon formulaire et j'ai essayé de modifier la page envoie.php sans succès. Cela fait 3jours que mes essais non rien donnés... j'ai regardé plusieurs tutos mais je n'arrive pas à l'adapter à mon code et je commence à baisser les bras. Si vous pouviez m'aider je vous en remercie d'avance (je ne suis pas super fort en php).

Voici mes pages :

formulaire.php
<label class="field prepend-icon file">
         <span class="button btn-black"> Choisir une photo </span>
         <input type="file" class="gui-file" name="fichier" id="fichier"
         onChange="document.getElementById('fichiertelecharger').value = this.value;">
         <input type="text" class="gui-input" id="fichiertelecharger" placeholder="Télécharger les photos de votre objet" readonly>
         <span class="field-icon"><i class="fa fa-upload"></i></span><br></label>

envoie.php
<?php




 define("WEBMASTER_EMAIL", 'test@mail.com');
 
 error_reporting (E_ALL ^ E_NOTICE);



 function ValidateEmail($emailaddress)
 {
  $regex = '/([a-z0-9_.-]+)'. 
  '@'. # at
  '([a-z0-9.-]+){2,255}'. 
  '.'. # period
  '([a-z]+){2,10}/i'; 
  
  if($emailaddress == '') 
   return false;
  else
   $eregi = preg_replace($regex, '', $emailaddress);
  return empty($eregi) ? true : false;
 }



 $post = (!empty($_POST)) ? true : false;
 
 if($post)
 {
 $nom =  strip_tags(trim($_POST["nom"])); 
 $nom = utf8_decode($nom);
 $prenom =  strip_tags(trim($_POST["prenom"])); 
 $prenom = utf8_decode($prenom);
 $emailaddress = strip_tags(trim($_POST["emailaddress"]));
 $emailaddress = strip_tags(trim($_POST["emailaddress"]));
 $telephone = strip_tags(trim($_POST["telephone"]));
 $typeobjet = strip_tags(trim($_POST["typeobjet"]));
 $description = strip_tags(trim($_POST["description"]));
 $description = utf8_decode($description);
        $captcha = strip_tags(trim($_POST["captcha"]));
 
 $fichier = uniqid();
 $fichier_telecharger = $fichier.$_FILES['fichier']['name'];
 $fichier_telecharger = fread($fichier, filesize("$fichier"));
 $fichier_telecharger = chunk_split(base64_encode($fichier_telecharger)); 
   

 $error = array();
  //valider nom
 if(isset($_POST["nom"])){
   if (!$nom) {
    $error[] = "Entrer votre nom";
   } elseif(strlen($nom) < 2)  {
    $error[] = "Entrer votre nom";
   }
 }
   
   //valider prenom
 if(isset($_POST["prenom"])){
   if (!$prenom) {
    $error[] = "Entrer votre prenom";
   } elseif(strlen($prenom) < 2)  {
    $error[] = "Entrer votre prenom";
   }
 }
 
 //valider mail
 if(isset($_POST["emailaddress"])){
  if (!$emailaddress) {
   $error[] = "Entrer votre email.";
  } else if (!validEmail($emailaddress)) {
   $error[] = "Entrer un email valide.";
  }
 }
  
 //valider le type d'objet
 if(isset($_POST["typeobjet"])){
   if (!$typeobjet) {
    $error[] = "Sélectionner le type de votre objet.";
   }
 }
 
 //valider le fichier telecharger
 if(isset($_FILES['fichier'])) {
  // taille maximum :: 2MB
  $maxsize    =  2097152; 
  // Fichier attacher
  if (empty($_FILES['fichier']['name'])) {
   $error[] = "Ajouter une photo.";
  }
  // Fichier trop lourd
  if ($_FILES['fichier']['size'] > $maxsize) {
   $error[] = "Le fichier est trop lourd. Il dépasse les 2MB.";
  }
  // Format fichier
  $valid_file_extensions = array(".jpg", ".jpeg", ".png");
  $file_extension = strrchr($_FILES["fichier"]["name"], ".");
  // Verifier le format du fichier
  if (!in_array($file_extension, $valid_file_extensions)) {
   $error[] = "Svp une image avec le format png ou jpg.";
  }  
 } 
 
 //Valider le message (description)
 if(isset($_POST["description"])){
  if (strlen($description) < 10) {
   if (!$description) {
    $error[] = "Veuillez faire une déscription de votre objet.";
   } else {
    $error[] = "Votre messsage doit faire plus de 10 caractères.";
   }
  }
 }
 
 // valider captcha 
 if(isset($_POST["captcha"])){
  if (!$captcha) {
   $error[] = "Entrer le code";
  } else if (($captcha) != $_SESSION['gfm_captcha']) {
   $error[] = "Le code est incorrect";
  }
 }
 
 
 if ($error) {
  $errortext = "";
  foreach ($error as $error) {
   $errortext .= '<li>'. $error . "</li>";
  }
  echo '<div class="alert notification alert-error">Erreur:<br><ul>'. $errortext .'</ul></div>';
 
 } else{  
  
  if ($_FILES['fichier']['error'] == 0) {
   move_uploaded_file($_FILES['fichier']['name'], '../telechargement/' .$fichier_telecharger); 
  
   include dirname(__FILE__).'/phpmailer/PHPMailerAutoload.php';
  
    
   $mail = new PHPMailer();
   $mail.= isSendmail();
   $mail.= ContentType = "text/html";
   $mail.= AddAttachment('../telechargement/'.$fichier_telecharger); 

 

   
       $mail  = mail(WEBMASTER_EMAIL, "Expertise : $typeobjet", $description,  
    "From: ".$nom." ".$prenom." =>  Num: ".$telephone." <".$emailaddress.">\r\n"
    ."Reply-To: ".$emailaddress."\r\n"
    ."X-Mailer: PHP/" . phpversion());
   
   if($mail)
    echo 'OK';
  } 
   
   
  else {
     echo '<div class="alert notification alert-error">Message non envoyé</div>'; 
    }
  }
 }
?>



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

1 réponse

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
Modifié par jordane45 le 26/01/2016 à 16:14
Bonjour,

Pour commencer ... que contient ta balise FORM ?


Ensuite, côté PHP ... que contiennent tes variables $_POST et $_FILES ? (fais en des PRINT_R pour le voir )

Au cas où, voici une fonction PHP que tu peux utiliser pour envoyer des mails AVEC pièce jointe :
/**
* $to : Destinataire (toto@qqchose.fr)
* $subject : Sujet du mail ( "ceci est un mail")
* $msg : Contenu du message
* $filePath : Chemin du fichier à mettre en PJ ( "/fichiers/h13eree5632.xls")
* $Cc : Copie Carbone (pour mettre quelqu'un en copie du mail.
* $Libelle_de_la_piece_jointe : MonClasseur.xls
*/
 function Envoi_Mail($to,$subject="",$msg="",$filePath="",$lib_fic="",$Cc=NULL) {
  // Creation de l'entete du mail a envoyer
  // --------------------------------------
  $boundary = md5(uniqid(microtime(), TRUE));
  $headers = "From: $from\r\n";
  $headers .= $Cc ? "Cc: $cc\n" :'';
  $headers .= 'Mime-Version: 1.0'."\r\n";
  $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
  $headers .= "\r\n";

  // Creation du message a envoyer
  // -----------------------------
  $message  =
  "--" . $boundary . "\r\n" .
  "Content-type: text/html; charset=ISO-8859-15" . "\r\n\r\n
  <html>
   <body style='margin:10px 0px 0px 30px;
                color:#393989;
                font-family:Arial;
                font-size:13px;' >  
   ".$msg."        
   </body>
  </html>\r\n";

  // Piece jointe
  // ------------
  if (trim($filePath) != '' && file_exists($filePath)) {
   $file_type = filetype($filePath);
   $file_size = filesize($filePath);

   $handle = fopen($filePath, 'r') or die("Le fichier $filePath ne peut etre ouvert");
   $content = fread($handle, $file_size);
   $content = chunk_split(base64_encode($content));
   $f = fclose($handle);

   $message .= '--'.$boundary."\r\n";
   $message .= 'Content-type:'.$file_type.';name='. preg_replace("/^[0-9]+_/", "", $lib_fic) ."\r\n";
   $message .= 'Content-transfer-encoding:base64'."\r\n\r\n";
   $message .= $content."\r\n";
  }

  // Envoi du mail
  // -------------
  return mail($to, $objet, $message, $headers);
 } 



Cordialement, 
Jordane                                                                 
1
Rejoignez-nous