Envois mail plusieurs fichier [Résolu]

Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 14 avril 2017 à 19:33 - Dernière réponse : Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention
- 21 avril 2017 à 19:55
Bonjour à tous !

Je sollicite votre aide afin de m'aider à corriger mon code.
Je ne peu envoyer qu'une seule pièce jointe alors que je souhaite pouvoir envoyer 10 fichiers le tout pour 10Mo.
Pouvez-vous m'aider svp ?

if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));
switch($ext[1]) {default: $attach_type = "application/octet-stream"; break;
case "jpg": case"jpeg": $attach_type = "image/jpeg"; break;
case "png": $attach_type1 = "image/png"; break;
case "bmp": $attach_type1 = "image/bmp"; break;
case "pdf": $attach_type1 = "application/pdf"; break;
case "txt": $attach_type1 = "text/plain"; break;}
	
	if(file_exists($upload_file)) {
	$file = fopen($upload_file, "r");
	$contents = fread($file, filesize($upload_file));
	$encoded_attach = chunk_split(base64_encode($contents));
	fclose($file);}

$EmailDesti		= MAIL_PERSONNEL;
$LeSujet		= utf8_decode($INSCRIPTION." de ".$data['Titre']);

$LeMessageHTML	= "<html><head><meta charset='utf-8'></head><body>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF
."</body></html>";

$PieceJointe 	= $upload_file;

//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html 	= $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
$fichier   		= fopen($PieceJointe, "r");
$attachement 	= fread($fichier, filesize($PieceJointe));
$attachement 	= chunk_split(base64_encode($attachement));
fclose($fichier);
//=====Création de la boundary.
$boundary 		= "-----=".md5(rand());
$boundary_alt 	= "-----=".md5(rand());
//=====Définition du sujet.
$sujet 			= $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){


Merci de votre aide.

Afficher la suite 

45 réponses

Répondre au sujet
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par jordane45 le 18/04/2017 à 15:29
+1
Utile
Bonjour,

Dis voir .. côté formulaire html .. tes "input" file ... sont bien nommés sous forme d'array ?
input type = "file" name = "Fr_Photos[]" ..

Sinon..normal qu'il n'en récupère qu'un.....

bien entendu ... côté php .. tu devras ensuite faire un foreach pour parcourir CHAQUE fichier

$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos){
  foreach ($Fr_Photos as $fichier ){
     $upload_file= $fichier['name'];
     $tmp_name =$fichier['tmp_name'];
     if (move_uploaded_file($tmp_name, $upload_file)) {
        $ext = explode(".", basename( $upload_file ));
         // .. etc...
         // .... le code de traitement à effectuer pour chaque fichier 
         //  ...
    }
  }
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 19 avril 2017 à 12:13
+1
Utile
Je viens de percuter que tu utilises UN champ INPUT multiple et non pas PLUSIEURS INPUT files ...

Donc testes ceci :
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

$extensions 	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi 	= 10485760;
$nbr_max_file	= 10;
$erreur = "";
//na pas oublier de renseigner cette variable :
$dirToUpload = "repertoire_ou_mettre_les_fichiers/";

if($Fr_Photos){
  
  if (count($Fr_Photos['name']) > $nbr_max_file) {
    $erreur .=  "<li>• Trop de fichiers uploadés</li>";
  }else{
  
  foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
    $tmp_name =$Fr_Photos['tmp_name'][$indice];  
    $upload_type	= $Fr_Photos['type'][$indice];

    $extension 	= strrchr($upload_file, '.');
    $taille 	= filesize($tmp_name);

    if(!in_array($extension, $extensions)){
      $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
    }else{
      if($taille > $taille_maxi){
        $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
      }else{
         if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
              $attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));
              $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
              $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
              $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
              $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
              $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
  
         }else{
             $erreur.="<li>• Erreur lors de l'upload </li>";
         }
      }
    }
  }
 }
}


