Page 1 sur 1

Envoi des emails avec MIME et des fichiers attachés

Posté : 21 déc. 2006, 17:57
par nejme.eddinne
Bonjour
Un problème d'envoi des adresses Emails via un formulaire WEB avec la posibilité d'envoyer plusieurs fichiers uploadés...
en premier lieux je télécharge les fichiers sur le serveur, et je transmis la liste des fichiers dans une variable POST. mon problème c'est qu'il envoi l'email mais le contenu du mail est codé c comme si c t le fread() du fichier avec le codage chunsk_split, donc je suppose que c'est un prblm de header.
@ini_set('max_execution_time','999999');
@ini_set('SMTP','smtp.serveur.com');
$n_ligne="\n";
$boundary= "--".md5(uniqid(rand()));
///////////////////// AATCTAHHCC ////////////////
function attachm($nom_fichier,$boundarys)
{
		$n_ligne="\n";
		//extension er type
		$exts=explode(".",$nom_fichier);
		$extns=strtolower($exts[(sizeof($exts)-1)]);
		if($extns=="pdf")
		$extns="application/pdf";
		else if($extns=="doc")
		$extns="application/msword";
		else
		$extns="image/jpg";
		////
		
		$fichier="mailing/files_mail/$nom_fichier";
		$handle=fopen($fichier, 'rb');
		$contenu_f=fread($handle, filesize($fichier));
		$contenu_f=chunk_split(base64_encode($contenu_f));
		fclose($handle);
		
		
		$reponse=$boundrys;
		$reponse.="Content-Type: $extns; name=\"".$nom_fichier."\"$n_ligne";
		$reponse.="Content-Transfer-Encoding: base64 $n_ligne";
		$reponse.="Content-Disposition: attachment; filename=\"".$fichier."\"".$n_ligne.$n_ligne;
		$reponse.="$contenu_f".$n_ligne.$n_ligne;
		$reponse.=$boundrys."--".$n_ligne.$n_ligne;
return $reponse;	
}		
//////////////////////////////	

//////////////////////////// TABLEAU D'ENVOIE ///////////////
	switch($_POST["groupe"])
	{
	case 'tous':$i=0;
				$mails_rq=mysql_query("SELECT email_annuaire FROM annuaire_jd");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mails_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT email  FROM emails");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mails_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT email  FROM users");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mail_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT mail_m  FROM grp_mail_m");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	case 'jd':  $i=0;
				$mails_rq=mysql_query("SELECT email_annuaire FROM annuaire_jd");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
				
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	default:	unset($mails_rq,$mail_tab);$i=0;
				$mails_rq=mysql_query("SELECT mail_m  FROM mail_mailing WHERE grp_mail_m='".$_POST["groupe"]."'");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	}


$header="MIME-Version: 1.0".$n_ligne.$n_ligne;
$header.="Content-Type: multipart/related; boundary=\"".$boundary."\"".$n_ligne.$n_ligne;
$header.="From: Webmaster CJD<[email protected]>$n_ligne";
//$header.="Content-Type: multipart/mixed; ".$n_lignes.$n_ligne;
//$header.="Content-Type: text/html; charset=\"iso-8859-1\"".$n_ligne;


$message=$boundary.$n_ligne.$n_ligne;
$message.="Content-Type: text/html; charset=\"iso-8859-1\"".$n_ligne;
$message.="Content-Transfer-Encoding: 8bit".$n_ligne.$n_ligne;*/
$message.=$_POST["text"].$n_ligne.$n_ligne;

if(!empty($_POST["attach_files"]))
{
$files=explode("|",$_POST["attach_files"]);
	foreach($files as $fich_up)
		if($fich_up!="")
		{
		$message.=attachm($fich_up,$boundary);
		}
}else{
$message.=attachm("no.jpg",$boundary);
}
$message.="--".$boundary."--".$n_ligne.$n_ligne;*/
//echo $message;
	$nbr_env=0;
	$nbr_n_env=0;
//echo $header;
	foreach($mails as $adre_mail)
	{
		if(mail($adre_mail,"Centre des Jeunes Dirigeants",$message,$header))
		{
		$nbr_env++;
		}else
		$nbr_n_env++;
	
	$adr++;
	}

	

Posté : 21 déc. 2006, 18:06
par nejme.eddinne
je voulé rajouter qu'avec cette ligne:
$header.="Content-Type: multipart/mixed; boundary=\"".$boundary."\"".$n_ligne.$n_ligne;
je reçoit un email vide
mais si je met
$header.="Content-Type: multipart/mixed; ".$n_ligne.$n_ligne;
je reçoit le message codé comme je vous est indiqué

Merci

Posté : 21 déc. 2006, 18:11
par zeus
Je ne suis pas spécialiste des mails mais il me semble qu'il faut répéter le boundary autour de chaque pièce jointe et non pas seulement autour de l'ensemble des pièces jointes :?

Posté : 21 déc. 2006, 18:47
par nejme.eddinne
C'est ce que j'ai fais, pour chaque fichier attaché j'appelle la fonction attachm()
:(

Posté : 21 déc. 2006, 19:16
par zeus
Dans ce cas là, je ne suis pas sur qu'il faille répéter les headers à chaque pièce jointe...