Rechercher : dans
Par :

Problème 2 pieces jointes php

Dernière réponse le 2 mar 2009 à 11:10:31 lucasc, le 17 fév 2009 à 16:22:09 
 Signaler ce message aux modérateurs

Bonjour,

Voilà mon problème : j'arrive à envoyer une pièce jointe mais lorsque je veux en envoyer une deuxième dans le même mail ca ne marche pas.

Ca ne joint qu'un seul fichier ! Comment faire ?

Voici le bout de mon code traitant l'envoi du mail avec les pièces jointes :


$boundary = "-----=".md5(uniqid(rand()));

	$header = "MIME-Version: 1.0\r\n";
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	$msg .= "\r\n";
	$msg .= "Un client vient d'effectuer une réservation.";
	$msg .= "\r\n";


	$file0 = "contrat.pdf";
	$file1 = "facture.pdf";
	
	$fp0 = fopen($file0, "rb");
	$fp1 = fopen($file1, "rb");
	
	$attachment0 = fread($fp0, filesize($file0));
	$attachment1 = fread($fp1, filesize($file1));

	fclose($fp0);
	fclose($fp1);


	$attachment0 = chunk_split(base64_encode($attachment0));
	$attachment1 = chunk_split(base64_encode($attachment1));

	$msg .= "--$boundary\r\n";
	
	$msg .= "Content-Type: pdf; name=\"$file0\"\r\n";
	$msg .= "Content-Type: pdf; name=\"$file1\"\r\n";
	
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	
	$msg .= "Content-Disposition: attachement; filename=\"$file0\"\r\n";
	$msg .= "Content-Disposition: attachement; filename=\"$file1\"\r\n";
	
	$msg .= "\r\n";

	$msg .= $attachment0."\r\n";
	$msg .= $attachment1."\r\n";
	
	$msg .= "\r\n\r\n";

	$msg .= "--$boundary--\r\n";

	$destinataire = "crivelli.lucas@gmail.com";
	$expediteur   = "info@easy-park.ch";
	$reponse      = $expediteur;
	$sujet = "Rapport de réservation";

	mail($destinataire, $sujet, $msg,"Reply-to: $reponse\r\nFrom: ".$expediteur."\r\n".$header);<code>
</code>




mais ca ne marche pas.

merci pour votre aide...
Configuration: Mac OS X
Safari 525.27.1

Meilleures réponses pour « problème 2 pieces jointes php » dans :
Envoyer de gros fichiers (pièces jointes) par mail VoirLes systèmes de messagerie bloquent généralement les pièces jointes volumineuses, alors comment faire parvenir un fichier lourd (de plusieurs Mo) à son destinataire ? La solution consiste à utiliser un service d'hébergement temporaire de fichiers...
[Outlook Express] Pièces jointes impossibles à envoyer VoirSi Outlook Express ne peut pas envoyer les pièces jointes ajoutées à votre mail, ceci est probablement dû au fait qu'elles possèdent une taille trop volumineuse. Pour y remédier, la solution consiste à scinder les pièces jointes en plusieurs...
Outlook Express bloque les pièces jointes VoirLors de la consultation d'un email, Outlook (Express) refuse d'ouvrir les fichiers attachés. Il s'agit vraisemblablement d'un problème de configuration de Outlook évitant l'ouverture des pièces jointes pour des raisons de sécurité. Pour y...

1

lucasc, le 18 fév 2009 à 20:12:47

Personne pour m'aider ?

Répondre à lucasc

2

lucasc, le 18 fév 2009 à 20:45:43

Svp j'ai vraiment besoin d'aide !!!

Répondre à lucasc

3

Dalida, le 18 fév 2009 à 20:49:56

Salut,

il ne faut pas séparer chaque PJ avec le boundary ?
en fait traiter l'une après l'autre comme si il n'y en avait qu'une ?

et demande aux modos de gommer les adresses mail du premier post, ça peut passer chez Google.
tu t'en fous peut être mais le client…
-;o)
[ Mathieu ]

Il y a sûrement des pandas pour ne dépendre de rien

Répondre à Dalida

4

lucasc, le 18 fév 2009 à 20:52:11

Merci mathieu,

je vais essayer ca.

Répondre à lucasc

5

Dalida, le 18 fév 2009 à 21:16:16