A adapter à ton besoin par la suite bien entendu...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45
yg_be 4130 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 14 avril 2017 à 19:37
0
Utile
2
que se passe-t-il quand tu envoies plusieurs pièces jointes?
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 17 avril 2017 à 11:54
Bonjour yg_be,

Une seule s'envoie, la dernière sélectionnée...
yg_be 4130 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 17 avril 2017 à 14:53
peux-tu montrer le code complet, et expliquer comment plusieurs sont sélectionnés?
à quoi servent les lignes 3 à 14?
Commenter la réponse de yg_be
yg_be 4130 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 14 avril 2017 à 19:49
0
Utile
1
c'est toi qui a écrit ce code? à quoi servent les lignes 3 à 14?
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 18 avril 2017 à 10:39
Pardon du retard de réponse, la ligne 3 à 14 imposait l'extension des fichiers et uploadais les fichiers sur le serveur. Mais je crois supprimer tout ça pour faire plus propre.

Lorsque j'ajoute des fichiers "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" et n'envoie que le "10"

C'est un
<input name="upload" id="upload" type="file" multiple>
Commenter la réponse de yg_be
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 18 avril 2017 à 11:48
0
Utile
2
Voici tout mon code :
$upload_file = $_FILES['Fr_Photos']['name'];
if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));

$PieceJointe 	= $upload_file;
$EmailDesti		= "Sujet du mail";
$LeSujet		= utf8_decode($INSCRIPTION." de ".$data['Titre']);

$LeMessageHTML	= "<html><head><meta charset='utf-8'></head><body><div style='font-family: Futura;'>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF
."</div></body></html>";

//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html 	= $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
$fichier   		= fopen($PieceJointe, "r");
$attachement 	= fread($fichier, filesize($PieceJointe));
$attachement 	= chunk_split(base64_encode($attachement));
fclose($fichier);
//=====Création de la boundary.
$boundary 		= "-----=".md5(rand());
$boundary_alt 	= "-----=".md5(rand());
//=====Définition du sujet.
$sujet 			= $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 

//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){
$ok_mail="true";

}else{$erreur.='<div class="erreur-1"><div class="erreur-2"><div class="erreur-3"></div><div class="erreur-4">'.$MESSAGE_ERROR.'</div><div class="erreur-5">'.$ERREUR_ERROR_1.'</div></div></div>';}}
}}
yg_be 4130 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 18 avril 2017 à 15:03
ton code ne travaille que sur un seul fichier.
peux-tu ajouter
print_r ($_FILES);
au début de ton code, et partager ce que cela donne?
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 18 avril 2017 à 15:18
Array ( [Fr_Photos] => Array ( [name] => 10.txt [type] => text/plain [tmp_name] => /tmp/phpLCRR1a [error] => 0 [size] => 7 ) )


Voilà ce que j'ai comme retour...
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 18 avril 2017 à 17:15
0
Utile
2
J'ai modifié autant que je peux et voilà le résultat :
Je ne rencontre que des erreurs :\

<?php
$extensions 	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi 	= 10485760;
$nbr_max_file	= 10;
 
$extension = strrchr($upload_file['name'], '.');
$taille = filesize($upload_file['tmp_name']);
 
if(!in_array($extension, $extensions))			{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille>$taille_maxi)						{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
if(count($upload_file['name']) > $nbr_max_file)	{$erreur.="<li>• Trop de fichiers uploadés</li>";}
 
// Création du message
if($erreur==""){
 
foreach($_FILES as $upload_file){
 
$tmp_name = file_get_contents($upload_file['tmp_name']);
$attachement = chunk_split(base64_encode($tmp_name));
 
$EmailDesti		= LE_MAIL;
$LeSujet		= $data['Titre'];
 
$LeMessageHTML	= "<html></html>";
 
//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html 	= $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
foreach($_FILES as $upload_file){
$tmp_name = file_get_contents($upload_file['tmp_name']);
$attachement = chunk_split(base64_encode($tmp_name));
 
//=====Création de la boundary.
$boundary 		= "-----=".md5(rand());
$boundary_alt 	= "-----=".md5(rand());
//=====Définition du sujet.
$sujet 			= $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
	}
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){
$ok_mail="true";
 
}else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}
}
?>
 
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 18 avril 2017 à 17:26
... tu n'as pas du regarder ma suggestion de code .... vu comment tu as écris le tien....

