8791 sujets

Développement web côté serveur, CMS

Salut à tous. Je suis en train de faire un systeme de mail pour envoyer du texte avec deux pièces jointes.

Tout fonctionne niquel sauf que je ne recoit qu'une seule des deux pièces jointes.

Si vous avez une idée .... je vous en remercie d'avance.

Rude



$expediteur = substr($_POST["adresses"],0,-1);

echo $expediteur;

echo"<h3>Envoi de mail</h3>";
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
$headers .='From: "XXXX@XXX.fr'."\n"; 
$headers .='Reply-To: XXX@XXX.fr'."\n";  
$msg = "--$boundary\r\n";
$msg .= "Content-Type: text/html; charset=\"iso-8859-15\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .='<html><head><title>Un titre ici</title></head><body>';
$msg .= stripslashes($_POST["texteu"])."\r\n";
$msg .='</body></html>';
$msg .= "\r\n";

include ('./fonction_mime.php'); // Fonctions pour retourner le type MIME d'un fichier

$fichier = $_FILES["fichier_1"]["tmp_name"];
$fichier_nom = $_FILES["fichier_1"]["name"];

if($fichier[0]=="\\"){
		$fichier=stripslashes($fichier);
	}
	if($fichier != ""){
		$fp = fopen($fichier, "r") or die("probleme à l'ouverture du fichier");
		$attachment = fread($fp, filesize($fichier));
		fclose($fp);
	}
	$attachment = chunk_split(base64_encode($attachment));
	$fichier=basename($fichier);
	$typeMIMEFichier=  mime($fichier);
	
	$msg .= "--$boundary\r\n";
	$msg .= "Content-Type: ".$typeMIMEFichier."; name=\"$fichier_nom\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachement; filename=\"$fichier_nom\"\r\n";
	$msg .= "\r\n";
	$msg .= $attachment . "\r\n";
	$msg .= "\r\n\r\n";
$fichier2 = $_FILES["fichier_2"]["tmp_name"];
$fichier2_nom = $_FILES["fichier_2"]["name"];

	if($fichier2[0]=="\\"){
		$fichier2=stripslashes($fichier2);
	}
	
	if($fichier2 != ""){
		$fp2 = fopen($fichier2,"r") or die("probl&egrave;me &agrave; l'ouverture du fichier");
		$attachment2 = fread($fp2,filesize($fichier2));
		fclose($fp2);								
 	}
	$attachment2 = chunk_split(base64_encode($attachment2));
	$fichier2=basename($fichier2);
	$typeMIMEFichier2 = mime($fichier2);
	$msg .= "--$boundary--\r\n";
	
	$msg .= "Content-Type: ".$typeMIMEFichier2."; name=\"$fichier2_nom\"\r\n";
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	$msg .= "Content-Disposition: attachement; filename=\"$fichier2_nom\"\r\n";
	$msg .= "\r\n";
	$msg .= $attachment2 . "\r\n";

	$msg .= "\r\n\r\n";
	$msg .= "--$boundary--\r\n";
$dest=$expediteur;
$paketKonVeu=20;
$morceauDest=explode(',',$dest);

if(sizeof($morceauDest)<=$paketKonVeu){		//ca tient dans un seul paquet
	$expediteur="";							//chaine vide
	for($i=0;$i<=$paketKonVeu-1;$i++){
		if($i==$paketKonVeu-1){				//dernier email
			$expediteur.= $morceauDest[$i];	//pas de Virgule à la fin
		}else{
			$expediteur .= $morceauDest[$i].",";
		}
	}
	echo "<BR>Envoi de mail EN COURS";
	mail($expediteur,$sujet,$msg,$header);
	echo "-----TERMINE";
}
if(sizeof($morceauDest)>$paketKonVeu){		//il faut plusieurs paquets
	$nbPaquets=ceil(sizeof($morceauDest)/$paketKonVeu);
											//EXEMPLE PAR PAQUET DE 20 DESTINATAIRES
											//INDICES DU TABLEAU :
											//0-->19 20-->39 40-->59 60-->79 80-->99 100-->119
	for($paquet=0;$paquet<$nbPaquets;$paquet++){
		$expediteur="";						//chaine vide
		$seuilBas=$paquet*$paketKonVeu;
		$seuilHaut=$seuilBas+($paketKonVeu-1);
		for($i=$seuilBas;$i<=$seuilHaut;$i++){
			if($i==$seuilHaut){				//dernier email
				$expediteur .= $morceauDest[$i];//pas de Virgule à la fin
			}else{
				$expediteur .= $morceauDest[$i].",";
			}
		}									//fin du FOR $seuil
		echo "<BR>Envoi de mail pour la serie&nbsp".($paquet+1)."&nbsp;de destinataires EN COURS";
		set_time_limit(0);
		mail($expediteur,$objet,$msg,$header);
		echo "-----TERMINE";
	}										//fin du FOR $paquet
}											//fin du IF
	echo "<BR><h3>Fin de l'envoi de mail</h3>";
?>


Modifié par ffwrude (13 Aug 2008 - 17:49)
Salut,

je suis totalement débutant dans l'ecriture d'entête de mail alors ce qui suit n'est qu'une supposition aprés avoir lu un truc sur cette page.

en gros le truc qui a retenu mon attention est un celui qui dit

a écrit :
il fait la séparation entre les differentes parties égalementpar "--[LE BOUNDARY]" et il définit la fin du message par "--[LE BOUNDARY]--"



dans ton code pour la deuxieme piece tu fais

	$attachment2 = chunk_split(base64_encode($attachment2));
	$fichier2=basename($fichier2);
	$typeMIMEFichier2 = mime($fichier2);
	$msg .= "--$boundary[b]--[/b]\r\n";


les 2 derniers -- ne sont-ils pas en trop.

si c'est pas ça scuz, c'était pour faire avancer le schmi... le truc...
enfin le machin quoi Smiley cligne
Modifié par CPascal (03 Jan 2008 - 20:34)
Bah écoute je vais te dire merci car tu as atiré mon attention sur le boundary et effectivement.... il y'en avait un qui manquait entre les deux fichiers. (ceux de la fin était aussi en trop même si ca ne changeait pas grand chose).

Merci bien Smiley smile

Rude