Formulaire php, incorporation d'une 2eme pièce jointe par mail

Petit nouveau ! | 3 Messages

07 mars 2009, 19:02

Bonjour, j'ai un code php trouvé sur internet que je souhaiterai améliorer.
Pour comprendre, je cherche à faire un formulaire avec envoi de plusieurs pièces jointe.
LE code marche pour l'envoi d'un fichier, (si c'est une image elle est incorporé dans le coprs du message)
Je souhaite ajouter la possibilité d'envoyer une 2eme pièce jointe.

Il doit y avoir une erreur de syntaxe car la 1ere pièce jointe est inclus dans le mail que je recoi mais la seconde c'est comme si elle existait pas ....

if (is_uploaded_file($attach)) {
    $file = fopen($attach, "r");
    $contents = fread($file, $attach_size);
    $encoded_attach = chunk_split(base64_encode($contents));
    fclose($file);
	
	$msg .= "\n\n--Message-Boundary\n"; //
    $msg .= "Content-type: $attach_type; name=\"$attach_name\"\n";
    $msg .= "Content-Transfer-Encoding: BASE64\n";
    $msg .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
    $msg .= "$encoded_attach\n";
    $msg .= "--Message-Boundary--\n";
	
	}
	
	if (is_uploaded_file($attach2)) {
    $file2 = fopen($attach2, "r");
    $contents2 = fread($file2, $attach2_size);
    $encoded_attach2 = chunk_split(base64_encode($contents2));
    fclose($file2);
	
    $msg .= "\n\n--Message-Boundary\n"; //
    $msg .= "Content-type: $attach2_type; name=\"$attach2_name\"\n";
    $msg .= "Content-Transfer-Encoding: BASE64\n";
    $msg .= "Content-disposition: attachment; filename=\"$attach2_name\"\n\n";
    $msg .= "$encoded_attach2\n";
    $msg .= "--Message-Boundary--\n";
	
	}

JE pense que je avez compris que les 2 input file sont nommées :
- attach
- attach2
Merci d'avance !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 mars 2009, 22:54

Hmm.. d'après ton code tu génère à la suite deux lignes "--Message-Boundary" (à la fin de la premiere PJ et au début de la seconde) ... je ne sais pas si ton problème vient de là, mais ca me parait bizare d'avoir une zone du mail délimitée, mais qui ne contient rien entre tes deux PJ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 139 Messages

07 mars 2009, 22:57


Petit nouveau ! | 3 Messages

08 mars 2009, 14:59

Alors j'ai essayé la piste de Ryle
Et j'ai donc supprimer les deux frontières et toujours qu'une seule pièce jointe reçu ...
Quelqu'un d'autre aurai une idée ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 mars 2009, 21:42

Euh... j'ai pas parlé de supprimer les deux, mais juste de supprimer la redondance pour avoir :

Code : Tout sélectionner

--frontière Pièce Jointe 1 --frontière Pièce Jointe 2 --frontière
et pas

Code : Tout sélectionner

--frontière Pièce Jointe 1 --frontière --frontière Pièce Jointe 2 --frontière
Il faut également gérer les cas où tu n'as qu'une seule pj... d'ailleurs c'est laquelle la pj que tu recois ? la premiere ou la 2nd ? si tu ne spécifies que la 2nd, est-ce qu'elle apparait bien ? (en gros le problème est-il lié à l'envoi de deux pj où juste à l'envoi de la seconde ?)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

09 mars 2009, 00:07

Alors j'ai fait comme tu ma dit cad :

Code : Tout sélectionner

if (is_uploaded_file($attach)) { $file = fopen($attach, "r"); $contents = fread($file, $attach_size); $encoded_attach = chunk_split(base64_encode($contents)); fclose($file); $msg .= "\n\n--Message-Boundary\n"; // $msg .= "Content-type: $attach_type; name=\"$attach_name\"\n"; $msg .= "Content-Transfer-Encoding: BASE64\n"; $msg .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n"; $msg .= "$encoded_attach\n"; $msg .= "--Message-Boundary--\n"; } if (is_uploaded_file($attach2)) { $file2 = fopen($attach2, "r"); $contents2 = fread($file2, $attach2_size); $encoded_attach2 = chunk_split(base64_encode($contents2)); fclose($file2); $msg .= "Content-type: $attach2_type; name=\"$attach2_name\"\n"; $msg .= "Content-Transfer-Encoding: BASE64\n"; $msg .= "Content-disposition: attachment; filename=\"$attach2_name\"\n\n"; $msg .= "$encoded_attach2\n"; $msg .= "--Message-Boundary--\n"; }
et toujours pas de seconde pièce jointe, il n'y a que la 1ere intégrer. En effet il faudra après gerer le cas ou il y a que une seule pièce jointe. Mais pour l'instant je cherche a tester pour comprendre comment sa marche pour après modifier mon code..
La première pièce jointe est la , mais la deuxième pas la ...