Par exemple .... où as tu vu que je faisais un
foreach($_FILES as $upload_file){


Moi j'ai écris :
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos){
  foreach ($Fr_Photos as $fichier ){


Ensuite .. comment penses tu que :
$extension = strrchr($upload_file['name'], '.');
$taille = filesize($upload_file['tmp_name']);
 
if(!in_array($extension, $extensions))			{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille>$taille_maxi)						{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}

puis se faire AVANT le foreach ????


Je te laisse corriger .... là ce n'est que de la logique.....
yg_be 4130 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 18 avril 2017 à 17:46
peux-tu montrer ce que donne
print_r ($_FILES);
après corrections?
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - Modifié par Sinistrus le 19/04/2017 à 11:31
0
Utile
8
Après plusieurs test, voici ce que j'ai fais mais j'ai encore des soucis :
$Fr_Photos  = !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos){
  foreach ($Fr_Photos as $upload_file ){
   
$upload_file = $upload_file['name'];
$tmp_name   = $upload_file['tmp_name'];
$extension   = strrchr($upload_file['name'], '.');
$taille   = filesize($upload_file['tmp_name']);
$tmp_myname  = file_get_contents($upload_file['tmp_name']);
$attachement  = chunk_split(base64_encode($tmp_myname));

if (move_uploaded_file($tmp_name, $upload_file)) {
 
if(!in_array($extension, $extensions))   {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
if($taille > $taille_maxi)      {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
if(count($upload_file) > $nbr_max_file)   {$erreur.="<li>• Trop de fichiers uploadés</li>";}

$message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
 }}}


Voici le print_r :
Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpbhEjC0 [1] => /tmp/phpaNUCrD ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )


Et voici le code d'erreur :
Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 11:26
Encore un petit couac je pense :
if(count($upload_file) > $nbr_max_file)


A mettre AVANT la boucle et à changer par:
if(count($Fr_Photos) > $nbr_max_file)
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 11:26
Non ! Voilà pourquoi j'ai dû modifier et re-modifier sans arrêt depuis hier et mes copier/coller sont des catastrophes !

Voici l'erreur pour une seule pièce jointe :
Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 11:30
Que contient la variable $Fr_Photos ?
Peux tu en faire un print_r et nous coller le contenu ? (avec 1 seul fichier... puis avec 2 fichiers )

Dans l'idéal .. pourrais tu également nous mettre (proprement) le code :
- html de ton formulaire
- Le code php complet (modifié) que tu utilises désormais
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 11:42
Idem soucis... :\
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 11:49
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 12:20
0
Utile
1
Non désolé je ne l'avais pas vu.

Voici le contenu du
print_r ($_FILES);
pour 1 fichier :
Array ( [Fr_Photos] => Array ( 
[name] => Array ( [0] => 01.txt ) [type] => Array ( [0] => text/plain )
[tmp_name] => Array ( [0] => /tmp/phpLvcDNk )
[error] => Array ( [0] => 0 )
[size] => Array ( [0] => 7 ) ) )


Voici le contenu du
print_r ($_FILES);
pour 2 fichiers :
Array ( [Fr_Photos] => Array ( 
[name] => Array ( [0] => 01.txt [1] => 02.txt )
[type] => Array ( [0] => text/plain [1] => text/plain )
[tmp_name] => Array ( [0] => /tmp/phpXBOUcn [1] => /tmp/phpMKQcCp )
[error] => Array ( [0] => 0 [1] => 0 )
[size] => Array ( [0] => 7 [1] => 7 ) ) )


Le code HTML et PHP :
http://paste2.org/m1Usv7cy

L'erreur rencontrée dans les 2 cas:
Notice: Undefined variable: extension in /home/serveur/www/bonjour/inscription.php on line 73

Notice: Undefined variable: taille in /home/serveur/www/bonjour/inscription.php on line 74

Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 19 avril 2017 à 12:36
toujours en décalage par rapport aux messages ....
Donc 7 minutes plus tôt (que le tien...) .. j'ai écrit : http://www.commentcamarche.net/forum/affich-34524529-envois-mail-plusieurs-fichier#23
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - Modifié par Sinistrus le 19/04/2017 à 12:39
0
Utile
12
Les fichiers sont uploadés sur le serveur mais j'ai une seule pièce jointe nommée 0 de 194 octets...

Warning: file_get_contents(/tmp/phpfqFX5W): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95

Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96

Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96

Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98

Warning: file_get_contents(/tmp/php6naVow): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95

Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96

Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96

Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98


Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpfqFX5W [1] => /tmp/php6naVow ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 17:30
$message n'affiche rien au chargement de la page. Il n'affiche rien jusqu'à ce que j'envoie le formulaire. Et avec 2 pièces jointes il me donne ceci :
-------=878d90fd10bce7f42b6a4d744d91eee5 Content-Type: multipart/alternative; boundary="-----=0098ce6bc6a2966399d6e88f27cf7b47" -------=0098ce6bc6a2966399d6e88f27cf7b47 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 8bit

Corps du message

-------=0098ce6bc6a2966399d6e88f27cf7b47-- -------=878d90fd10bce7f42b6a4d744d91eee5 Content-type:text/plain;name=01.txt Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=01.txt Qm9uam91cg== -------=878d90fd10bce7f42b6a4d744d91eee5-- Content-type:text/plain;name=02.txt Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=02.txt Qm9uam91cg== -------=878d90fd10bce7f42b6a4d744d91eee5--


Est-ce bien ce que tu as demandé ?

Jordan, je sais que je suis difficile mais merci de ton aide... vraiment !
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 19 avril 2017 à 17:56
Bon...

Tu vas ajouter cette fonction à ton code php (soit dans un fichier à part que tu n'auras qu'à
inclure dans ta page ... soit au début de ton code php.
function sendEmail($to,$from,$subject,$message="",$attach = NULL){

 $headers = "From: $from";
 
  // boundary 
  $semi_rand = md5(time()); 
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
 
  // headers for attachment 
  $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
 
  // multipart boundary 
  $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
  $message .= "--{$mime_boundary}\n";
 
  //Ajout des pieces jointes si il y en a
  if(!empty($attach)){
    foreach($attach as $pj){
      $file = fopen($pj,"rb");
      $data = fread($file,filesize($pj));
      fclose($file);
      $data = chunk_split(base64_encode($data));
      $fileName = basename($pj);
      $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$pj\"\n" . 
                  "Content-Disposition: attachment;\n" . " filename=\"$fileName\"\n" . 
                  "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
      $message .= "--{$mime_boundary}\n";    
    }
  }

  // send
  if(mail($to, $subject, $message, $headers)) { 
    return true;
  } else { 
    return false;
  } 
}




Puis tu modifies le code comme ceci :
   
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

$extensions  = array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi  = 10485760;
$nbr_max_file = 10;
$erreur = "";
//na pas oublier de renseigner cette variable :
$dirToUpload = "upload/";
$filesToAttach = array();

if($Fr_Photos){
  
  if (count($Fr_Photos['name']) > $nbr_max_file) {
    $erreur .=  "<li>• Trop de fichiers uploadés</li>";
  }else{
  
    foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
      $tmp_name =$Fr_Photos['tmp_name'][$indice];  
      $upload_type = $Fr_Photos['type'][$indice];

      $extension  = strrchr($upload_file, '.');
      $taille  = filesize($tmp_name);

      if(!in_array($extension, $extensions)){
        $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
      }else{
        if($taille > $taille_maxi){
          $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
        }else{
           if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
              $filesToAttach[] = $dirToUpload . $upload_file;  
           }else{
             $erreur.="<li>• Erreur lors de l'upload </li>";
           }
        }
      }
    }
  }
}   
   
   
// .. puis la suite de ton code....
// dans lequel tu remplaces l'envoi du mail par l'appel à la fonction que je viens de te donner
  if(sendEmail($to,$from,$subject,$message,$filesToAttach)){
    echo "<br>Mail envoyé";
  }else{
    echo "<br>Erreur lors de l'envoie de l'email.";
  }



EDIT : Correction : un move_upload était en trop dans le code
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 10:33
Bonjour Jordan,

Alors j'ai adapté le code (tu as duppliqué le move_uploaded ?), j'ai essayé avec et sans toute façon.
Bon je reçois un message d'erreur disant :
Votre message n'a pas été transmis !
Une erreur interne est survenue lors de l'envoi du message, veuillez refaire une tentative.


ta fonction contient des valeurs que j'ai dû adapter au mien :
$header > $headers
$sujet > $subject

je n'ai pas de $to alors je l'ai déclaré NULL, puis je l'ai déclaré à la même valeur de $from...

Ce que j'ai constaté en mode console, c'est qu'il duplique les valeur des champs (par exemple nom et prénoms, adresse mail.....) c'est le seul Warning déclaré.
As tu idée ?

Attends, ne réponds pas à ce message, je fais quelques corrections supplémentaires.
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 10:40
Le second move_upload était en trop.. (erreur de copier/coller)
Il faut le retirer.

Ensuite.... sans voir ton code modifié ..; impossible de te répondre !
(et cette fois... montre nous l'intégralité .. y compris l'envoie du mail !! )
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 10:47
Bien, je n'ai plus d'erreur à l'exception que je reçois un message encodé :
-------=fd1bcf90f7df13cb6eabcbb5ec177c06
Content-Type: multipart/alternative;
boundary="-----=9a8955ae30718b01bf9018e3b01d07da"

-------=9a8955ae30718b01bf9018e3b01d07da
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit

<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body><table width='100%' cellspacing='10' style='border:1px solid #CCC; border-radius:3px; -webkit-border-radius:3px; -moz-border-radius:3px; border-radius:3px; background:#EFEFEF;'><tr><td align='left'>Vos noms et prénoms : Mon nom<br>Votre adresse e-mail : mon@mail.com<br>Votre N° de téléphone : 012345678</td></tr></table></body></html>

-------=9a8955ae30718b01bf9018e3b01d07da--

-------=fd1bcf90f7df13cb6eabcbb5ec177c06


J'ai maintenant toutes les pièces jointes avec en surplus un dernier fichier ATT00001.txt (240 o)
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - Modifié par Sinistrus le 20/04/2017 à 12:38
0
Utile
5
J'ai adapté autant que possible et voilà ce qui en sort.
Ce qui fonctionne :
- Je ne reçois aucune erreur.
- Le mail est maintenant en HTML.
- Je reçois toutes les pièces jointes.
- L'encodage passe parfaitement.

Ce qui ne va pas :
- J'ai une pièce jointe supplémentaire AT00001.txt (240 o)

functions.php :
function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){

$header = "From: $Fr_AdresseMail";
 
// boundary 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
 
// header for attachment 
$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\""; 
 
// multipart boundary 
$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n"; 
$message.= "--{$mime_boundary}\n";
 
  //Ajout des pieces jointes si il y en a
  if(!empty($attach)){
    foreach($attach as $pj){
      $file = fopen($pj,"rb");
      $data = fread($file,filesize($pj));
      fclose($file);
      $data = chunk_split(base64_encode($data));
      $fileName = basename($pj);
      $message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
      $message.= "--{$mime_boundary}\n";    
    }
  }

// send
if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;} 

}