Au passage et après un petit tour dans le manuel, ça a bien l'air d'être ça !
-:o)

regarde cet exemple, il boucle sur les attachments avec boundary, content type et compagnie…
[ Mathieu ]

Il y a sûrement des pandas pour ne dépendre de rien

Répondre à Dalida

6

lucasc, le 18 fév 2009 à 21:18:21

Merci beaucoup

Répondre à lucasc

7

lucasc, le 27 fév 2009 à 19:15:36

UP finalement je n'ai toujours pas trouvé !!

S'il vous plaît j'ai vraiment besoin de votre aide ... MERCI

Répondre à lucasc

8

Dalida, le 28 fév 2009 à 13:21:16

Salut,

ton code ressemble à quoi maintenant ?
[ Mathieu ]

Il y a sûrement des pandas pour ne dépendre de rien

Répondre à Dalida

9

lucasc, le 28 fév 2009 à 13:33:10

Salut Mathieu merci de ton aide,

Voila mon code :

<?php

	mysql_connect('...','...','...');
	mysql_select_db('...');
 
	$n_client_login = $_SESSION['n_client_login'];
	
	$email = $donnees['email'];
	
	//******************mail	
	$boundary = "-----=".md5(uniqid(rand()));

	$header = "MIME-Version: 1.0\r\n";
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	$msg .= "\r\n";
	
	
	$msg .= "Ici le message.";
	$msg .= "\r\n";
	
	$file1 = "contrat.pdf";
        $file2 = "facture.pdf";

	$fp = fopen($file1, "rb");
        $fp2 = fopen($file2, "rb");

	$attachment = fread($fp, filesize($file1));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));
	
	$attachment2 = fread($fp2, filesize($file2));
	fclose($fp2);
	$attachment2 = chunk_split(base64_encode($attachment2));

	//piece jointe CONTRAT
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file1\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$file1\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";

	$msg .= "--$boundary--\r\n";
	
	//piece jointe FACTURE
	$msg .= "--$boundary\r\n";
	
	$msg .= "Content-Type: pdf; name=\"$file2\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$file2\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment2."\r\n";
	$msg .= "\r\n\r\n";

	$msg .= "--$boundary--\r\n";

	$destinataire = "blablabla.com";
	$expediteur   = "blablabla.ch";
	$reponse      = $expediteur;
	$sujet = "Rapport de réservation";

	mail($destinataire, $sujet, $msg,"Reply-to: $reponse\r\nFrom: ".$expediteur."\r\n".$header);
	//***********************mail
	
	
	mysql_close();
	
	

	
?>


Malheureusement ça ne marche pas. Je reçois seulement le fichier contrat.pdf.


Merci de ton aide. Lucas

Répondre à lucasc

10

Dalida, le 2 mar 2009 à 09:07:42

	$msg .= "--$boundary--\r\n";
	
	//piece jointe FACTURE
	$msg .= "--$boundary\r\n";

le boundary du haut n'est pas en trop ?
normalement quand tu ajoutes les deux tirets après c'est celui qui finit le message non ?
[ Mathieu ]
Il y a sûrement des pandas pour ne dépendre de rien

Répondre à Dalida

11

lucasc, le 2 mar 2009 à 10:22:38

J'ai moi-même trouvé la réponse :

Voici le code de base pour envoyer deux pièces jointes :

<?php
	session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/plain; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>

<?php

	mysql_connect('...','...','...');
	mysql_select_db('...');
	
	$email = $donnees['email'];
	
	//******************mail	
	$boundary = "-----=".md5(uniqid(rand()));

	$header = "MIME-Version: 1.0\r\n";
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	$msg .= "\r\n";
	
	$msg .= "BLABLABLA.";
	$msg .= "\r\n";
	
	$file = "fichier1.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier1
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";

	$file = "fichier2.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier2
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";
	
	$msg .= "--$boundary--\r\n";

	$destinataire = "monadresse@gmail.com";
	$expediteur   = "adresse@expediteur";
	$reponse      = $expediteur;
	$sujet = "Sujet";

	mail($destinataire, $sujet, $msg,"Reply-to: $reponse\r\nFrom: ".$expediteur."\r\n".$header);
	//***********************mail
	
	
	mysql_close();
	
?>
</body>
</html>



