Erreur piece jointe

Fermé
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié par Sinistrus le 3/08/2013 à 12:36
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 3 août 2013 à 15:26
Bonjour à tous !

Je sollicite votre aide pour résoudre un problème d'envois de mail avec plusieurs pièces jointes.
Je vous présente déjà le travail que j'ai fais (ps: code collé de ci et de là avec quelques petites modifs de ma part)

Voici donc ma page :
<?php
if(isset($_POST['Envoyer'])){$erreur="";

$regex_head = '/[\n\r]/';
$boundary = "_".md5 (uniqid (rand()));

// 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);}}}

// Formatage des entrées
$f_01=trim(ucwords(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_01))); //Nom
$f_02=trim(ucwords(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_02))); //Email
$f_03=trim(ucwords(preg_replace("[^0-9\ +]", "", $f_03)));                   //Téléphone
$f_04=trim(ucwords(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_04))); //Commentaire
$f_11=strip_tags(trim($f_11));
$f_12=strip_tags(trim($f_12));

// Verification des champs
if(strlen($f_01)<2){$erreur.="<li>".$CAS_ErrNoms; $errf_01=1;}
if(strlen($f_02)<2){$erreur.="<li>".$CAS_ErrEmail1; $errf_02=1; }else{
if(!preg_match('/^[^@]{1,64}@[^@]{1,255}$/', $f_02)){$erreur.="<li>".$CAS_ErrEmail2; $errf_02=1;}}
if(strlen($f_03)<2){$erreur.="<li>".$CAS_ErrPhone; $errf_03=1;}
if($_FILES['f_05']['error'] == UPLOAD_ERR_NO_FILE) {$erreur.="<li>".$CAS_ErrPhoto1; $errf_05=1;}
if($_FILES['f_06']['error'] == UPLOAD_ERR_NO_FILE) {$erreur.="<li>".$CAS_ErrPhoto2; $errf_06=1;}
if($_FILES['f_07']['error'] == UPLOAD_ERR_NO_FILE) {$erreur.="<li>".$CAS_ErrPhoto3; $errf_07=1;}

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

//$attached_file = file_get_contents($f_05);
//$attached_file = chunk_split(base64_encode($attached_file));

$upload_file = $uploaddir . $_FILES['f_05']['name'];

if (move_uploaded_file($_FILES['f_05']['tmp_name'], $upload_file)) {
$ext = explode(".", basename($_FILES['f_05']['name']));
switch($ext[1]) {
default:           $attach_type =  "application/octet-stream"; 
break; case "png": $attach_type =  "image/png";
break; case "gif": $attach_type =  "image/gif";
break; case "jpg": $attach_type =  "image/jpg";
break; case"jpeg": $attach_type =  "image/jpeg";
break; case "bmp": $attach_type =  "image/bmp";
break;}

$piecejointe = $_FILES["f_05"]["name"];}

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);}

// Message
$titre= $CAS_CandidCasting;
$tete.= "X-Priority: 1 \n";
$tete.= "From:".$f_02."\n";
$tete = "MIME-version: 1.0\n";
$tete.= "Content-type: multipart/mixed; ";
$tete.= "boundary=\"Message-Boundary\"\n";
$tete.= "Content-transfer-encoding: 7BIT\n";
$tete.= "X-attachments:".$piecejointe."\n";

$corps = "--Message-Boundary\n";
$corps.= "Content-type: text/plain; charset=ISO-8859-1\n";
$corps.= "Content-transfer-encoding: 7BIT\n";

$corps.= "\n\n--Message-Boundary\n";
$corps.= "Content-type:".$attach_type."; name=".$piecejointe."\n";
$corps.= "Content-Length:".filesize($piecejointe)."\n";
$corps.= "Content-transfer-Encoding: BASE64\n";
$corps.= "Content-disposition: attachment; filename=".$piecejointe."\n\n";
$corps.= "$encoded_attach\n";
$corps.= "--Message-Boundary--\n";

$corps.=$CAS_NomPrenom.      " : ".$f_01."\n";
$corps.=$CAS_AdresseEmail.   " : ".$f_02."\n";
$corps.=$CAS_Telephone.     " : ".$f_03."\n";
$corps.=$CAS_Commentaire.    " : ".$f_04."\n\n";
$corps.=$CAS_Photos1.        " : ".$f_05."\n";
$corps.=$CAS_Photos2.        " : ".$f_06."\n";
$corps.=$CAS_Photos3.   " : ".$f_07."\n";
$corps.=$CAS_Photos4.   " : ".$f_08."\n";
$corps.=$CAS_Photos5.   " : ".$f_09."\n";
$corps.=$CAS_Photos6.   " : ".$f_10."\n\n";
$corps.=$CAS_Facebook.   " : ".$f_11."\n";
$corps.=$CAS_Site.    " : ".$f_12."\n";

if(mail("monmail@amoi.com", $titre, stripslashes($corps), $tete)){
$ok_mail="true";}else{$erreur.="<div class='DivError TexteError'><li>".$CAS_ErreurEnvois2."</div>";}}}
?>

Pouvez-vous m'aider à corriger svp ?
Voici la page en question : http://sivop.com/casting_inscription.php

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
3 août 2013 à 15:26
Je ne vois pas de code pour mettre plusieurs pièces jointes ici, juste pour une seule.
Mais il pourrait y en avoir plusieurs: c'est un mesage multipart, donc faut juste ajouter un partie en plus.

Aussi, l'en-tête "X-attachments" n'existe pas, même si elle n'est pas standard, une recherche Google ne nous dis rien sur son éventuelle existence.

L'idéal pour plusieures pièces jointes serait une boucle foreach():
$piecejointes = [ les chemins des pièce jointes envoyées (absolu ou relatif, peu importe) ];
foreach($piecejointe as $piecejointes) {
    $nomfichier = basename($piecejointe);
    $taille = filesize($piecejointe);
    $file = fopen($piecejointe, "r");
    $contents = fread($file, $taille);
    $encoded_attach = chunk_split(base64_encode($contents));
    fclose($file);
    $corps.= "\n\n--Message-Boundary\n";
    $corps.= "Content-type:".$attach_type."; name=".$nomfichier."\n";
    $corps.= "Content-Length:".$taille."\n";
    $corps.= "Content-transfer-Encoding: BASE64\n";
    $corps.= "Content-disposition: attachment; filename=".$nomfichier."\n\n";
    $corps.= "$encoded_attach\n";
    $corps.= "--Message-Boundary\n";
    // Remarque la suppression des deux -- de la fin du Message-Boundary, ils étaient inutils
}

Avant, faut adapter le if (file_exists($upload_file)) après l'upload pour ajouter le fichier à l'array $piecejointes.
Pareil pour l'upoad lui-même, utilise des arrays, des arrays et ENCORE des arrays.
Ton code actuel d'upload ne reçoit qu'un seul fichier, $_FILES['f_05'].
0