inscription.php :
<?php include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php"); ?>

<?php
if(isset($_POST['Envoyer'])){$erreur="";

// Nettoyage des entrées
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}

// Création du message
if($erreur==""){

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}

$extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi  	= 10485760;
$nbr_max_file 	= 10;
$erreur 		= "";
$dirToUpload 	= "upload/";
$filesToAttach 	= array();

$header.= "From: ".$Fr_AdresseMail;
$EmailDesti		= MAIL_PERSONNEL;
$sujet			= utf8_decode($CASTING_INSCRIPTION." de ".$data['Titre']);

$message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)
.$TablF
."</body></html>";

//=====Ajout de la pièce jointe.
$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos){
  
  if (count($Fr_Photos['name']) > $nbr_max_file) {
    $erreur .=  "<li>• Trop de fichiers uploadés</li>";
  }else{
  
    foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
      $tmp_name =$Fr_Photos['tmp_name'][$indice];  
      $upload_type = $Fr_Photos['type'][$indice];

      $extension  = strrchr($upload_file, '.');
      $taille  = filesize($tmp_name);

      if(!in_array($extension, $extensions)){
        $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
      }else{
        if($taille > $taille_maxi){
          $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
        }else{
           if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
              $filesToAttach[] = $dirToUpload . $upload_file;  
           }else{
             $erreur.="<li>• Erreur lors de l'upload </li>";
           }
        }
      }
    }
  }
}   