Voila ce qui à résolu mon problème. Comme l'a dit Mathieu (presque juste) il y avait
$msg .= "--$boundary--\r\n";
	
	//piece jointe FACTURE
	$msg .= "--$boundary\r\n";


en trop. Comme l'a dit également Mathieu il faut traiter chaque pj comme si il n'y en avait qu'une. et dèrnière astuce. Il faut mettre la première en inline et la deuxième en attachment.

Bonne continuation à tous. Lucas


PS : merci mathieu

Répondre à lucasc

12

lucasc, le 2 mar 2009 à 10:23:38
  • +1

J'ai moi-même trouvé la réponse :

Voici le code de base pour envoyer deux pièces jointes :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/plain; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>

<?php

	mysql_connect('...','...','...');
	mysql_select_db('...');

	
	//******************mail	
	$boundary = "-----=".md5(uniqid(rand()));

	$header = "MIME-Version: 1.0\r\n";
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	$msg .= "\r\n";
	
	$msg .= "BLABLABLA.";
	$msg .= "\r\n";
	
	$file = "fichier1.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier1
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";

	$file = "fichier2.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier2
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";
	
	$msg .= "--$boundary--\r\n";

	$destinataire = "monadresse@gmail.com";
	$expediteur   = "adresse@expediteur";
	$reponse      = $expediteur;
	$sujet = "Sujet";

	mail($destinataire, $sujet, $msg,"Reply-to: $reponse\r\nFrom: ".$expediteur."\r\n".$header);
	//***********************mail
	
	
	mysql_close();
	
?>
</body>
</html>



Voila ce qui à résolu mon problème. Comme l'a dit Mathieu (presque juste) il y avait
$msg .= "--$boundary--\r\n";
	
	//piece jointe FACTURE
	$msg .= "--$boundary\r\n";


en trop. Comme l'a dit également Mathieu il faut traiter chaque pj comme si il n'y en avait qu'une. et dèrnière astuce. Il faut mettre la première en inline et la deuxième en attachment.

Bonne continuation à tous. Lucas


PS : merci mathieu

Répondre à lucasc

13

lucasc, le 2 mar 2009 à 10:23:38

J'ai moi-même trouvé la réponse :

Voici le code de base pour envoyer deux pièces jointes :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/plain; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>

<?php

	mysql_connect('...','...','...');
	mysql_select_db('...');

	
	//******************mail	
	$boundary = "-----=".md5(uniqid(rand()));

	$header = "MIME-Version: 1.0\r\n";
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	$msg .= "\r\n";
	
	$msg .= "BLABLABLA.";
	$msg .= "\r\n";
	
	$file = "fichier1.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier1
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";

	$file = "fichier2.pdf";
	$fp = fopen($file, "rb");
	$attachment = fread($fp, filesize($file));
	fclose($fp);
	$attachment = chunk_split(base64_encode($attachment));

	//piece jointe fichier2
	$msg .= "--$boundary\r\n";

	$msg .= "Content-Type: pdf; name=\"$file\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";

	$msg .= "\r\n";

	$msg .= $attachment."\r\n";
	$msg .= "\r\n\r\n";
	
	$msg .= "--$boundary--\r\n";

	$destinataire = "monadresse@gmail.com";
	$expediteur   = "adresse@expediteur";
	$reponse      = $expediteur;
	$sujet = "Sujet";

	mail($destinataire, $sujet, $msg,"Reply-to: $reponse\r\nFrom: ".$expediteur."\r\n".$header);
	//***********************mail
	
	
	mysql_close();
	
?>
</body>
</html>



Voila ce qui à résolu mon problème. Comme l'a dit Mathieu (presque juste) il y avait
$msg .= "--$boundary--\r\n";
	
	//piece jointe FACTURE
	$msg .= "--$boundary\r\n";


en trop. Comme l'a dit également Mathieu il faut traiter chaque pj comme si il n'y en avait qu'une. et dèrnière astuce. Il faut mettre la première en inline et la deuxième en attachment.

Bonne continuation à tous. Lucas


PS : merci mathieu

Répondre à lucasc

14

 Dalida, le 2 mar 2009 à 11:10:31

Nickel !

bon courage pour la suite !
-;o)
[ Mathieu ]

Il y a sûrement des pandas pour ne dépendre de rien

Répondre à Dalida