if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
}

?>

<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>

<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">

<?php if($erreur){ echo $MESSAGE_ERROR; } ?>

<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >

<button name="Envoyer" type="submit">Envoyer</button>

</form>

<?php }; ?>
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 12:17
Je fais encore quelques modifications... je te reviens bien vite !
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 12:39
Voilà, il ne reste plus que la pièce jointe supplémentaire :
http://www.commentcamarche.net/forum/affich-34524529-envois-mail-plusieurs-fichier#39
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 14:03
Je constate aussi un autre soucis :
Si la taille du fichier est > à
$taille
et/ou le nombre de fichier dépasse
$nbr_max_file
, le mail part tout de même mais avec ATT00001.txt

$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos)
{
  
  if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur .=  "<li>• Trop de fichiers uploadés</li>";}else
  {
    foreach ($Fr_Photos['name'] as $indice=>$upload_file )
	{
      $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
      $upload_type 	= $Fr_Photos['type'][$indice];
      $extension  	= strrchr($upload_file, '.');
      $taille  		= filesize($tmp_name);

      if(!in_array($extension, $extensions)){$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
	  else
	  {
        if($taille > $taille_maxi)
		{
			$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
		}
		else
		{
           if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {$filesToAttach[] = $dirToUpload . $upload_file;}else{$erreur.="<li>• Erreur lors de l'upload </li>";}
        }
      }
    }
  }

}
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 17:05
Je constate aussi un autre soucis :
Si la taille du fichier est > à

$taille

et/ou le nombre de fichier dépasse

$nbr_max_file

, le mail part tout de même

... ben.. tu dois vérifier.. avant l'envoie du mail.. qu'il n'y a aucune erreur....
jordane45 19221 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 avril 2017 à 17:06
Pour la pj supplémentaire ... une simple recherche sur le net te donne :
https://exchange-server-guide.blogspot.fr/2015/11/att00001.txt-file-fix-email-attachment-issue.html
Commenter la réponse de Sinistrus
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 20 avril 2017 à 17:36
0
Utile
1
Il ne me reste plus que le fichier ATT00001.txt a gérer. J'ai lu l'article et je continue a chercher, j'ai essayé d'ajouter des \n ou des -- mais bon, je penses que la pièce jointe est déjà en fin de message... je cherche toujours !

Voici enfin un code qui fonctionne (sauf erreur de ma part) :
<?php
function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){

$header = "From: $Fr_AdresseMail";
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\""; 
$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n"; 
$message.= "--{$mime_boundary}\n";

  if(!empty($attach)){
    foreach($attach as $pj){
      $file = fopen($pj,"rb");
      $data = fread($file,filesize($pj));
      fclose($file);
      $data = chunk_split(base64_encode($data));
      $fileName = basename($pj);
      $message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
      $message.= "--{$mime_boundary}\n";    
    }
  }

if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;} 
}
//####################################################

if(isset($_POST['Envoyer'])){$erreur="";

while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}

$extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
$taille_maxi  	= 1024;
$nbr_max_file 	= 10;
$erreur 	= "";
$dirToUpload 	= "upload/";
$filesToAttach 	= array();

$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos)
{
 
if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.=  "<li>• Trop de fichiers uploadés</li>";} else {
    foreach ($Fr_Photos['name'] as $indice=>$upload_file )
	{
      $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
      $upload_type 	= $Fr_Photos['type'][$indice];
      $extension  	= strrchr($upload_file, '.');
      $taille  		= filesize($tmp_name);
 
if (!in_array($extension, $extensions))							{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
if ($taille > $taille_maxi)										{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file))	{$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
    }	
}
}

if($erreur==""){

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}

$header 		= "From: ".$Fr_AdresseMail;
$EmailDesti		= MAIL_PERSONNEL;
$sujet			= utf8_decode($data['Titre']);

$message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF."</body></html>";


if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
}

opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);
?>


<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
<?php if($erreur){ echo $MESSAGE_ERROR; } ?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
<button name="Envoyer" type="submit">Envoyer</button>
</form>
<?php } ?>
Sinistrus 852 Messages postés mercredi 12 décembre 2007Date d'inscription 15 novembre 2017 Dernière intervention - 21 avril 2017 à 19:55
Version finale, tout fonctionne parfaitement !
Merci à toi Jordane pour ton temps et ta précieuse aide.

<?php
function sendEmail($EmailDesti, $Fr_AdresseMail, $sujet, $message = "", $attach = NULL)
{
	$header = "From: $Fr_AdresseMail";
	$semi_rand = md5(time());
	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
	$header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";
	$message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n";
	if (!empty($attach))
	{
		foreach($attach as $indice=>$pj)
		{
			$file = fopen($pj, "rb");
			$data = fread($file, filesize($pj));
			fclose($file);
			$data = chunk_split(base64_encode($data));
			$fileName = basename($pj);
			$message.= "--{$mime_boundary}\n";
			$message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n";
		}
	}
	$message.= "--{$mime_boundary}--\n";
	
	return mail($EmailDesti, $sujet, $message, $header);
}
?>


<?php
if(isset($_POST['Envoyer'])){$erreur="";

// Nettoyage des entrées
while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}

$extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
$taille_maxi  	= 10485760;
$nbr_max_file 	= 10;
$erreur 		= "";
$dirToUpload 	= "upload/";
$filesToAttach 	= array();

$Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;

if($Fr_Photos)
{
 
if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.=  "<li>• Trop de fichiers uploadés</li>";} else {
    foreach ($Fr_Photos['name'] as $indice=>$upload_file )
	{
      $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
      $upload_type 	= $Fr_Photos['type'][$indice];
      $extension  	= strrchr($upload_file, '.');
      $taille  		= filesize($tmp_name);
 
if (!in_array($extension, $extensions))							{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
if ($taille > $taille_maxi)										{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file))	{$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
	  
    }
}
}

// Création du message
if($erreur==""){

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}

$header 		= "From: ".$Fr_AdresseMail;
$EmailDesti		= MAIL_PERSONNEL;
$sujet			= utf8_decode($data['Titre']);

$message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)
.$TablF."</body></html>";


if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}

opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);

?>

<?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
<form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
<?php if($erreur){ echo $MESSAGE_ERROR; } ?>
<input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
<button name="Envoyer" type="submit">Envoyer</button>
</form>
<?php } ?>
Commenter la réponse de Sinistrus